`
田野君
  • 浏览: 6342 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

struts1和struts2是单例还是多例的?

 
阅读更多

今天电话面试中问到一个问题: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一起使用。

分享到:
评论

相关推荐

    Struts1与Struts2本质区别

    2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的...

    Struts中的Action 单例与多例详解

    主要介绍了 Struts中的Action 单例与多例详解的相关资料,需要的朋友可以参考下

    struts2实现多文件上传下载

    需求 1.能够对多个文件进行上传(可以选择上传文件个数,也即上传文件个数不定) 2.能够对上传路径进行配置文件指定(upload.properties),使用...多文件 上传 下载 随意文件 java Struts2 单例 配置 动态读取 李顺利

    struts框架+hibernate单例

    struts框架搭建 hibernate单例简单配制 实现简单的数据录、改、查、删

    struts2例子中的action类

    很经典的struts2开发实例,其中的action类的写法可以教你很清楚的了解具体的调用过程回给你开发带来很大的帮助

    maven3+struts2+spring+ibatis

    maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate在多表级联查询的时候执行效率不高,所以改用性能更好不过sql比较麻烦的的ibatis,本项目只有登录和插入数据,仅供参考: ...

    maven3.0+struts+spring+hibernate

    这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...

    Java求职面试宝典各大公司常考知识点

    4.11. action是单实例还是多实例,为什么? 13 4.12. dispatchAction是用什么技术实现的? 13 4.13. struts2.0的mvc模式?与struts1.0的区别? 13 4.14. struts的处理流程。 13 4.15. Struts/webwork 的工作机制,它...

    Struts2下多文件的上传与下载

    在网络上,对于Java处理文件上传和下载的技术比较多,而Struts作为一款优秀的框架也提供了非常方便的文件上传和下载,而网上的一些例程都非常的不全面,概括来: 1) 文件上传比较多,多文件上传少一点 2) 文件下载很...

    效仿struts2框架

    效仿struts2框架 一个模仿struts2 框架 实现其所有的功能,里面包含 包装设计,动态生成类,单例,工厂,策略,代理 重构ognl等模式

    struts2hibernate例子.zip

    本例主要是加深对hibernate和struts2整合的理解,为学习Sping打基础。 特点:使用hibernate的many-to-one双向关联映射,单例模式,MVC架构。

    JAVA-SSH面试题

    如果需要,Struts2 Action仍然可以访问初始的Request和Response。 但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。 d、可测性 测试struts1.2 Action的一个主要问题是...

    SpringMVC面试专题.pdf

    简单介绍下 springMVC 和 struts2 的区别有哪些? 8、SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代? 9、 @RequestMapping 注解用在类上面有什么作用? 10、怎么样把某个请求映射到特定的方法上面? ...

    面向对象初学者必须掌握的几种设计模式

    观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...

    java面试题

    答:Struts1和Struts2是两个完全不同的框架,Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts2以核心控制器FilterDispatcher为基础,包含了框架内部的控制流程和处理机制。 ...

    信息管理系统 Jsp+JavaBean+Struts+hibernate

    本系统基于Java平台,采用设计模式:MVC(模型--视图--控制),基于接口与接口实现类,工厂模式和抽象工厂模式,单例模式,充分把系统解耦,采用的技术:Jsp+JavaBean+Struts+hibernate,数据库:MySQL Struts采用Struts ...

    我的博客园

    并在SpringIoC容器中使用原型模式创建struts2框架中的每一个Action实例对象以及使用单例模式创建业务逻辑层接口实现类的实例对象。在业务逻辑层中使用SpringIoC容器中的AOP的cglib代理模式配置事务管理。 在数据库...

Global site tag (gtag.js) - Google Analytics