我将向您推荐这个系列文档:
-
http://www.infoq.com/articles/converting-struts-2-part1 http://www.infoq.com/articles/converting-struts-2-part1
- http://www.infoq.com/articles/migration-struts-2-part2 http://www.infoq.com/articles/migrating-struts-2-part2
第一个链接解释了该主题,第二个链接中有一个示例。我在下面写了一个来自那里的解释:
配置框架
第一个也是最重要的配置是在 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 Action的总体结构。 Struts 操作的一般形式如下所示:
公共类 MyAction 扩展了 Action {
公共 ActionForward 执行(ActionMapping 映射,
ActionForm 表单,
HttpServletRequest 请求,
HttpServletResponse 响应)
抛出异常{
// 做工作
return (mapping.findForward("成功"));
}
}
在实现 Struts 操作时,您需要注意以下事项:
- 所有操作都必须扩展 Action 基类。
- 所有操作都必须是线程安全的,因为只创建一个操作实例。
- 由于操作必须是线程安全的,因此操作处理中可能需要的所有对象都在方法签名中传递。
- 处理动作时调用的方法的名称是“execute”(Struts中有一个DispatchAction类,它可以将要执行的方法重新路由到同一动作中的另一个方法,但是初始入口点从框架进入动作仍然是“execute”方法)。
- ActionForward 结果是使用 ActionMapping 类中的方法返回的,最常见的是通过“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 http://www.martinfowler.com/articles/injection.html)。 Spring 框架普及了这种模式,然而,Struts2 的前身(WebWork)大约在同一时间开始使用该模式。