让不同的Servlet在一个Session共享连接
日期:2007年8月2日 作者: 查看:[大字体 中字体 小字体]-
==== 问题所在 ====
如果要编写一个购物车,通常需要写很多个不同功能的servlet。例如用户登录、添加商品、查询购物车、结帐等。
在这些 servlet 中都需要读写数据库。如果我们在每个 servlet 中都进行连接 -> 读写 -> 断开连接的操作,就会消耗大量的服务器资源,不仅程序响应速度减缓,而且会加重服务器和数据库的负担。
==== 把希望寄托于 HttpSession ====
如我们所学,Servlet API 提供了一些方法和类来专门处理短期的会话跟踪。网站的每个用户都和 javax.servlet.http.HttpSession 对象有关,servlet使用这个对象来记录和检索每个用户的信息。
幸运的是,我们可以在会话对象中存储任意的 java 对象。存储的方法大家都已经很熟悉,就是使用 setAttribute()方法。代表数据库连接的Connection也不例外。
这就为我们让不同的servlet在一个session内共享链接带来的希望。
==== 安全问题 ====
那么,仅仅像下面这样做就可以了么?
1、在Servlet1中,向session中设置一个属性:
session.setAttribute("connection", connection);
2、在Servlet2中,取出这个属性:
Connection connection = (Connection) session.getAttribute ("connection");
理论上,没有问题。在 Servlet1 中产生的 Connection 对象,到了 Servlet2 中可以继续使用。
但是如果 Servlet2 不小心改变了 connection 的引用,例如 connection = null; 那么,当它再次把这个connection放入session的属性当中,其它的 servlet 就会得到一个指向 null 的 connection!
==== 解决之道 ====
把 connection 直接在 session 中传来传去,看来不怎么安全。
解决思路是,我们找一个专门的人来保管这个 connection,在得到请求的时候,由这个人把 connection 的引用返回给调用者。这样,即使调用者不小心把它得到的那份 connection 搞坏了,保管着手里也总还有一个备份。
相应的,在 session 的属性中,我们不再保存 connection 本身,而是把这个保管者存进去。因为他能随时给我们一个可用的 connection。
这个类的具体写法是:
public class ConnectionHolder {
public ConnectionHolder(Connection con) {
// 保存连接
this.con = con;
try {
// 禁用自动提交,以隔离不同session之间的操作。
con.setAutoCommit(false);
}
catch(SQLException e) {
// 错误处理代码
}
} - [1] [2] [3] [4] 下一页
-
- 让不同的Servlet在一个Session共享连接 相关文章:
- ·C #中的几个线程同步对象方法
- ·Photoshop批处理快速制作同尺寸图片
- ·Linux和Windows系统升级的最大不同
- ·sqlldr加载数据到不同表的问题
- ·QQ会员与众不同 37项独有特权功能一览
- ·在不同版本的SQL Server中存储数据
- ·CSS技巧:word-wrap同word-break的区别
- ·Excel相邻单元格快速填入相同日期的几种方法
- ·在我的城堡,同样需要你的陪伴_QQ空间
- ·Firefox 3:平台不同 界面不同
- 让不同的Servlet在一个Session共享连接 相关软件
- ·同与异
- ·同人格斗游戏《SOS团之超乱斗》试玩
- ·九种性格:如何跟不同性格的人沟通
- ·小魔女同人射击
- ·《和校花同居中日子》
- ·与玄奘同行
- ·与孙子兵法同步思考
- ·爱在同居的日子里I、II
- ·与你同行
- ·同学少年都不贱
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:对比JSF在Eclipse 和 NetBeans中的应用
精品推荐
热点TOP10
- ·图象处理中的边缘检测------canny算子
- ·EZ-USB 68013A开发指南
- ·数值计算程序大放送-特征值和特征向量
- ·ARM的嵌入式Linux移植体验之BootLoader
- ·Visual C++ ADO数据库编程入门
- ·智能手机Smartphone开发导语
- ·利用 wordXP 实现自动排班
- ·[分形]DLA团簇模型的摸拟
- ·DENX U-Boot及Linux使用手册
- ·Visual FoxPro 9.0 SP2正式版下载
- ·VS2005控件的问题解决办法
- ·Cookie是什么?用法是怎样?与SESSION有什么区别?
- ·J2SE API读取Properties文件的六种方法
- ·Silverlight、JavaFX、Flex技术比较
- ·Silverlight将不再支持ArrayList类型
- ·教程:XSLT Designer快速入门指南
- ·创建Web应用和Struts框架配置文件实例
- ·Spring入门指引:理解Spring的打包方式
- ·UDT协议-基于UDP的可靠数据传输协议
- ·解析KJava在移动设备开发中的应用
