我在Struts1中有我的应用程序,我在所有操作中都使用了Dispatch操作.现在请告诉我如何转换到struts 2以及应该做哪些修改来更改我的所有操作和表单bean.
我会建议你这个系列文章:
第一个链接解释了主题,第二个链接有一个例子.我在下面写了一个解释:
配置框架
第一个也是最重要的配置是在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操作时,您需要了解以下各项:
相比之下,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)的前身大约在同一时间开始使用该模式.