Tomcat 中的 Session

9 二月, 2010 (16:15) | Architecture, J2EE Server 繁体 English    DeliciOus   
作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.javabloger.com/article/tomcat-session.html

废话少说,先来看看保存session的4种方案
1.在Web容器的内存中,最常见,最原始的,纯天然,无人工的。
2.跟上面第一种差不多,只是保存在文件里了,如果忽然down机,下次重启session还在。
3.通过java JDBC保存在数据库里面。
4.通过中央式缓存 Memcached 集中管理。

1、2就不讨论了,说一下3、4 各有优势

第3点的优势:每台机器连接相同的数据库 session 将集中被管理起来,不会在每个Tomcat之间互相大量复制,减少系统的整个运行压力,另外,在持久化的过程中使用的是 org.apache.catalina.session.JDBCStore对象 Tomcat 下 catalina.jar的一部分,不需要另外引入其他api,并且session数据一直保存在数据库中,而第4点 Memcached 重启 里面的回话也就销毁,需要另外引入API,但是从执行效率上看大于第3种。
所以可以根据你的需要选择不同的方案。

查找了网上N多资料,都是互相抄袭并且非常严重!!连错的地方都一起抄过来,我为国人感到可耻!最后还是从一个日本blog上看见了一篇日志得到了启发。
查看地址:http://d.hatena.ne.jp/stdcall/20070102/1167688088

以下是测试程序。环境:tomcat5.5 / MySQL ===

========================Server.xml =============================
<Context docBase="SMBMySQLOA"
    path="/test"
    reloadable="true"
    source="org.eclipse.jst.j2ee.server:test"
    backgroundProcessorDelay="1" >
  <Manager className="org.apache.catalina.session.PersistentManager"
      distributable="true"
      duplicates="-1"
      saveOnRestart="true"
      maxActive="-1"
      maxActiveSessions="0"
      minIdleSwap="-1"
      maxIdleSwap="-1"
      maxIdleBackup="-1"
      maxInactiveInterval="-1"
      sessionCounter="-1" >

    <Store className="org.apache.catalina.session.JDBCStore"
        checkInterval="1"
        connectionURL="jdbc:mysql://172.16.2.211/test?user=root1&amp;password=123456"
         driverName="com.mysql.jdbc.Driver"
        sessionAppCol="app_name"
        sessionDataCol="session_data"
        sessionIdCol="session_id"
        sessionLastAccessedCol="last_access"
        sessionMaxInactiveCol="max_inactive"
        sessionTable="tomcat_sessions"
        sessionValidCol="valid_session" />
  </Manager>
</Context>
 </Host>

========================MySQL 建表语句 =============================
CREATE TABLE `tomcat_session` (
  `session_id` varchar(100) NOT NULL,
  `valid_session` char(1) NOT NULL,
  `max_inactive` int(11) NOT NULL,
  `last_access` bigint(20) NOT NULL,
  `app_name` varchar(255) DEFAULT NULL,
  `session_data` mediumblob,
  PRIMARY KEY (`session_id`),
  KEY `kapp_name` (`app_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

=======================JSP 测试程序 =============================
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
session id = <%= session.getId() %>
<br>
<%    Integer counter = (Integer)session.getAttribute("counter");
    counter = ( counter == null )
        ? new Integer(1) : new Integer(counter.intValue() + 1);
    session.setAttribute("counter",counter);
%>
counter = <%= session.getAttribute("counter") %>
</body>
</html>

最终效果如图所示:

http://www.javabloger.com/images/article_pic/tomcat-session/session_s.jpg

查看大图请点击这里

参考资料:http://www.blogjava.net/wangxinsh55/archive/2009/03/06/258199.html

参考资料:http://www.jaxmao.org/tomcat-docs/cluster-howto.html

–end–


Creative Commons License
本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。

评论





-->