从Struts1迁移到Struts2

ver*_*rve 4 struts2

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

kam*_*aci 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>
Run Code Online (Sandbox Code Playgroud)

对于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>
Run Code Online (Sandbox Code Playgroud)

解构行动

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

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

public class MyAction extends Action {public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception {// do work 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";
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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