`
fslingmo
  • 浏览: 25807 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

struts1.x和2.x的线程安全

阅读更多

线程安全是每个多线程的程序都要考虑的问题,struts也不例外,如果处理不当,会出现问题,而且这种问题很难被排查出来,因此,需要在设计的时候就留意线程安全问题。

 

1.struts1.x

 

1.1Action是线程不安全的

 

struts1.x的Action在生命周期上与Servlet类似。Servlet由Tomcat容器并维护,而Action由Struts的ActionServlet产生并维护。每个Action都只有一个实例,在加载Struts时产生,在卸载Struts时销毁。

Struts用同一个Action的execute()方法处理所有特定URI的请求。例如用HelloAction来处理/hello.do,用PersonAction来处理/person.do。这些请求共同使用一个Action以及Action类属性等,因此Action与Servlet一样,都不是线程安全的。

由于Action 是线程不安全的,因此要避免写Action的属性。最好的办法是把Action属性置为final,禁止对其进行写操作,彻底避免线程不安全问题。

 

提示:Action中的属性最好标记为final,禁止对其进行写操作,避免线程不安全问题。

 

1.2 Form Bean是线程安全的

 

而Struts 1.x的Form Bean代表JSP表单,每次请求都会产生一个新的Form Bean,不会出现多个线程共有一个Form Bean的情况。因此Form Bean是线程安全的,Form Bean中可任意地定义可读写属性。

Struts 1.x里Action的单一实例特性节省了服务器的资源开支,算是一个优点,但是由此带来的线程不安全却为开发者带来了一些麻烦。到Struts 2.x中,Action中已经被设计wield线程安全的了,每个请求都会产生一个Action实例,请求处理完毕,Action实例即销毁。

 

2.Struts 2.x

 

线程安全

 

Struts1中所有的Action都只有一个实例,该Action实例会被反复使用。而Struts中每个Action都会有多个实例,处理一次请求生成一个实例,这些实例彼此独立,处理完毕即销毁。因此Struts 1的Action不是线程安全的,而Struts 2的Action是线程安全的,由于Action中没有其他特殊资源,使用完毕后被直接抛弃,而不会造成资源浪费。

分享到:
评论

相关推荐

    从J2SE到J2EE知识点介绍

    1. struts2的拦截器定义以及使用 153 2. struts标签 160 3. Struts 2 标签库说明及使用 160 4. set 描述 169 5. text 描述 170 6. property 描述 170 7. Struts的异常处理 171 8. Struts的上传与下载 178 五、 ...

    Java 面试宝典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...... 7 2、Java 有没有 goto? .......................................................................................................

    J2EE学习笔记(J2ee初学者必备手册)

    .......................1 Java/JavaEE.....1 2008年11月1日...............1 Unix 学习笔记7 一、Unix前言............7 二、Unix基础知识....7 三、Unix常用命令....8 四、 文件系统权限.21 五、软硬连接的区别......

    Java/JavaEE 学习笔记

    struts1.x...283 一、开发struts1应用的基本步骤...283 二、Struts的工作流程......................284 三、struts-config.xml配置文件中主要的元素和属性.........286 四、RequestProccessor........................

    java基础题 很全面

    5. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 31 6. 写一段Jdbc连Oracle的程序. 32 7. 编码实现内部类 34 8. 输入n...

    JAVA面试题最全集

    1.Web安全性的考虑(表单验证、浏览器Basic方式的验证,应用程序的安全性,SSL,代码考虑) 2.简单介绍您所了解的MVC。 3.简单介绍所了解的XML。 4.文档和编码规范 5.Java中的分页、效率考虑。 6.简单介绍您所...

    超级有影响力霸气的Java面试题大全文档

    此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...

    java 面试题 总结

    此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...

    整理后java开发全套达内学习笔记(含练习)

    short 16bit, -2^15~2^15-1 (2^15=32768) int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字) long 64bit, -2^63~2^63-1 (900亿亿,20位有效数字) float 32bit, 9位有效数字,含小数(四舍五入)(小数点算...

    千方百计笔试题大全

    125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM中的数据? 31 127、在JSP如何包含一个静态文件? 32 128、在JSP中如何使用注释? 32 129、在JSP中如何执行浏览重定向? 32 130、如何防止在JSP或SERVLET...

    最新Java面试宝典pdf版

    8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...

    Java面试笔试资料大全

    8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...

    Java面试宝典2012版

    8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11...

    Java面试宝典2012新版

    8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...

    java面试宝典2012

    8、说说struts1与struts2的区别。 132 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 133 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 133 11、...

    JAVA面试宝典2010

    8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...

Global site tag (gtag.js) - Google Analytics