一点说明:
由于最近在学习Groovy相关的东西,就想是否有Groovy和Struts2集成的解决方案,网上一搜,果然有一个插件,可以使Groovy写的类直接作为Struts的Action。
但是,该插件所依赖的Groovy版本是1.0的,Groovy1.0+Struts2.1.1+s2ss(0.2版本)集成测试通过,而最新版的Groovy1.7.6无论如何都会出现如下异常:groovy.util.ResourceException: Cannot open URL:...
无奈之下,将groovy插件的源码下下来,改了源码,问题解决,更改后的Jar包在附件中(struts2-groovy-plugin-0.3.jar)
使用ss2s插件的好处是,可以将Groovy类文件直接放在classes下无需编译成JVM字节码,这样,就可以动态更改groovy文件,不像Java类那样,编译后重启Web服务器。坏处是运行效率问题。
软件包:
软件如下:
Struts2-Groovy插件: s2sss(Struts2 Scripting Support):struts-groovy-plugin-0.3.jar
Eclipse 3.6.1 JEE版本
Eclipse-Groovy插件: Groovy-Eclipse 2.1.1.xx-20101215-2100-e36(IDE,代码提示)
Groovy: groovy-binary-1.7.6.zip
Struts2: struts-2.2.1.1-all.zip
Tomcat: apache-tomcat-7.0.5
集成
打开Eclipse新建Dynamic Web Project,名为Struts2Groovy(注意创建工程是,将生成部署描述符文件选项打钩)
将以下以来的Jar包放进WEB-INF/lib目录下:
S2SS:
struts2-groovy-plugin-0.3.jar
Groovy:(S2SS依赖)
antlr-2.7.7.jar
asm-3.2.jar
groovy-1.7.6.jar
Struts2:
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-logging-1.0.4.jar
freemarker-2.3.16.jar
javassist-3.7.ga.jar
ognl-3.0.jar
struts2-core-2.2.1.1.jar
xwork-core-2.2.1.1.jar
1. 在web.xml中配置struts2过滤器:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Struts2Groovy</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
2. 在struts.xml文件中配置ObjectFactory,加入:
<constant name="struts.objectFactory" value="groovy" />
3. 在Struts2中配置Groovy类和平常的Java Action差不多,只不过必须加.groovy后缀
<!-- 匹配groovy类 -->
<action name="*_2*" class="org.rsljdkt.struts2.struts2groovy.action.{1}Action.groovy"
method="{2}">
<result> success.jsp</result>
</action>
完整的struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.configuration.xml.reload " value="true" />
<!-- 配置对象工厂,以使用Groovy类作为Action -->
<constant name="struts.objectFactory" value="groovy" />
<package name="test" namespace="/" extends="struts-default">
<!-- 匹配Java类 -->
<action name="*_1*" class="org.rsljdkt.struts2.struts2groovy.action.{1}Action"
method="{2}">
<result> success.jsp</result>
</action>
<!-- 匹配Groovy类 -->
<action name="*_2*" class="org.rsljdkt.struts2.struts2groovy.action.{1}Action.groovy"
method="{2}">
<result> success.jsp</result>
</action>
</package>
</struts>
4. 编写BookAction.groovy类:
package org.rsljdkt.struts2.struts2groovy.action;
class BookAction{
def message
def Add(){
message = "book added successfully!"
"success"
}
def Delete(){
message = "book deleted successfully!"
"success"
}
}
5. 编写UserAction.java类,作为比较:
package org.rsljdkt.struts2.struts2groovy.action;
public class UserAction {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String Add(){
message = "user added successfully!";
return "success";
}
public String Delete(){
message = "user deleted successfully!";
return "success";
}
}
6. 创建index.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index</title>
</head>
<body>
<h3>Java类作为Action</h3>
<s:a action="User_1Add">添加用户</s:a>
<s:a action="User_1Delete">删除用户</s:a>
<hr>
<h3>Groovy类作为Action</h3>
<s:a action="Book_2Add">添加书籍</s:a>
<s:a action="Book_2Delete">删除书籍</s:a>
</body>
</html>
7. 创建success.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>操作成功</title>
</head>
<body>
<s:property value = "message"/>
</body>
</html>
关于S2SS的改动
使用Eclipse+Maven来构建S2SS
m2eclipse插件更新安装地址:
http://m2eclipse.sonatype.org/sites/m2e
S2SS源码的下载地址:
http://code.google.com/p/s2ss/
本人做了两处改动:
1. 修改struts-plugin.xml文件
将Bean的name属性改为“groovy”(原为"groovyObjectFactory“),这样,在struts.xml配置文件配置struts.objectFactory常量,可以输入value属性为"groovy"(像集成Spring时的"spring"那样)
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" scope="singleton" name="groovy" class="com.googlecode.s2ss.plugin.groovy.GroovyObjectFactory" />
</struts>
2. 修改GroovyObjectFactory.getClassInstance方法为:
@Override
public Class getClassInstance(String className) throws ClassNotFoundException {
if (!className.endsWith(GROOVY_EXTENSION)) {
return super.getClassInstance(className);
} else {
Class clz = null;
try {
className = className.substring(0, className.length() - GROOVY_EXTENSION.length());
className = className.replace(".", "/");
className += GROOVY_EXTENSION;
clz = getScript(className);
} catch (Exception e) {
logger.error(e);
}
return clz;
}
}
参考:
http://www.blogjava.net/puras/archive/2007/09/03/142221.html
http://code.google.com/p/s2ss/
分享到:
相关推荐
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
赠送jar包:groovy-all-2.4.13.jar; 赠送原API文档:groovy-all-2.4.13-javadoc.jar; 赠送源代码:groovy-all-2.4.13-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.13.pom; 包含翻译后的API文档:groovy...
在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...
标题“groovy-all”暗示这是一个包含Groovy完整实现的库,通常这样的库会包括Groovy的运行时环境和所有相关的类库。版本号“2.4.7”表明这是Groovy 2.4系列的一个稳定版本,发布于2016年,该版本可能包含了自2.4.0...
赠送jar包:groovy-2.5.1.jar; 赠送原API文档:groovy-2.5.1-javadoc.jar; 赠送源代码:groovy-2.5.1-sources.jar; 赠送Maven依赖信息文件:groovy-2.5.1.pom; 包含翻译后的API文档:groovy-2.5.1-javadoc-API...
赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...
1. **groovy-all.jar**:这是一个包含了Groovy库所有模块的集合,你可以通过引入这个单一的jar文件来快速地在项目中使用Groovy。 2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,...
最近的groovy-all-2.4.12.jar包供使用,解决as编译时报错问题
Struts Scripting 1.0.1 是一个用于Apache Struts框架的扩展,它允许开发者在Struts应用程序中集成各种脚本语言,如JavaScript、Groovy、BeanShell等。这个版本发布于较早的时期,旨在提升开发效率,提供更灵活的...
在"groovy-2.3.6-installer"这个版本中,我们聚焦于Windows操作系统上的安装过程。 Groovy 2.3.6是该语言的一个稳定版本,发布于2014年,它提供了许多改进和新特性。对于开发者来说,选择特定版本可能是因为它满足...
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...
赠送jar包:groovy-2.5.1.jar; 赠送原API文档:groovy-2.5.1-javadoc.jar; 赠送源代码:groovy-2.5.1-sources.jar; 赠送Maven依赖信息文件:groovy-2.5.1.pom; 包含翻译后的API文档:groovy-2.5.1-javadoc-API...
2. **Ant with Groovy**: Groovy可以作为Ant任务的语言,使Ant脚本更加简洁和强大。 **五、Groovy的其他应用** 1. **脚本编写**: Groovy的简洁语法使其成为编写自动化脚本的理想选择,如系统管理、测试和持续集成...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。
在SDK中,"groovy-2.5.0-beta-2"目录下通常会包含以下关键组件: 1. **bin** 目录:包含可执行脚本,如`groovy`, `groovyc`, `groovysh`等,这些是Groovy的命令行工具,用于运行Groovy脚本、编译Groovy源码和启动...
标题 "org.codehaus.groovy-2.9.0.xx-201407142235-e44-RELEASE-updatesite.zip" 暗示了这是一个与Groovy编程语言相关的Eclipse插件的更新站点压缩包。这个版本号 "2.9.0" 表明这是该插件的2.9.0版,时间戳 ...
在Struts-scripting模块中,主要的目标是让开发者能够使用诸如JavaScript、Groovy或其他支持的脚本语言来编写Action和Validator,而不是传统的Java类。这一特性使得开发过程更为灵活,因为脚本语言通常提供更简洁的...