- 浏览: 597502 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (213)
- jdk (40)
- J2EE (8)
- JavaScript (16)
- spring (1)
- 正则 (10)
- ORACLE (18)
- CSS (1)
- 生活学习 (14)
- XML (3)
- Linux (11)
- 项目架设 (12)
- Junit (1)
- Derby (3)
- JMX (5)
- 版本控制 (4)
- PowerDesigner (1)
- 加密解密 (1)
- android (4)
- Eclipse (4)
- Hibernate (6)
- Tomcat (4)
- JasperReport&iReport (1)
- SqlServer (6)
- C++ (3)
- 系统架构涉及名词解释 (5)
- Hadoop (8)
- windows (2)
- SOA (1)
- 有趣的Google (1)
- 编程语言 (0)
- 数据结构与算法 (1)
- nodejs (1)
- 一些测试整理备份在这里吧 (0)
- 性能 (3)
- Drill (5)
- 学习 (1)
最新评论
欢迎大家一起讨论扔砖
我就在网上简单搜了搜, 没找到关于其application的线程安全权威说法
自己看源码吧。。。
扫了一眼javax.servlet.ServletContext的层次结构如下
第二个MockServletContext是个静态内部类
其setAttribute方法居然这样,直接不考虑了
剩下org.directwebremoting.util.FakeServletContext了
其setAttribute方法如下:
追加写入一个org.directwebremoting.util.FakeServletContext 其attributes 属性如下:
attributes实例
显而易见了。。。。。
当然这是我所找到的实现,其他实现可能有所不同,至少Dwr的这个是不安全的,但是还有很多 实现 是线程安全的
不认同"zah5897"这个观点,我记得Lea在并发实践里说过sun对servlet规范没有强制要求是否安全,是各个实现不同而已。
以下是apache-tomcat-5.5.32 的 org.apache.jasper.servlet.JspCServletContext实现
这个可是线程安全的哦!,所以不认同"zah5897",规范都没说,何来你说的"ServletContext本来就是线程不安全的啊"???
再举个例子,也是apache-tomcat-5.5.32 的,这个是 org.apache.catalina.core.ApplicationContext
这个也是线程安全的! ,建议"zah5897"多多看看源代码吧!
楼主的钻研精神很佩服,不过其实大部分的情况下我们写代码除了init的时候会朝application写之外,一般都是读操作,所以我倒是认为无论application的实现是否线程安全我都当它是个不安全的,可能我孤陋寡闻了,想了一下还真是想不出什么场景下必须要往application里写的
不认同"zah5897"这个观点,我记得Lea在并发实践里说过sun对servlet规范没有强制要求是否安全,是各个实现不同而已。
以下是apache-tomcat-5.5.32 的 org.apache.jasper.servlet.JspCServletContext实现
这个可是线程安全的哦!,所以不认同"zah5897",规范都没说,何来你说的"ServletContext本来就是线程不安全的啊"???
再举个例子,也是apache-tomcat-5.5.32 的,这个是 org.apache.catalina.core.ApplicationContext
这个也是线程安全的! ,建议"zah5897"多多看看源代码吧!
同意...
我就在网上简单搜了搜, 没找到关于其application的线程安全权威说法
自己看源码吧。。。
扫了一眼javax.servlet.ServletContext的层次结构如下
第二个MockServletContext是个静态内部类
其setAttribute方法居然这样,直接不考虑了
public void setAttribute(String s, Object obj) { }
剩下org.directwebremoting.util.FakeServletContext了
其setAttribute方法如下:
public void setAttribute(String name, Object value) { if(value != null) attributes.put(name, value); else attributes.remove(name); }
追加写入一个org.directwebremoting.util.FakeServletContext 其attributes 属性如下:
private final Map attributes;
attributes实例
public FakeServletContext(String resourceBasePath) { initParameters = new Properties(); attributes = new HashMap(); servletContextName = "FakeServletContext"; this.resourceBasePath = resourceBasePath == null ? "" : resourceBasePath; String tempDir = System.getProperty("java.io.tmpdir"); if (tempDir != null) attributes.put("javax.servlet.context.tempdir", new File(tempDir)); }
显而易见了。。。。。
当然这是我所找到的实现,其他实现可能有所不同,至少Dwr的这个是不安全的,但是还有很多 实现 是线程安全的
评论
8 楼
qjtttt
2011-03-20
ldbjakyo 写道
zah5897 写道
ServletContext本来就是线程不安全的啊,LZ去看看那API吧,
不认同"zah5897"这个观点,我记得Lea在并发实践里说过sun对servlet规范没有强制要求是否安全,是各个实现不同而已。
以下是apache-tomcat-5.5.32 的 org.apache.jasper.servlet.JspCServletContext实现
public class JspCServletContext implements ServletContext { public JspCServletContext(PrintWriter aLogWriter, URL aResourceBaseURL) { myAttributes = new Hashtable(); myLogWriter = aLogWriter; myResourceBaseURL = aResourceBaseURL; } public Object getAttribute(String name) { return myAttributes.get(name); } ... protected Hashtable myAttributes; }
这个可是线程安全的哦!,所以不认同"zah5897",规范都没说,何来你说的"ServletContext本来就是线程不安全的啊"???
再举个例子,也是apache-tomcat-5.5.32 的,这个是 org.apache.catalina.core.ApplicationContext
/** * Standard implementation of <code>ServletContext</code> that represents * a web application's execution environment. An instance of this class is * associated with each instance of <code>StandardContext</code>. * * @author Craig R. McClanahan * @author Remy Maucherat * @version $Id: ApplicationContext.java 939525 2010-04-30 00:36:35Z kkolinko $ */ public class ApplicationContext implements ServletContext { ... /** * The context attributes for this context. */ protected HashMap attributes = new HashMap(); /** * Return the value of the specified context attribute, if any; * otherwise return <code>null</code>. * * @param name Name of the context attribute to return */ public Object getAttribute(String name) { synchronized (attributes) { return (attributes.get(name)); } } /** * Bind the specified value with the specified context attribute name, * replacing any existing value for that name. * * @param name Attribute name to be bound * @param value New attribute value to be bound */ public void setAttribute(String name, Object value) { ... // Add or replace the specified attribute synchronized (attributes) { // Check for read only attribute if (readOnlyAttributes.containsKey(name)) return; oldValue = attributes.get(name); if (oldValue != null) replaced = true; attributes.put(name, value); } ... } ... }
这个也是线程安全的! ,建议"zah5897"多多看看源代码吧!
楼主的钻研精神很佩服,不过其实大部分的情况下我们写代码除了init的时候会朝application写之外,一般都是读操作,所以我倒是认为无论application的实现是否线程安全我都当它是个不安全的,可能我孤陋寡闻了,想了一下还真是想不出什么场景下必须要往application里写的
7 楼
ldbjakyo
2011-02-07
zah5897 写道
ServletContext本来就是线程不安全的啊,LZ去看看那API吧,
不认同"zah5897"这个观点,我记得Lea在并发实践里说过sun对servlet规范没有强制要求是否安全,是各个实现不同而已。
以下是apache-tomcat-5.5.32 的 org.apache.jasper.servlet.JspCServletContext实现
public class JspCServletContext implements ServletContext { public JspCServletContext(PrintWriter aLogWriter, URL aResourceBaseURL) { myAttributes = new Hashtable(); myLogWriter = aLogWriter; myResourceBaseURL = aResourceBaseURL; } public Object getAttribute(String name) { return myAttributes.get(name); } ... protected Hashtable myAttributes; }
这个可是线程安全的哦!,所以不认同"zah5897",规范都没说,何来你说的"ServletContext本来就是线程不安全的啊"???
再举个例子,也是apache-tomcat-5.5.32 的,这个是 org.apache.catalina.core.ApplicationContext
/** * Standard implementation of <code>ServletContext</code> that represents * a web application's execution environment. An instance of this class is * associated with each instance of <code>StandardContext</code>. * * @author Craig R. McClanahan * @author Remy Maucherat * @version $Id: ApplicationContext.java 939525 2010-04-30 00:36:35Z kkolinko $ */ public class ApplicationContext implements ServletContext { ... /** * The context attributes for this context. */ protected HashMap attributes = new HashMap(); /** * Return the value of the specified context attribute, if any; * otherwise return <code>null</code>. * * @param name Name of the context attribute to return */ public Object getAttribute(String name) { synchronized (attributes) { return (attributes.get(name)); } } /** * Bind the specified value with the specified context attribute name, * replacing any existing value for that name. * * @param name Attribute name to be bound * @param value New attribute value to be bound */ public void setAttribute(String name, Object value) { ... // Add or replace the specified attribute synchronized (attributes) { // Check for read only attribute if (readOnlyAttributes.containsKey(name)) return; oldValue = attributes.get(name); if (oldValue != null) replaced = true; attributes.put(name, value); } ... } ... }
这个也是线程安全的! ,建议"zah5897"多多看看源代码吧!
6 楼
zah5897
2010-08-25
ServletContext本来就是线程不安全的啊,LZ去看看那API吧,
5 楼
neptune
2010-08-25
application 一般都是init写,以后就读了。
4 楼
soci
2010-08-25
都 application 了肯定都是读操作 即使写也是定时器单线程写
3 楼
failure5152
2010-08-25
tel15618037751 写道
根据对这个东西作用的定位,它本来就不需要做到线程安全吧
同意...
2 楼
tel15618037751
2010-08-25
根据对这个东西作用的定位,它本来就不需要做到线程安全吧
1 楼
aoliwen521
2010-08-25
servlet规范的实现有很多。你看的是哪一个?
发表评论
-
关于饿汉式单例首次初始化失败后,可以再次尝试?
2012-07-11 15:14 1272思考一个问题,以下代码是一个简单的饿汉式单例代码,显然在第一次 ... -
由ApacheCommon-BeanUtils1.8.3发现的Java HotSpot(TM)的Bug
2012-07-03 15:42 1614由ApacheCommon-BeanUtils1.8.3发现的 ... -
JVM垃圾回收
2012-04-19 13:02 3533一、JVM内存模型及垃圾收集算法 1.根据Java虚 ... -
Java构建HashCode相同字符串算法
2012-01-10 15:05 5584import java.math.BigDecimal; ... -
线程全部结束与集合点
2011-11-12 16:26 1258final int size = 50; fin ... -
ddddddddd
2011-11-12 16:21 1265dddddddddd -
ccccccc
2011-11-12 16:20 2043ccccccccccc -
bbbbbb
2011-11-12 16:19 1827bbbbb -
Aaaaa
2011-11-12 16:19 947aaaaaaaa -
备忘链接
2011-08-16 18:25 962翻译,随便写了写,备忘一下 URLConnection co ... -
jvisualvm监听JVM
2011-08-05 10:14 1213配置好 set JAVA_OPTS=%JAVA_OPTS ... -
JVM 调优 技巧
2011-08-02 15:59 12701.升级 JVM 版本。如果能使用64-bit,使用64-bi ... -
JVM垃圾回收策略
2011-08-02 14:59 1069为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不 ... -
Java GC
2011-08-02 13:38 1063调整JVM GC(Garbage Collection),可 ... -
Java的弱引用(Weak Reference)
2011-05-18 16:07 1258要理解弱引用,首先要 ... -
使用classloader动态加载Class
2011-05-17 14:25 975http://www.javaworld.com/javawo ... -
查看class文件信息
2011-05-16 14:15 1716看了第6章的java class文件这一部分,我觉得对clas ... -
.class文件格式--java字节码文件的格式
2011-05-14 23:07 25491 . 目的 Java 虚拟机识别的 class 文件格式包含 ... -
Calendar
2011-03-30 14:13 1070/**获得参数月份的一号及其下一个月的一号*/ priva ... -
Bad version number in .class file
2011-03-04 15:08 1348java.lang.UnsupportedClassVersi ...
相关推荐
1. **企业级应用**:对于需要频繁与服务器交互的企业级应用来说,DWR可以显著提高用户体验,减少等待时间。 2. **实时应用**:如在线聊天、股票报价等需要实时更新数据的应用,DWR可以快速响应用户的操作,提供流畅...
dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr
DWR中文文档.pdf:这是DWR的官方中文文档,详细解释了DWR的各个方面,包括安装、配置、API使用、安全性和最佳实践。对于初学者来说,这是一个宝贵的资源,可以帮助理解并熟练掌握DWR。 DWR开发培训.ppt、DWR.ppt:...
- **安全机制**:DWR提供了防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)的安全机制,确保应用安全性。 2. **配置**: - **web.xml**:在Web应用的部署描述符中配置DWR的Servlet,如`dwr-servlet.xml`,设置...
总的来说,DWR是一个强大的工具,它简化了Web应用中的AJAX开发,让开发者可以更专注于业务逻辑,而不是底层通信细节。通过了解并掌握DWR的不同版本,你可以更好地应对各种项目需求,提升开发效率。
Direct Web Remoting (DWR) 是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行实时、安全的双向通信,有效地打破了JavaScript和Java之间的壁垒。这个技术在2005年推出,主要解决了AJAX(异步JavaScript...
- 在配置dwr.xml时,需要注意安全性问题。例如,不应该让所有Java方法都暴露给客户端调用。 - 对于复杂的数据结构,需要确保客户端能够正确解析服务器返回的数据。 - 需要关注DWR的版本兼容性问题,不同版本间的API...
1. **反向Ajax**:DWR实现了一种反向Ajax(Reverse Ajax)技术,使得服务器能够主动向客户端推送数据,而不仅仅是响应客户端的请求。 2. **JavaScript与Java的桥接**:DWR通过动态生成JavaScript库来映射Java对象和...
这份文档对于理解DWR的工作原理和使用方法至关重要,特别是对于中文用户来说。DWR2.0文档可能会涵盖以下几个方面: - **安装与配置**:介绍如何将DWR添加到现有项目中,包括引入jar文件、配置web.xml和dwr.xml文件...
暴露给JavaScript的服务器端方法可能会引发安全风险,因此需要谨慎设置DWR的访问权限,避免敏感数据和操作被不授权的用户调用。 通过这个简单的DWR演示项目,你可以深入理解DWR的工作原理,掌握如何配置DWR、编写可...
**DWR配置文件详解** Direct Web Remoting (DWR) 是一种开源的Java库,它允许Web应用程序在客户端JavaScript和服务器...理解和配置好`dwr.xml`文件对于充分利用DWR的功能至关重要,同时也对优化性能和安全有直接影响。
3. **安全控制**:为了防止未授权的访问,你可以配置安全策略,例如使用`<filter>`标签来限制访问的IP地址或者设置安全的白名单。 4. **调试设置**:通过`<debug>`标签,你可以开启或关闭DWR的调试模式,这在开发...
在DWR3中,你可以使用`Browser.withPageFiltered()`方法来针对特定页面开启线程,这些线程可以用于实时推送消息。这个方法接受三个参数:页面(page)、过滤器(filter)和一个Runnable对象(通常是一个自定义的线程...
"DWRchinese.pdf"可能是DWR的中文版官方文档或者一个综合教程,涵盖了从入门到高级的DWR使用技巧,包括但不限于创建远程对象、处理异步请求、使用批处理、调试和性能优化等内容。 在这个压缩包中,"DWR开发培训.ppt...
3. **安全机制**:DWR提供了一套安全机制,如CORS(跨源资源共享)支持、同源策略以及可配置的白名单,以限制哪些域名可以访问服务器资源,确保通信安全。 4. **批处理和缓存**:DWR支持批处理多个远程调用,以减少...
6. **安全性和权限控制**:DWR提供了一套安全机制,如白名单配置,限制可以访问的类和方法,防止跨站脚本攻击(XSS)和其他安全风险。 7. **错误处理与调试**:DWR有内置的错误处理机制,当调用失败时会返回错误...
- **Caja**:DWR的安全特性,它使用一种叫做Caja的沙箱机制来防止跨站脚本攻击(XSS)。 2. **DWR 2.0的新特性** - **Batching**:批量处理,允许多个请求合并成一个HTTP请求,减少网络延迟。 - **Async Calls**...
Direct Web Remoting (DWR) 是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行安全、简单、异步的通信。DWR的核心功能是将JavaScript与Java方法直接绑定,使得前端开发者能够调用服务器端的方法,就像...
DWR的核心功能在于提供了一种简单的方式来调用服务器上的Java方法,并将结果返回到浏览器,这在创建富互联网应用程序(RIA)时非常有用。 在DWR框架中,配置文件起着至关重要的作用,它是连接客户端和服务器端的...
DWR则简化了这个过程,提供了一种声明式的方法来调用服务器端的方法。 **Ajax + DWR**结合使用时,DWR作为一个中间层,处理JavaScript和Java之间的通信。开发者可以定义Java类和方法,DWR会自动生成对应的...