- 浏览: 1560424 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
背景:今天开发时使用同事研究的分页框架时出现些问题,项目使用的是Struts2和Spring,前台莫名其妙的向后台传了数据,通过ServletActionContext获得的request中调用getAttribute("")方法(后来证明要使用getParameter("")方法,但是getAttibute()能获得值也是很奇怪的了,后来发现,getAttribute()获得的实际上就是当前对象相应属性的值,应该是和页面可以获得action类里面属性值是一个道理吧)竟然也得到了值,因为之前理解struts2的线程安全是每访问一次就创建一个action实例。但是跟同事测试(在类中放一个static int值,在构造函数中进行加加,然后再方法中打印,结果不变),却发现不是创建新实例,他很得意,我在缺乏对之前的这种线程安全的深入理解下,也懵了,认为不是创建新实例,而是新线程。后来再网上查了,还是新建新实例,不解,找到了这篇文章。恍然大悟,原来是Spring在作祟,Spring限制了struts2新建实例。哎,没坚持住自己的理解,还是不够深入啊,好好看看这篇文章吧
在最近使用struts2的时候,都会看到别人写的action中会加上一个scope("prototype")
这很是奇怪。为什么要加这个。。
在struts1中并不会加这个。。而且对于struts1中的action都是单例的。虽然听说Singleton是个反模式,听说有性能问题。但在使用struts1的时候没有去深究,因为大家都这么用,用得很自然。
在查询资料的时候又看到了很多没有加上scope的问题
http://blog.csdn.net/foamflower/archive/2009/07/08/4329989.aspx
http://elf8848.iteye.com/blog/356746
这些都是因为没有加上scope,导致上一次的变量值影响了下一次的请求。
还有如下问题:也让我想不通。
那么线程的问题到底体现在哪儿呢?
在查了些资料后。。明白了些!
http://hi.baidu.com/platon/blog/item/64a20ff3f96e7fce0b46e031.html
这文章中讲了最基本的servlet的多线程问题。
其实servlet本身就是个多线程环境下的单例类。web容器就是这样来处理servlet的。
通过这文章知道,为什么struts1中并没有考虑到线程问题,因为所有的代码都是写在execute的方法中,所有变量都是定义在里面,所以没有线程安全问题。
而现在的struts2就不一样了。struts2的action中就像一个POJO一样,定义了很多的类变量。这就有线程安全问题了。。此时,就使用scope=prototype来指定是个原型模式,而不是单例,这样就解决了线程安全问题。每个线程都是一个新的实例。。
http://hi.baidu.com/niujunkai/blog/item/021964adc130660a4a36d6ab.html
这文章也说明了问题的关键之处。
还有此文
http://www.iteye.com/topic/225749
这很是奇怪。为什么要加这个。。
在struts1中并不会加这个。。而且对于struts1中的action都是单例的。虽然听说Singleton是个反模式,听说有性能问题。但在使用struts1的时候没有去深究,因为大家都这么用,用得很自然。
在查询资料的时候又看到了很多没有加上scope的问题
http://blog.csdn.net/foamflower/archive/2009/07/08/4329989.aspx
http://elf8848.iteye.com/blog/356746
这些都是因为没有加上scope,导致上一次的变量值影响了下一次的请求。
还有如下问题:也让我想不通。
引用
《strut2权威指南》中有这么一段:
线程模式方面的对比:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题 。
由于对设计模式不太了解,做了这么之年Struts,一直不知道struts1是单例模式,不知这一点是从哪体现出来的?
而在开发过程中要怎样注意“线程安全或同步”?struts2从哪体现的“没有线程安全问题”?
线程模式方面的对比:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题 。
由于对设计模式不太了解,做了这么之年Struts,一直不知道struts1是单例模式,不知这一点是从哪体现出来的?
而在开发过程中要怎样注意“线程安全或同步”?struts2从哪体现的“没有线程安全问题”?
那么线程的问题到底体现在哪儿呢?
在查了些资料后。。明白了些!
http://hi.baidu.com/platon/blog/item/64a20ff3f96e7fce0b46e031.html
这文章中讲了最基本的servlet的多线程问题。
其实servlet本身就是个多线程环境下的单例类。web容器就是这样来处理servlet的。
通过这文章知道,为什么struts1中并没有考虑到线程问题,因为所有的代码都是写在execute的方法中,所有变量都是定义在里面,所以没有线程安全问题。
而现在的struts2就不一样了。struts2的action中就像一个POJO一样,定义了很多的类变量。这就有线程安全问题了。。此时,就使用scope=prototype来指定是个原型模式,而不是单例,这样就解决了线程安全问题。每个线程都是一个新的实例。。
http://hi.baidu.com/niujunkai/blog/item/021964adc130660a4a36d6ab.html
这文章也说明了问题的关键之处。
引用
但是,线程同步是不得以的方法,是比较复杂的,而且会带来性能的损失。等效的代码中,不需要同步在编写容易度和性能上会更好些。
我这里强调的是什么代码是始终为线程安全的、是不需要同步的。如下:
1)常量始终是线程安全的,因为只存在读操作。
2)对构造器的访问(new 操作)是线程安全的,因为每次都新建一个实例,不会访问共享的资源。
3)最重要的是:局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量。
struts user guide里有:
Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.
译:只使用用局部变量。--编写线程安全的代码最重要的原则就是,在Action类中只使用局部变量,不使用实例变量。
我这里强调的是什么代码是始终为线程安全的、是不需要同步的。如下:
1)常量始终是线程安全的,因为只存在读操作。
2)对构造器的访问(new 操作)是线程安全的,因为每次都新建一个实例,不会访问共享的资源。
3)最重要的是:局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量。
struts user guide里有:
Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.
译:只使用用局部变量。--编写线程安全的代码最重要的原则就是,在Action类中只使用局部变量,不使用实例变量。
还有此文
http://www.iteye.com/topic/225749
发表评论
-
Struts2与Velocity整合
2014-02-19 17:13 2292转自:http://yjhexy.iteye.com/ ... -
Velocity简介和Velocity与Jsp、Freemarker的对比(java常用的三种表现层技术)
2014-02-19 17:09 1408Velocity 是一个基于java ... -
学习Struts2 jQuery Plugin 3.0(转)(此外还有struts-jquery-grid-tags, showcase等)
2014-01-14 20:04 1327from:http://blog.csdn.net/ld_f ... -
KindEditor上传图片问题
2013-03-19 15:24 3351转自:http://www.cnblogs.com/jav ... -
使用SVN检出Struts Spring Hibernate源码
2013-02-05 16:50 1321Spring Spring源码是由springframewo ... -
Servlet与Struts action线程安全问题分析
2012-08-23 10:22 1146Servlet/JSP技术和ASP、PHP等相比,由于其多线程 ... -
Struts2上传文件过大的反馈处理
2012-08-23 09:42 2357问题描述:前段时间在struts2下做文件上传,当上传大文件时 ... -
Struts2的addActionError() 与addFieldError ()
2012-08-23 09:41 1065addActionError() 与addFieldError ... -
struts2中<s:property value="xx"/>的工作原理
2012-08-20 10:18 1679使用struts2标签的jsp页面中<s:propert ... -
struts2下利用json进行文件上传和下载遇到的一些问题(暂时未明白)
2012-07-16 16:52 1280上传文件时:利用jquery的ajaxfileupload异步 ... -
struts2文件下载(使用struts2配置方式和单纯response方式)
2012-07-16 16:43 1842若是使用类似Servlet方式下载,可以通过ServletAc ... -
struts2文件上传(单个文件和多个文件)
2012-07-16 16:38 19291. 文件上传的原理: 表单元素的encty ... -
探究Struts2运行机制:StrutsPrepareAndExecuteFilter 源码剖析 (转)
2012-07-13 15:22 1180作者:niumd blog:http://ari.i ... -
Struts2的StrutsPrepareAndExecutefilter与FilterDispatcher
2012-07-13 15:18 947FilterDispatcher是早期struts2的过滤器, ... -
OGNL遍历list和map以及访问四个范围的属性值
2012-07-11 17:23 2291转自:http://blog.csdn.net/a9529 ... -
struts2的result为chain的跳转问题(参数设置)
2012-07-09 14:59 2593本文章非原创,本文章抄录于http://blog.sina.c ... -
struts2拦截器(转)
2012-07-01 13:52 1175转自:http://www.blogjava.ne ... -
struts2工作原理(转)
2012-07-01 13:45 1236读者如果曾经学习 过S ... -
Struts2返回JSON数据的具体应用范例(转)
2012-06-29 09:20 1369早在我刚学Struts2之初 ... -
从源代码角度看Struts2返回JSON数据的原理(转)
2012-06-28 23:30 2030前面一篇文章其实只是介绍了如何在Struts2中返回JSON数 ...
相关推荐
servlet与Struts action线程安全问题分析
servlet与Struts action线程安全问题分析 <br>===================================================== Servlet的线程安全问题只有在大量的并发访问时才会显现出来,并且很难发现,因此在编写Servlet程序时要...
Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...
Struts2深入理解
struts1,struts2,webwork,线程安全问题,easy518网 http://www.easy518.com/
struts2学习测试代码,struts2学习测试代码2struts2学习测试代码,struts2学习测试代码
作为struts2的初学者,有时候理解struts框架的原理,网上看图会一头雾水,所以要是能自己体会实现struts框架的整个过程,对理解struts思路会更加清晰一些,这个源码就是自己实现的过程,代码有详细注释
2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的...
4.2.4版本的Struts2单元测试jar包,测试可用。Struts2 jar
Struts2 Spring 框架整合 单元测试 Action和Service http://blog.csdn.net/fansunion/
初学者struts2测试案例,对于刚接触struts2的同学会有帮助
struts2学习测struts2学习测试代码试代码
鬼哥struts2测试工具.exe
struts线程安全,里面讲述了struts中的一些关于线程的安全方面的介绍。
详细说明了 struts2的一些安全缺陷,可以让开发者,在学习和开发时,避免安全的漏洞。
Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来...学习完本视频,你会真正理解Struts2相对于Struts1的优雅和简洁,并使你具备开发Struts2项目的能力。
这是对spring_hibernate_struts2的理解,可以在面试中简要的抓住重点进行陈述。
Struts2框架单元测试代码 一个完整的Eclipse工程