`
rsljdkt
  • 浏览: 454384 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Groovy学习笔记 Struts2集成--Groovy类作为Action

阅读更多

一点说明:
    由于最近在学习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/

0
0
分享到:
评论

相关推荐

    groovy-3.0.9-API文档-中文版.zip

    赠送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...

    groovy-3.0.9-API文档-中英对照版.zip

    赠送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...

    groovy-all-2.4.13-API文档-中文版.zip

    赠送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学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    groovy-all

    标题“groovy-all”暗示这是一个包含Groovy完整实现的库,通常这样的库会包括Groovy的运行时环境和所有相关的类库。版本号“2.4.7”表明这是Groovy 2.4系列的一个稳定版本,发布于2016年,该版本可能包含了自2.4.0...

    groovy-2.5.1-API文档-中英对照版.zip

    赠送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...

    groovy-all-2.4.5-API文档-中文版.zip

    赠送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...

    apache-groovy-sdk-4.0.1下载

    1. **groovy-all.jar**:这是一个包含了Groovy库所有模块的集合,你可以通过引入这个单一的jar文件来快速地在项目中使用Groovy。 2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,...

    groovy-all-2.4.12.jar

    最近的groovy-all-2.4.12.jar包供使用,解决as编译时报错问题

    struts-scripting-1.0.1

    Struts Scripting 1.0.1 是一个用于Apache Struts框架的扩展,它允许开发者在Struts应用程序中集成各种脚本语言,如JavaScript、Groovy、BeanShell等。这个版本发布于较早的时期,旨在提升开发效率,提供更灵活的...

    groovy-2.3.6-installer

    在"groovy-2.3.6-installer"这个版本中,我们聚焦于Windows操作系统上的安装过程。 Groovy 2.3.6是该语言的一个稳定版本,发布于2014年,它提供了许多改进和新特性。对于开发者来说,选择特定版本可能是因为它满足...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    groovy-all-2.4.5-API文档-中英对照版.zip

    赠送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...

    groovy-2.5.1-API文档-中文版.zip

    赠送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...

    Groovy 学习笔记

    2. **Ant with Groovy**: Groovy可以作为Ant任务的语言,使Ant脚本更加简洁和强大。 **五、Groovy的其他应用** 1. **脚本编写**: Groovy的简洁语法使其成为编写自动化脚本的理想选择,如系统管理、测试和持续集成...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    apache-groovy-sdk-2.5.0-beta-2.zip

    在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

    标题 "org.codehaus.groovy-2.9.0.xx-201407142235-e44-RELEASE-updatesite.zip" 暗示了这是一个与Groovy编程语言相关的Eclipse插件的更新站点压缩包。这个版本号 "2.9.0" 表明这是该插件的2.9.0版,时间戳 ...

    struts-scripting-1.0.1-src

    在Struts-scripting模块中,主要的目标是让开发者能够使用诸如JavaScript、Groovy或其他支持的脚本语言来编写Action和Validator,而不是传统的Java类。这一特性使得开发过程更为灵活,因为脚本语言通常提供更简洁的...

Global site tag (gtag.js) - Google Analytics