`

struts1 和 struts2中Action什么时候实例化

 
阅读更多
struts1 和 struts2中Action什么时候实例化

精帖1:http://blog.csdn.net/lfsf802/article/details/7277013
精帖1:http://blog.csdn.net/wmj2003/article/details/5018927

struts2.x的action是有状态的,因此的scope需要是prototype,防止并发数据异常。struts1.x的action是无状态的,因此的scope要设为singleton或默认,效率高。

struts1.x默认是单实例(singleton),就是你每次请求都是由同一个action来处理。所以struts1.x默认指定,就存在并发问题。而strust2.x默认是多实例(prototype),每个请求都会产生相应的action实例去处理,这就避免并发问题。

线程模式:

Struts1: Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。

Struts2: Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)


Action执行的控制:

Struts1:支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

Struts2:支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。



struts1的Action 是在第一次请求的时候实例化的,比如第一次请求LoginAction时会创建这个Action, 之后并没有放弃这个Action实例 而是将Action实例放在一个Map 中 当你再一次请求LoginAction的时候会先从这个Map中去找,如果找到了就直接用,没找到才创建.


struts2 的Action 是每次请求的时候都会帮你创建一个对象, 我个人认为原因在于 struts2中的Action因为要有收集数据的javaBean的功能, 所以你会想的到,它如果是单例模式的话,会有什么危险


分享到:
评论

相关推荐

    struts1和struts2的区别

    - **Struts2**: Struts2中的Action更像是工厂模式下的产品,每个Action实例都是线程安全的。Struts2提供了ActionSupport基类来简化Action的实现。Action本身可以是任何实现了特定接口的Java对象,甚至是普通的POJO。...

    struts2经典实例

    `Struts2_Action` 示例展示了如何定义和执行Struts2中的Action,这是框架的核心部分。通过这个实例,你可以学习到Action的生命周期、结果映射以及如何处理业务逻辑。 7. **Struts2 HelloWorld** `Struts2_Hello...

    struts1和struts2项目实例

    通过分析和运行这些项目实例,可以深入理解Struts1和Struts2之间的差异,以及如何将它们与Spring和Hibernate集成,从而提高自己的技能水平。不过,随着技术的发展,现在的趋势是转向更现代的框架,如Spring Boot,它...

    struts2项目实例

    总的来说,"Struts2项目实例"涵盖了Java web开发中的关键环节,从Action设计、数据库操作、视图展现到框架配置,为我们提供了一个学习和实践Struts2的好起点。通过分析和理解这个实例,开发者可以更好地掌握Struts2...

    struts2 项目实例

    在Struts2中,主要的配置文件是`struts.xml`,它定义了Action的映射、结果类型和拦截器链。`struts.xml`将Action类与URL路径关联,使得当用户访问特定URL时,Struts2框架能够正确调用对应的Action执行方法。例如,...

    基于用户登陆的struts2中action的分类实例

    本实例将深入探讨在基于用户登录场景下,如何在Struts2中对Action进行分类和设计。 首先,我们需要了解Struts2中的Action是如何工作的。一个Action类通常对应一个具体的业务操作,比如登录、注册、修改个人信息等。...

    Struts1和Struts2的区别和对比

    线程模型方面,Struts1的Action是单例模式,意味着所有请求共享同一个Action实例,因此开发者需要确保Action和其资源是线程安全的。相比之下,Struts2为每个请求创建新的Action实例,消除了线程安全问题,也简化了...

    Struts1 MVC实例

    2. Struts1的DispatcherServlet捕获请求,根据struts-config.xml中的配置找到对应的Action。 3. ActionForm对象被填充并传递给Action,Action处理业务逻辑,可能调用DAO进行数据库操作。 4. Action完成后,返回一个...

    Struts2实例 国际化 类型转换 struts标签

    在Struts2中,这通常通过资源 bundle 文件实现,例如`messages.properties`和`messages_zh_CN.properties`,分别用于存储默认语言和中文语言的文本。在Action或者JSP页面中,可以通过`<s:text>`标签来引用这些资源,...

    struts2实例工程

    在Struts2中,Controller由Action类实现,View通常由JSP页面呈现,而Model则由JavaBean或领域对象表示。 2. **Action类**:Action类是Struts2的核心,负责处理来自用户的请求。它包含业务逻辑,并通过执行特定的...

    struts1和Hibernate实例

    Struts1和Hibernate是两种非常重要的Java开发框架,它们在企业级应用开发中扮演着核心角色。Struts1主要用于控制应用程序的流程,而Hibernate则是一个强大的对象关系映射(ORM)框架,它简化了数据库操作。 **...

    Struts2实战(Struts2 In Action中文版)

    6. **国际化与本地化**:学习如何在Struts2中实现多语言支持,提供全球化用户体验。 7. **Tiles布局**:结合Tiles插件,创建复用性强、结构化的页面布局。 8. **异常处理**:理解Struts2的异常处理机制,如何...

    struts2 的一个实例

    这个简单的实例展示了Struts2的基本工作流程,但实际项目中,我们还需要考虑更多,如国际化、数据验证、拦截器链的定制、插件的使用等。Struts2提供了一整套丰富的功能,能够帮助开发者构建复杂的Web应用,同时,它...

    Struts2与Struts1区别

    - 在 Struts1 中,Action 类需要继承自一个抽象基类,这限制了其可扩展性和定制性。而 Struts2 改进了这一点,Action 类可以实现 Action 接口,也可以实现其他接口,提供了更多的灵活性。ActionSupport 类则提供了...

    STRUTS2站点,STRUTS2学习实例8

    2. **配置文件**:在Struts2中,struts.xml文件是主要的配置文件,用于定义Action类、结果类型、拦截器等。此外,还可以使用注解进行配置,提供更大的灵活性。 3. **拦截器**:Struts2的拦截器是AOP(面向切面编程...

    Struts2框架实例

    5. **OGNL(Object-Graph Navigation Language)**:OGNL是Struts2中的表达式语言,用于在Action和视图之间传递数据。例如,`${user.name}`可以在JSP中获取User对象的name属性。 6. **拦截器**:Struts2的拦截器...

    struts2实例3源码

    1. **Action和Result**:在Struts2中,Action是处理用户请求的对象,而Result则是Action执行后返回的视图。开发者可以定义自己的Action类,处理业务逻辑,并通过配置文件或注解指定对应的Result。 2. **拦截器...

Global site tag (gtag.js) - Google Analytics