`
Michael.Jackson
  • 浏览: 14175 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts1与struts2 Action重要区别

阅读更多

struts1 Acton是单例的,且线程安全的 . 下面是struts1.2的源码:

 

1 /**    

2  * The set of Action instances that have been created and    

3  * initialized, keyed by the fully qualified Java class name of the    

4  * Action class.    

5  */   

6 protected HashMap actions = new HashMap();
 


processActionCreate这个方法里去一窥究竟吧: 
1、先获取类名 
2、根据类名去一个名为actions的map里查寻实例是否已经存在 
3、如果存在,则直接返回 
4、如果不存在,则创建一个新实例 
5、把创建好的action放到map里备用 


01 protected Action processActionCreate(HttpServletRequest request,     

02                                          HttpServletResponse response,     

03                                          ActionMapping mapping)     

04         throws IOException {     

05      

06         // Acquire the Action instance we will be using (if there is one)     

07         String className = mapping.getType();//1、先获取类名      

08         ...     

09         Action instance = null;     

10         synchronized (actions) {     

11      

12             // Return any existing Action instance of this class     

13             instance = (Action) actions.get(className);//2、根据类名去map里查寻实例是否已经存在     

14             if (instance != null) {     

15                 return (instance); //3、如果存在,则直接返回     

16             }     

17      

18             // Create and return a new Action instance     

19             //4、如果不存在,则创建一个新实例     

20             instance = (Action) RequestUtils.applicationInstance(className)     

21      

22             instance.setServlet(this.servlet);     

23             actions.put(className, instance);//5、把创建好的action放到map里     

24         }     

25         ...     

26         return (instance);     

27      

28     }

 

 

 

struts2 Acton是多例的,且线程安全的 . 下面是struts2的源码:

 

Java代码

 

<bean id="saveUserAction" class="com.test.action.user.SaveUserAction" scope="prototype">   

    <property name="service" ref="userService"></property>   

</bean>  

 

注 : A. 另外说几句 ,当struts交由spring管理的时候 ,spring的bean配置默认是单例的 ,
如果action是有状态的 ,必须显示的配置为prototype

 

 

 

B . struts2 在struts1的基础上做了改进 ,对于struts2 ,每次请求过来都会new一个新的action , 所以说struts2的action是线程安全的 , 但同时也带来一个问题,每次都new一个action ,这样action的实例太多 , 在性能方面还是存在一定的缺陷的。struts2已经在方面做了很好的优化。

C. spring作用域:prototype
‍prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。

 

 

分享到:
评论

相关推荐

    struts1和struts2的区别

    ### Struts1与Struts2的主要区别 #### 概述 Apache Struts 是一个用于构建企业级Java Web应用的开源框架。它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在...

    Struts2与Struts1区别

    Struts2 和 Struts1 是两个著名的 Java Web 开发框架,它们都出自 Apache Software Foundation,但有着显著的区别。Struts1 是早期的 MVC 框架,而 Struts2 则是在 WebWork 框架的基础上发展起来的,它吸收了 Struts...

    Struts1与Struts2本质区别

    ### Struts1与Struts2本质区别 #### 1. 在Action实现类方面的对比 - **Struts 1**:要求Action类必须继承一个抽象基类`Action`,这种设计方式意味着开发者必须按照预设的结构来编写代码,灵活性较低。这种通过抽象...

    Struts1与Struts2原理 区别详解汇总

    ### Struts1与Struts2原理及区别详解 #### Struts1原理概述 **Struts1** 是一种基于MVC架构的开源Java Web框架,它主要用于构建动态网站和应用程序。Struts1的核心组件包括ActionServlet、ActionForm以及Action...

    转:struts1与struts2的区别

    ### Struts1与Struts2的主要区别 #### 1. Action类的设计差异 - **Struts1**: 在Struts1框架中,Action类必须继承自一个抽象类`org.apache.struts.action.Action`。这种方式可能导致的问题是代码灵活性较低,尤其...

    struts2 与 struts1的区别

    ### Struts2 与 Struts1 的核心区别 #### 一、架构设计及Action实现方式 **Struts1** 在架构上要求Action类必须继承一个特定的抽象基类,这限制了开发者的灵活性,同时也意味着所有的Action都需要遵循相同的生命...

    Struts 2实战 struts2 in Action

    根据提供的文件信息,我们可以从《Struts 2实战 Struts2 in Action》这一书籍中提炼出与Struts 2框架相关的多个重要知识点。Struts 2是一个基于Java的开源Web应用框架,它继承了Struts 1的优点并进行了大量的改进和...

    Struts1和Struts2区别

    下面我们将深入探讨Struts1和Struts2的区别。 1. 设计模式: - **Struts1**:基于Front Controller模式,只有一个Servlet(ActionServlet)处理所有请求。它使用Plug-In和Dispatcher机制来实现业务逻辑和视图的...

    struts1和struts2的区别(详细)

    ### Struts1与Struts2的主要区别 #### 一、Action执行机制的不同 - **Struts1**: 在Struts1框架中,Action是基于单例模式的,这意味着所有的请求都会共享同一个Action实例。这就导致了如果在Action中保存实例变量...

    struts1和struts2区别

    Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着显著的区别。以下是关于这两个框架在关键特性上的对比: 1. **Action类**: - **Struts1**:要求Action类继承...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    ### Struts2与Struts1的主要区别 #### Struts2架构设计与实现方式 - **Struts2**在设计上采用了更加灵活的方式,每个请求都对应一个实例化的Action对象,而不是像**Struts1**那样在整个请求周期内共享同一个Action...

    Struts1和Struts2的区别和对比

    视图层的绑定方面,Struts1依赖标准JSP机制,而Struts2引入了ValueStack技术,使得taglib可以直接访问值栈中的对象,无需在视图层与对象进行一对一绑定,提高了代码的复用性。 类型转换上,Struts1使用Apache ...

    Struts1和Struts2的区别和对比.txt

    ### Struts1与Struts2的区别与对比 #### 概述 Struts1与Struts2是基于Java的两种流行的Web应用框架,它们都遵循MVC(Model-View-Controller)设计模式,用于构建结构化的Web应用程序。Struts1是早期版本,在2000...

    struts1与struts2本质区别

    ### Struts1与Struts2的本质区别 #### 一、Action实现类的对比 - **Struts1**:要求Action类必须继承一个抽象基类,这意味着开发者必须遵守框架提供的特定结构,这在一定程度上限制了灵活性。此外,由于依赖于抽象...

    Struts2和Struts1的什么区别

    在探讨Struts2与Struts1的区别时,我们需深入理解这两个框架的设计理念、架构模式以及它们在实际应用中的表现差异。以下将从多个角度详细分析这两种流行Java Web框架的不同之处。 ### 1. **Action类的区别** #### ...

    struts与struts2的区别

    Struts1的配置主要在XML文件中完成,而Struts2引入了更简洁的注解配置,可以在Action类上直接声明相关属性,降低了XML配置的复杂度。 **6. 异常处理:** Struts2的异常处理更为优雅,它可以通过拦截器来捕获并处理...

    struts1.x和struts2.x区别

    ### Struts1.x与Struts2.x的主要区别 在深入探讨Struts1.x与Struts2.x的区别之前,我们先来了解一下这两个框架的基本背景。Apache Struts是用于构建企业级Web应用程序的开源框架,它提供了MVC(模型-视图-控制器)...

    struts2 result转向到action

    ### Struts2 Result 转向到 Action 的深入解析 #### 一、基本概念与应用场景 ...同时,了解 `redirect` 和 `redirect-action` 之间的区别对于正确配置 Struts2 应用至关重要,这有助于避免不必要的错误和性能问题。

Global site tag (gtag.js) - Google Analytics