让不同的Servlet在一个Session共享连接

  ==== 问题所在 ====

  如果要编写一个购物车,通常需要写很多个不同功能的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 中传来传去,看来不怎么安全。

时间: 2024-10-31 13:48:51

让不同的Servlet在一个Session共享连接的相关文章

分布式中使用Redis实现Session共享(转)

上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享".这篇文章将会介绍如何使用Redis,下一篇在此基础上实现Session. 这里特别说明一下,其实没有必要使用Redis来解决Session共享.Asp.net提供了StateServer模式来共享Session,这里重复造轮子的目的1:熟悉Redis的基本知识和使用 2.学习和巩固Session的实现原理. 3.学习Redis应用场景 阅读目录 Re

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

Nginx和Tomcat负载均衡实现session共享(转)

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架.     此框架的优势:          1.支持Tomcat6和Tomcat7           2.操作粘性或不黏性Session           3.没有单点故障           4.Tomcat的故障转移           5.Memcached的故障转移           6.

服务器-session共享?天猫淘宝不用重复登录

问题描述 session共享?天猫淘宝不用重复登录 为什么在淘宝登录后,转到天猫上不用在登录?他们的ip是不一样的,服务器不是应该是两台么,是怎么做到seeion共享的,难道是登录后往本地写了文件?求大牛解释啊!! 解决方案 seeion内容是保存在淘宝的服务器上的,你的浏览器只来保存了一个sessionid,而且是使用cookied的保存的.当你第一次连接淘宝服务器 时,服务器的返回就包含一个sessionid,然后你的浏览器保存下来.每次跳转在淘宝的网页上,都会把这个sessionid传给服

请教关于 Apache+Tomcat群集Session共享问题

问题描述 我在做apache+tomcat集群session共享实验,配置如下:tomcat分别安装在两台服务器,IP地址分别是:172.16.19.63172.16.19.64apache在另外一台服务器,IP地址是:172.16.19.65apache服务器配置:修改apache服务器的配置文件httpd.conf找到以下内容并去掉注释LoadModuleproxy_modulemodules/mod_proxy.soLoadModuleproxy_ajp_modulemodules/mod

问下关于servlet和session的问题

问题描述 这个是我的Servlet.java文件:Stringstr="Thisismystring.";PrintWriterout=response.getWriter();request.getSession().setAttribute("string",str);out.println("<ahref="/MyProject/show.jsp">Show</a>");当转到show.jsp页面

nginx+tomcat实现负载均衡,使用redis session共享_nginx

环境准备 1.准备一台nginx服务器 ip192.168.1.133 端口81 安装过程: #首先安装依赖: yum -y install gcc-c++ yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install openssl openssl-devel #注意 : 安装nginx必须使用 root 用户安装 #创建一个nginx目录 mkdir /usr/local/src/nginx #进入到

ASP.NET实现在不同的子域中Session共享

今天遇到了这个问题,于是研究了一下.要解决这个问题,首先就要明白一些Session的机理.Session在服务器是以散列表形式存在的,我们都知道Session是会话级的,每个用户访问都会生成一个Session.那么服务器是怎么区分不同用户的Session?又是怎么将不同用户的Session与不同的用户绑定的呢?下面我们来研究一下,以下纯属我个人的理解,如有错误请指证. Session在服务器端是以散列表的形式存在的,区分每一个Session是通过SessionID来实现的,所以可以说这个Sess

禁止使用本地administrator进行共享连接的方法

在<如何禁止远程桌面时使用本地administrator登录>一文中讲到了采有administrator进行远程桌面时可能会遇到一些风险,其实在共享方面也是有一定风险,在本文中我们就一起来看看如何禁止利用本地administrator来进行共享连接.我们依然介绍到的是通过组策略的方式批量修改. 关于创建组策略部分呢,我们就不再进行讲解了,相信大家已经很熟悉其配置了,好我们假定我们已经创建了一条用于禁止本地administrator进行共享连接的策略,那么我们就来打开这条新建好的策略吧,如下图所