今天电话面试中问到一个问题:struts是单例还是多例的? 想想还真没考虑过,现在就来分析下
实际上,struts1是单例的,struts2是多例的
为什么呢?
1、struts1是单例的
" Struts1 Action是单例模式并且必须是线程安全的,必须确保Action资源是线程安全的或同步的。
为了确保线程安全(thread-safe),在一个应用的生命周期中,Struts框架只会为每个Action类创建一个Action实例(与servlet是一样的)。所有的客户请求共享一个Action实例,并且所有请求线程可以同时执行它的execute()方法。
所以,每个action只有一个实例, 在action打印this也可以看到, 确实是一样的,
所以, 不要在Action里面全局的变量,只在方法内部使用局部变量, 没有意义而且不安全。
使用actionForm则不会有问题,原因也很简单:
actionForm 是通过参数形式传入action的,不存在共享变量的问题,其实每个request产生的actionForm实例也是不同的。
因此在使用struts 1.x的时候要注意线程安全性问题
Action执行的控制:
" Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
2、struts2是多例的
" Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Action执行的控制:
" Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
相关推荐
例如,在Struts2中,action必须用多例,因为action本身含有请求参数的值,即可改变的状态。而在Struts1中,action则可以用单例,因为请求参数的值是放在actionForm中,而非action中的。 五、注意事项 并不是说...
Struts1和Struts2是两个非常著名的Java Web框架,它们在设计模式、可测试性、输入处理和表现层等方面存在显著的区别。 首先,Action类的设计有所不同。在Struts1中,Action类需要继承一个抽象基类,这限制了Action...
Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着显著的区别。以下是关于这两个框架在关键特性上的对比: 1. **Action类**: - **Struts1**:要求Action类继承...
- **Struts2**: 相比之下,Struts2中的Action是多例的,每次请求都会创建一个新的Action实例,这样就避免了线程安全的问题。Struts2通过提供一个默认的基类`ActionSupport`,使得开发者可以很容易地继承这个类来创建...
Struts1和Struts2是两个著名的MVC框架,它们都是Apache Struts项目的一部分,用于构建基于Java的Web应用程序。虽然两者在核心理念上相似,但在实现方式和设计上存在显著差异,这些差异体现在多个方面。 首先,让...
Struts2 和 Struts1 是两个著名的 Java Web 开发框架,它们都出自 Apache Software Foundation,但有着显著的区别。Struts1 是早期的 MVC 框架,而 Struts2 则是在 WebWork 框架的基础上发展起来的,它吸收了 Struts...
### Struts1与Struts2的主要区别 #### 1. Action类的设计差异 - **Struts1**: 在Struts1框架中,Action类必须继承自一个抽象类`org.apache.struts.action.Action`。这种方式可能导致的问题是代码灵活性较低,尤其...
为了理解这两种模式在Struts2中的实现与适用场景,我们需先了解单例模式和多例模式的基本概念及其在Web应用中的行为特点。 单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例...
### Struts2 与 Struts1 的核心区别 #### 一、架构设计及Action实现...综上所述,Struts2相比Struts1在架构设计、线程安全性、输入处理、表单验证等方面进行了大量的改进和优化,使得其更适合现代Web应用的开发需求。
### Struts1与Struts2本质区别 #### 1. 在Action实现类方面的对比 - **Struts 1**:要求Action类必须继承一个抽象基类`Action`,这种设计方式意味着开发者必须按照预设的结构来编写代码,灵活性较低。这种通过抽象...
### Struts2与Struts1的主要区别 #### Struts2架构设计与实现方式 - **Struts2**在设计上采用了更加灵活的方式,每个请求都对应一个实例化的Action对象,而不是像**Struts1**那样在整个请求周期内共享同一个Action...
- **请求处理**:Struts1中,每个Action实例是单例的,这意味着多个用户可能共享同一个Action实例,这在并发环境下可能会引发问题。 - **验证机制**:Struts1提供了内置的验证框架,但其使用相对复杂,且定制性较差...
Struts1和Struts2是两个著名的MVC框架,它们都是Apache软件基金会的Apache Struts项目的一部分,用于构建基于Java的Web应用程序。然而,两者在设计和实现上有显著的差异。 1. **架构模式的区别** - **Struts1.x** ...
### Struts1与Struts2的关键差异分析 #### 一、概述 在Web应用开发领域,Struts框架...无论是在Action类的设计、依赖管理还是输入处理等方面,Struts2都展现出了更强的灵活性和可扩展性,为开发者提供了更好的支持。
Struts1.0和Struts2是两种不同的Java EE Web应用程序框架,虽然它们都属于Apache Struts项目,但在设计和实现上有显著的区别。Struts2是基于WebWork框架的升级版,它吸取了Struts1的优点并进行了诸多改进,提高了...
Struts1和Struts2是两个著名的Java EE Web框架,它们在设计思想、核心机制以及易用性等方面存在显著差异。 首先,Struts2并非完全从零开始的新框架,而是基于WebWork发展起来的,继承了WebWork的特性并吸收了Struts...
Struts1 和 Struts2 是两个著名的MVC框架,它们都是Apache软件基金会的产品,用于构建Java Web应用程序。这里我们将深入探讨这两个框架之间的主要差异。 1. **Action 实现方式**: - **Struts1** 强制Action类继承...
Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着不同的设计和实现。以下是对两者关键特性的详细比较: 1. **Action类**: - **Struts1**:Action类需要继承自...
### Struts2与Struts1的主要区别 #### 一、Action设计模式的差异 ...Struts2采用了更多的现代设计理念和技术,如面向切面编程(AOP)、依赖注入(DI)等,这些改进使得开发者能够更高效地构建复杂的Web应用。