从Struts1迁移到Struts2

时间:2011-10-19 06:23:01

标签: struts2

我在Struts1中有我的应用程序,我在所有操作中都使用了Dispatch操作。现在请告诉我如何转换到struts 2以及应该做哪些修改来改变我的所有动作和表单bean。

3 个答案:

答案 0 :(得分:6)

我会建议你这个系列文章:

第一个链接解释了主题,第二个链接有一个例子。我在下面写了一个解释:

配置框架

第一个也是最重要的配置是在servlet容器web.xml文件中启用Web应用程序框架的配置。

Struts的每个人都应该熟悉的配置是:

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

对于Struts2,几乎没有变化。最重要的是调度程序已从servlet更改为servlet过滤器。配置和servlet一样简单,如下所示:

<filter>
<filter-name>webwork</filter-name>
<filter-class>
    org.apache.struts.action2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

解构行动

在请求演练中,我们从高层谈到了Struts和Struts2之间的一些区别。让我们现在更深入一步,看看每个框架中行为结构之间的差异。

让我们首先回顾一下Struts动作的一般结构。 Struts动作的一般形式如下所示:

公共类MyAction扩展Action {     public ActionForward execute(ActionMapping mapping,                                  ActionForm表格,                                  HttpServletRequest请求,                                  HttpServletResponse响应)             抛出异常{         //做的工作         return(mapping.findForward(“success”));     } }

实施Struts操作时,您需要注意以下事项:

  • 所有操作都必须扩展Action基类。
  • 所有操作都必须是线程安全的,因为只创建了一个操作实例。
  • 由于操作必须是线程安全的,因此处理操作时可能需要的所有对象都将在方法签名中传递。
  • 为处理操作而调用的方法的名称是“execute”(Struts中有一个DispatchAction类,它可以将要执行的方法重新路由到同一操作中的另一个方法,但是从框架到动作的初始入口点仍然是“执行”方法)。
  • 使用ActionMapping类中的方法返回ActionForward结果,最常见的方法是通过“findForward”方法调用。

相比之下,Struts2操作提供了更简单的实现。这是它的样子:

public class MyAction {
   public String execute() throws Exception {
        // do the work
        return "success";
   }
}

您可能已经注意到的第一件事是该操作不会扩展任何类或接口。事实上,它比这更进一步。按照惯例,在处理动作时调用的方法是“执行”方法 - 但它不一定是。可以通过配置调用方法签名public String methodName()之后的任何方法。

最后,也许与原始Struts实现最具革命性的区别在于,在处理动作时调用的方法(“execute”方法)没有参数。那么如何访问需要使用的对象?答案在于“控制反转”或“依赖注入”模式(更多信息,Martin Fowler在http://www.martinfowler.com/articles/injection.html上有一篇内容丰富的文章)。 Spring框架已经普及了这种模式,然而,Struts2(WebWork)的前身大约在同一时间开始使用该模式。

答案 1 :(得分:0)

可能使用dynamic method invocation模糊地模仿方法名称中的旧DispatchAction - 样式“传递”功能(或者你可以编写一个使用参数的拦截器做同样的事情。)

Struts 2本身没有“表单bean”,尽管你可以实现ModelDrivensome docs)并且 sort -of就像表单bean一样工作。

所有JSP都需要重写,但前提是您使用的是Struts 1标记。如果你只使用了JSTL标签,可能不需要,它依赖。

Ischin提供的链接是开始获取更多详细信息的好地方。

答案 2 :(得分:0)

  • 对于Struts 2.x:将调度程序操作筛选器设为*.action
  • 对于struts 1.x:将操作过滤器设为*.do .