让差别的Servlet在一个Session同享衔接[Java编程]
本文“让差别的Servlet在一个Session同享衔接[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
==== 问题所在 ====
假如要编写一个购物车,普通需求写很多个差别功效的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) {
// 错误处理代码
}
}
public Connection getConnection() {
// 通过这个getter办法获得衔接
return con;
}
private Connection con = null; // 设置为私有变量,这很重要,以确保变量安全.
}
以上是“让差别的Servlet在一个Session同享衔接[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |