Struts1 和 Struts2 对比

参考链接:http://blog.csdn.net/john2522/article/details/7436307

Struts1 Action 官方注释

Action.java 源代码中的注释如下:

An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request. The controller (RequestProcessor) will select an appropriate Action for each request, create an instance (if necessary), and call the execute method.

Actions must be programmed in a thread-safe manner, because the controller will share the same instance for multiple simultaneous requests. This means you should design with the following items in mind:

  • Instance and static variables MUST NOT be used to store information related to the state of a particular request. They MAY be used to share global resources across requests for the same action.
  • Access to other resources (JavaBeans, session variables, etc.) MUST be synchronized if those resources require protection. (Generally, however, resource classes should be designed to provide their own protection where necessary.

When an Action instance is first created, the controller will call setServlet with a non-null argument to identify the servlet instance to which this Action is attached. When the servlet is to be shut down (or restarted), the setServlet method will be called with a null argument, which can be used to clean up any allocated resources in use by this Action.


中文翻译如下:

Action是服务器接收到的HTTP request与需要执行的业务逻辑间的枢纽。控制器(RequestProcessor)会给每个request选择合适的Action,创建新的实例(必要的话),并执行其中的execute方法。

Actions必须是线程安全的,因为控制器也会在多个并发请求下共享同一个实例。这意味着你需要牢记以下几点:

  • 实例和静态变量不能用于存储关于特定请求的信息。它们可以用来共享同一Action的多个requests的全局数据。
  • 访问其它资源(JavaBean、session等)必须同步。

当Action第一次被创建时,控制器会调用setServlet方法,并通过一个非空参数标识这个Action所连接的Servlet。当这个Servlet关闭(或重启)时,将会调用setServlet方法,并传递一个null值,可以清理所有被这个Action所占用的资源。


Struts2 Action 官方注释

源代码的英文注释如下:

All actions may implement this interface, which exposes the execute() method.

However, as of XWork 1.1, this is not required and is only here to assist users. You are free to create POJOs that honor the same contract defined by this interface without actually implementing the interface.


中文翻译如下:

所有的Action可能实现这个接口,暴露了execute()方法。

对于XWork 1.1,这个接口并不是必须的,只是用来辅助使用者。在POJO中,你可以自由定义,并不需要实现该接口。


Struts1和2的Action对比

Struts1和2的区别.png-154.7kB

Action模型

数据如何从Action中,传入JSP中?

Struts1

需要显示的数据(Bean),要在Action中存到Request或Session中。Struts1必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。

Struts2

表单数据包含在Action中,通过Getter和Setter获取,无需继承任何类型或实现任何接口。


  1. 参数:Struts1的execute方法,是具有参数的;Struts2没有。
  2. 返回类型:Struts1的返回类型是ActionForward;Struts2是String。
  3. 调用Action:Struts1只能通过execute方法调用;Struts2任何声明为public String methodName() 方法,都能通过配置来调用Action。

Struts1的execute方法:

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // TODO Auto-generated method stub
        return super.execute(mapping, form, request, response);
    }

Struts2的execute方法:

    @Override
    public String execute() {
        return LOGIN;
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

web.xml文件的作用及基本配置

Java的web工程中的web.xml文件有什么作用呢?它是每个web工程都必须的吗?

1442
来自专栏同步博客

浅谈PHP异常处理

  PHP中的异常的独特性,即PHP中的异常不同于主流语言C++、java中的异常。在Java中,异常是唯一的错误报告方式,而在PHP中却不是这样,而是把所有不...

1253
来自专栏游戏杂谈

Lua调用C++时打印堆栈信息

公司的手游项目,使用的是基于cocos2d-x绑lua的解决方案(参数quick-x的绑定),虽然使用了lua进行开发,更新很爽了,但是崩溃依然较为严重,从后台...

1602
来自专栏流柯技术学院

TestNG官方文档中文版(4)-运行TestNG

4 - 运行TestNG TestNG可以以不同的方式调用:     * Command line     * ant     * Eclips...

1142
来自专栏拂晓风起

java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)

1932
来自专栏黑泽君的专栏

day57_BOS项目_09

方式一:   第一步:获得activiti-eclipse-plugin.zip文件   第二步:将zip文件解压到eclipse的dropins目录中

812
来自专栏Linyb极客之路

文件监听之WatchService浅析

用watchservice修改配置文件方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的。例如 Spring mvc 以 war 包的...

1222
来自专栏木木玲

Netty 源码解析 ——— Netty 优雅关闭流程

3663
来自专栏一枝花算不算浪漫

TestNG的简单使用

1342
来自专栏java系列博客

maven 构建第一个HelloWorld

1612

扫码关注云+社区