当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

让差别的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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 让差别的Servlet在一个Session同享衔接
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .