Struts2的Action的生命周期是:Struts2为每个请求都重新初始化一个Action的实例。可以稍微改造一下代码来验证一下。

  • 给HelloWorldAction加上一个public无参的构造方法,在里面输出一句话。

    大家都知道,一个Java类如果没有写构造方法,那么会有一个默认的public无参的构造方法,这里只是把它明确的写出来了,因此这么做,并没有改变Action的任何功能,只是想看一下到底什么时候,Action会被初始化。示例代码如下:

public HelloWorldAction(){
System.out.println("HelloWorldAction被初始化");
}
  • 然后在execute方法上也加入一个打印Action自己这个对象实例的语句,示例代码如下:
public String execute() throws Exception {
System.out.println(this);
this.businessExecute();
return "toWelcome";
}

  注意:大家都知道在Java基础知识里面,“System.out.println(this);”这句话,在打印一个对象实例的时候,实际上是调用的这个类的toString方法,但是HelloWorldAction类没有实现toString方法,所以,会调用到Object的toString方法。Object的toString方法会打印出自己的全类名和Object的hashcode方法的返回值,这个hashcode方法返回一个数字,只要这个数字不同,则被打印的对象就绝不是同一个对象。

  • 修改做完之后,重新启动Tomcat,仔细察看后台的输出信息,你会发现启动的时候,并没有打印出来那句“HelloWorldAction被初始化”,这说明了Action的初始化并不是在Tomcat启动的时候进行的。

  接下来按照如下顺序操作:

  (1)访问http://localhost:9080/helloworld/s2impl/login.jsp,在页面上填写账号和密码,然后点击提交按钮,会跳转到欢迎页面。这个时候去察看后台的输出信息,如下:

HelloWorldAction被初始化
cn.javass.action.action.HelloWorldAction@922804
用户输入的参数为===account=test,password=111111,submitFlag=login

  (2)接下来,按F5来刷新这个欢迎页面,点击重试按钮,这样就相当于再次访问HelloWorldAction,再察看后台的输出信息,如下:

HelloWorldAction被初始化
cn.javass.action.action.HelloWorldAction@922804
用户输入的参数为===account=test,password=111111,submitFlag=login
HelloWorldAction被初始化
cn.javass.action.action.HelloWorldAction@18e8541
用户输入的参数为===account=test,password=111111,submitFlag=login

  “HelloWorldAction被初始化”这句话被打印了两次,说明HelloWorldAction对象的构造方法被调用了两次。而且两次打印的toString分别是“cn.javass.action.action.HelloWorldAction@922804”和“cn.javass.action.action.HelloWorldAction@18e8541”,这说明了为两次web请求服务的HelloWorldAction对象不是同一个。

  因此,Struts2中的Action在每一次web请求的时候都要新建一个实例。

  参考资料:http://www.iteye.com/topic/1124526

【struts2】Action的生命周期的更多相关文章

  1. Strut2 Action的生命周期

    一般而言,Action都是放在Spring容器中管理的,我会把属性设为prototype,这样,每一个请求,都会创建一个action对象. 今天碰到一个问题,当我用从一个jsp页面中输入一个属性,比如 ...

  2. struts2 Action生命周期

    Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢? 这个和struts2.0中的配置有关,我们来看struts.properties ### if spec ...

  3. 值栈ValueStack的原理与生命周期

    1.ValueStack贯穿整个 Action 的生命周期,保存在request域中,所以ValueStack和request的生命周期一样.当Struts2接受一个请求时,会迅速创建ActionCo ...

  4. action动作类的生命周期

    创建:Action动作类每次请求的时候都会创建一个实例对象 销毁:当前action动作类的请求响应完后就消失了 跟javaweb中的HttpServletRequest的生命周期是一样的,struts ...

  5. Struts2-整理笔记(四)Action生命周期、如何获取参数(3种)、集合类型参数封装

    一.Action生命周期 每次请求到来时,都会创建一个新的Action实例 Action是线程安全的,可以使用成员变量接收参数 二.获取参数的方式(3种) 1.属性驱动获得参数 每次请求Action时 ...

  6. spring in action 学习笔记四:bean的生命周期

    bean 的生命周期分为:一个是ApplicationContext的容器的bean的生命周期,另一个是BeanFactory容器的生命周期. 首先介绍一下:ApplicationContext的容器 ...

  7. IOC容器中bean的生命周期

    一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...

  8. Struts2 Action与Servlet API耦合

    单元测试在开发中是非常重要的一个环节程序员在写完代码时,相应的单元测试也应写完整,否则你的代码就是不能让人信服的Struts2将Action与Servlet的API进行解耦之后,就使得单元测试变得非常 ...

  9. Request Session生命周期及struts1 中service的编写

    现在接手的项目是一个早期的struts1框架的项目.同时也是刚开始接触web 以及struts1架构. 在处理多个action时,有一个tab子页面需要每5s自动刷新一次. 然后在测试过程中发现,点击 ...

随机推荐

  1. 什么是哈希码(HashCode)

    什么是哈希码(HashCode) 在Java中,哈希码代表对象的特征. 例如对象 String str1 = “aa”, str1.hashCode= 3104 String str2 = “bb”, ...

  2. IntelliJ - idea15.0.2 破解方法

    由于idea 15版本更换了注册方式,只能通过联网激活,所以现在不能通过简单的通用注册码进行离线注册了, 虽然可以继续用14版本,但是有新版本却无法尝试让强迫症也是异常抓狂. 通过度娘我找到了一个破解 ...

  3. Mybatis 自定义SqlSessionFactoryBean扫描通配符typeAliasesPackage

    typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则,采用重写的方式解决 package com.xxxx.xxx.util.comm ...

  4. C#.NET常见问题(FAQ)-如何声明list的多维数组

    可以用下面的方法来声明多维list数组,但是不推荐使用   //对于一维数组:List<数据类型> 变量 = new List<数据类型>(); List<int> ...

  5. SpringBoot开发详解(六)-- 异常统一管理以及AOP的使用

    https://blog.csdn.net/qq_31001665/article/details/71357825

  6. 【高德地图Android SDK】视频教学

    前两天参加了高德在北航举办的公开课,感觉非常不错.完成老师布置的作业之后,还顺利地拿到了高德开发者认证证书!! 现在来跟大家分享一下,如何快速学习[高德地图Android SDK]的开发.一天包会!连 ...

  7. 微信小程序 - 上传图片(组件)

    更新日期: 2019/3/14:首次发布,更新了2018/12/30的UI以及反馈信息获取方式,具体请下载:demo. 2019/3/20:感谢544429676@qq.com指出的现存bug,已修复 ...

  8. strus2 struts.xml详解

    <struts> <!-- 配置一个包:package --> <package name="demo1" extends="struts- ...

  9. 代码实现分析mpeg-2文件

    1.概述 把上一篇文章中讲到的mpeg-2文件结构分析用代码实现,结合mpeg-2文件分析.才easy看懂. 2.代码 /* *本程序主要分析MPEG-2文件 *作者:缪国凯(MK) *8214860 ...

  10. Android 使用DDMS查看内存使用情况