HttpServletRequest request这个对象,应该是与某个请求直接相关的,所以他会在过滤器,include,forward的直接相关的处理代码里进行传递。在这个请求处理完毕后,request应该被释放,由容器决定是否重用,还是被垃圾回收。如果我们把某个request保存到了其它的非request的scope里面,比如 session里面,或者某个 static的 对象里面,这样的话,容器就无法重用这个对象了(如果重用,后果严重),同时也不可能垃圾回收,因为你的代码还用着呢!
解决方案 »
- struts2 json 前台传一个集合类型的json数据后台接受不到
- org.xml.sax.SAXParseException:问题,急求答案
- java.lang.NoClassDefFoundError: com/jspsmart/upload/SmartUploadException
- 关于《轻量级J2EE企业应用实践-SSH整合开发》中第五章关于spring的小例子问题
- 关于DispatchAction,菜鸟求救
- tomcat域名绑定后不能正常连接数据库a,急!
- 找工作要求英文简历,一句话不知道怎么翻译合适(关于英文水平的描述),大家帮忙,斑竹手下留情
- 高手帮忙!tomcat问题,有效立即给分结贴!在线等
- 求助:第一个java程序无法通过
- 求大神帮忙解决jquery中取table里tr td的值
- 高分求助:请问Spring做单元测试的时候如果通过mock虚拟jndi数据源呢?
- struts中的DynaValidatorActionForm的问题
我想知道的是:这个request对象被使用完了之后,容器决定重用,
那么是怎样重用的。
我的意思,request里封装了从客户端传过来的请求内容,每次请求的内容不同,
那我怎样重用这个使用过的request对象来对新的请求进行处理呢?如果我们把某个request保存到了其它的非request的scope里面,比如 session里面,或者某个 static的 对象里面,这样的话,容器就无法重用这个对象了(如果重用,后果严重),同时也不可能垃圾回收,因为你的代码还用着呢! 如果我持有这个request的引用,容器就无法重用这个对象了。
那么,现在除了我就没有任何人(容器)去使用这个request对象了。那我为什么不可以使用这个对象呢?
又怎么会have indeterminate results 呢?
我应该对这个request对象了解才对啊。
基本上都是get****(),或者is****()的方法。
假设重用的时候,是把request的成员变量重新赋值,接口中并没有定义这些赋值的方法,
如果有这些赋值的方法,明显的,开发人员同样可以使用,这样不合理。要么就是用反射直接改变成员变量的值?
赋过值后,再去使用这个在前次请求中生成的request对象?
如果这样的话,岂不是对于容器和实现HttpServletRequest接口的类的设计有很大的制约?希望谁给解惑下啊?到底怎么重用?
不过既然是容器来重用(recycle是重用还是回收????)request那么应该找来个容器的源码看看才行。
找到个文章写了tomcat的request的recycle方法
http://www.blogjava.net/hk2000c/archive/2007/10/27/156388.html
不过持方法里全调用的其他对象的recycle方法
如果说是回收的话,可能是把它的所有属性重新设置为默认的,
然后再重新赋值。嗯,经你提醒,
刚看了源码,
确实有很多set***()方法的具体实现。
对于我们,屏蔽了这些接口。