`

struts2生命周期

阅读更多
有很多人问Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢?

这个和struts2.0中的配置有关,我们来看struts.properties

### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
###       Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
struts.objectFactory = spring
如果我们使用的是com.opensymphony.xwork2.ObjectFactory ,老实说,我也没有研究过,xwork有一套像spring一样的IOC机制,小巧而简洁,有兴趣的朋友可以去研究下。struts2.0中的 Action默认就是使用这种工厂模式的,我们来看

    <action name="index" class="hdu.management.action.IndexAction">
        <result name="success">/input.jsp</result>
        <result name="testFTL" type="freemarker">/ftl/test.jsp</result>
    </action>
class属性必须写类的全名,通过这种方式配置后,action对象的生命周期到底怎么样,你就认命吧,反正你就记住xwork有一个对象池,它会自己分配的,应对每次客户端的请求,它都会创建一个新的实例,至于这个实例何时销毁,由XWORK来控制。


接下来,我们用spring来控制action的生命周期,关于action和spring的集成,我这里就不累述了。

    <action name="index" class="index">
        <result name="success">/input.jsp</result>
        <result name="testFTL" type="freemarker">/ftl/test.jsp</result>
    </action>
这里的class是spring配置文件中bean的id

我们来看看spring文档中关于生命周期这个章节


Table 3.4. Bean scopes


Scope Description
singleton
Scopes a single bean definition to a single object instance per Spring IoC container.

prototype
Scopes a single bean definition to any number of object instances.

request
Scopes a single bean definition to the lifecycle of a single HTTP request; that is each and every HTTP request will have its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.

session
Scopes a single bean definition to the lifecycle of a HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.

global session
Scopes a single bean definition to the lifecycle of a global HTTP Session. Typically only valid when used in a portlet context. Only valid in the context of a web-aware Spring ApplicationContext.


是不是一目了然?

当然我们要使用request、session等,必须在web.xml中配置

<web-app>
...
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
...
</web-app>
准备好这些之后,我们来对request这个scope进行下测试

<beans>
  
    <bean id="index" class="hdu.management.action.IndexAction"
        scope="request"
        destroy-method="destroy"
        init-method="init"/>
  
</beans>
配置好后,发现每次刷新页面,都会建立一个新的实例,运行完后就销毁这个实例,这个效果和默认的是一样的,只是我们这个运行完后会立即销毁,而默认的不是立即销毁,由xwork优化销毁

如果设置为session,其实相当于ejb中的状态bean,对于每个session来说用的都是同一个实例,当然,一旦把浏览器关闭,或者超时,对象就会销亡。
分享到:
评论

相关推荐

    源码基于JSP的内容管理系统(hibernate3+struts2+spring2).rar

    Spring2作为一个轻量级的容器框架,负责管理对象的生命周期和依赖关系。它采用了IoC(控制反转)和AOP(面向切面编程)的理念,使得各个模块之间的耦合度降低,提高了系统的可重用性和可维护性。整个系统包括了用户...

    Struts in Action中文版(PDF)

    我们假定阅读此书的读者熟知 Java 语法,应用开发生命周期,以及面向对象设计概念。 关于关系数据库的基础,加上JDBC技术,我们建议掌握,但不是必需。 那么我们的注意力将着眼于Web应用和Struts框架。 技术之间...

    项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5)130223.rar

    Spring作为IoC容器,负责管理对象的生命周期和依赖关系,降低了代码的耦合度。Hibernate作为ORM框架,负责将对象与数据库表进行映射,简化了数据库操作。其次,该系统使用Jsp作为前端展示层,提供了丰富的用户界面和...

    Struts2中实现web应用的初始化实例详解

    在JavsSE中,main方法为应用提供了入口,而在Android中,我们可以使用Application对于整个应用的生命周期进行管理,那么在基于Struts2的JavaEE应用中,如何实现类似的功能呢。 其中一种比较好的方式,是通过实现...

    OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar

    Spring2作为IoC容器,负责管理对象的生命周期和依赖关系,降低了系统各模块之间的耦合度,提高了系统的可维护性。DWR作为Ajax框架,负责实现前后端的数据交互,提供了丰富的API,使得开发者能够轻松地实现各种复杂的...

    低清版 大型门户网站是这样炼成的.pdf

    6.2.4 bean的作用域与生命周期 374 6.2.5 基于xml方式的bean装配 376 6.2.6 基于annotation方式的bean装配 381 6.2.7 基于xml方式的aop实现 386 6.2.8 基于annotation方式的aop实现 391 6.3 spring 2.5事务管理...

    车辆管理系统(struts+hibernate+spring+oracle).rar

    Spring作为IoC容器,负责管理对象的生命周期和依赖关系,降低了各个模块之间的耦合度。Oracle作为关系型数据库,存储了车辆管理系统所需的各种数据。这个车辆管理系统实现了车辆信息的录入、查询、修改和删除等功能...

    [计算机毕业设计]基于SSM的固定资产管理系统(源码+部署说明+演示视频).zip

    这是一个基于SSM框架开发的固定资产管理系统,该系统可以实现对公司固定资产的全生命周期管理,包括资产采购、领用、报废、维修等操作。 系统采用B/S架构,用户可以通过浏览器访问网站进行操作,也可以使用移动端...

    博客系统(struts+hibernate+spring)130225.rar

    Spring 是一个轻量级的依赖注入容器,它提供了一种灵活的方式来管理对象的生命周期和依赖关系。通过结合这三个框架,这个博客系统实现了一个完整的博客平台的功能。它包括了用户注册、登录、发布文章、评论、分类...

    Struts视图组件详解附源代码

    各种ActionForm用法,生命周期,所有标签的使用

    Struts处方:Hibernate与Struts

    例如,对于生命周期为一个用户会话的数据来说,Httpsession是非常合适的。与之对应的,跨越多个session,或者多个用户的持久化则需要一个数据库来保持。数据的数量是另一个非常重要的衡量标准。例如

    图书管理系统(struts+hibernate+spring+ext).rar

    Spring作为IoC容器,负责管理对象的生命周期和依赖关系,降低了系统各模块之间的耦合度。Ext作为前端框架,提供了丰富的界面组件和交互效果,使得系统界面美观且易于使用。这个资料包包含了系统的全部源代码,包括...

    车辆管理系统(struts+hibernate+spring+oracle)130225.rar

    Spring作为IoC容器,负责管理对象的生命周期和依赖关系,使得系统的各个模块能够灵活地组合和替换。该系统的主要功能包括:车辆信息的增删改查,包括车辆的类型、车牌号、颜色、购买日期等;用户信息的增删改查,...

    structs程序设计从入门到精通word文档

    5.1 ActionForm的生命周期 10 5.2 ActionForm的作用 11 5.3 ActionForm的实践 11 5.4 组装ActionForm 11 5.5 Struts的动态表单的应用 11 第2篇 struts的执行 12 第6章 理解ActionForward 12 6.1 ActionForward 的...

    达内java培训目录

    Spring技术 Spring Ioc基础、Ioc注入技巧、对象高级装配(自动装配、模板装配、组件扫描特性、FactoryBean、对象生命周期)、Spring AOP原理、AspectJ、Spring JDBC支持、Spring事务及安全管理;Spring整合Hibernate...

    SSH框架整合开发项目详情步骤

    集成框架 ...Struts作为系统的整体基础架构,负责MVC的分离,Hibernate框架对持久层提供支持,而Spring则贯穿整个生命周期,管理Struts和Hibernate。这种框架组合简化了开发过程,提高了开发效率。

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    3.7.1 application的生命周期 3.7.2 application中数据的操作 3.7.3 Web应用初始化参数的配置 3.7.4 application对象应用示例 3.8 其他内置对象的应用 3.8.1 应答与请求的page对象 3.8.2 页面上下文的page Context...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    《JavaServer Faces 2.0完全参考手册》对所有jsf功能都进行了解释,包括请求处理生命周期、托管bean、页面导航、组件开发、ajax、验证器、国际化和安全。贯穿全书的专家组意见提供了关于jsf设计的内部信息。 推荐...

Global site tag (gtag.js) - Google Analytics