`
djsl6071
  • 浏览: 579129 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Tomcat服务器session持久化

阅读更多
TAG:session持久化

来自:http://www.tongyi.net/develop/Java/1053722.html

简介
Jakarta Tomcat服务器是一种Servlet/JSP容器,经历了3.x到4.0.x到4.1.x的变迁,现在最新的版本为5.0.x,支持Servlet2.4和JSP2.0规范,从apache网站上下载Tomcat 5,在环境变量中配置一下JAVA_HOME,小猫就能生灵活现的跑起来了。若小猫启动失败,DOS窗口会自动关闭,若运行catalina run命令DOS窗口是不会自动关闭的。

tomcat中有三个放置java库的地方,分别是/server/lib、/shared/lib和/common/lib。
区别:/server/lib - 其中的jar文件只能被tomcat服务器访问。
/shared/lib - 其中的jar文件可以被所有的Web应用访问,但不能被tomcat服务器访问到。
/common/lib - Web服务和tomcat服务器都可以访问的到。

server.xml文件解析 - 文件位置是<%CATALINA_HOME%>/conf/server.xml

配置虚拟主机
Host元素代表虚拟主机,在同一个Engine元素下可以配置多个虚拟主机。打开server.xml文件可以发现Engine元素下已经有一个名为localhost的Host元素了,可以在它后面加入下列代码:

<Host name="www.myname.com" debug="0" appBase="c:\myname" unpackWar="true" autoDeploy="true">
    <alias>www.myname1.com</alias>
    <alias>www.myname2.com</alias>
    <Context pathh="/helloapp" docBase="helloapp" debug="0" reloadable="true"/>
</Host> 

Session的使用
Session是一种用来跟踪用户状态的机制,那它是怎么实现的呢?Servlet容器通过在客户端浏览器中保存一个Session ID来跟踪Session,调用session.getID()可以看到你的Session ID是多少。如果客户端支持Cookie,就把Session ID作为Cookie保持在浏览器中,现在绝大多数浏览器都会把Cookie功能打开,但如果用户禁止了Cookie呢?Java Servlet API中提出了另外一种机制,Servlet容器可以重写客户requst的URL,把Session ID添加到URL信息中,HttpServletResponse接口提供了这样的方法:public String encodeURL(String url)-先判断如果没有启用Session,例如jsp中<%@ page session="false"%>或执行了session.invalideate(),那么直接返回url,在判断客户端师父支持Cookie,如果不支持,就在url中加入Session ID的信息,然后返回修改后的url。

Session的管理
当一个sesson开始时,Servlet容器会创建一个HttpSession对象,在某些情况下把这些Httpsession对象从内存中转移到文件系统中或数据库中,需要访问的时候在把它们载入到内存中来。这样做的好处有两点:节约了内存的消耗,当web服务器产生故障时,还可以从文件系统或数据库中恢复Session的数据。
对于Session的管理,小猫提供了两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManager。
StandardManager -是默认的方法,当Tomcat服务器重启或重载的时候,会把Session对象保存到
<%CATALINA_HOME%>/work/Catalina/honstname/applicatonname/SESSIONS.ser(默认值)文件中,每个对象对应一个文件,以Session ID为文件名,例如:

<Context path="/helloapp" docBase="helloapp" debug="0" reloadable="true">
    <Manager className="org.apache.catalina.session.StandardManager" debug="0" 
      maxActiveSessions="-1" checkInterval="60"
 />
</Context>

参数说明:checkInterval-检查session是否过期的时间间隔,以秒为单位,缺省值是60秒;
maxActiveSessions-可处于活动状态的session数。

PersistentManager -提供了更加灵活的管理方式,具有容错能力,可以及时把Session备份到Session Store中,可以控制内存中Session的数量。
小猫还提供了实现持久化Session Store的接口,org.apache.catalina.Store,目前提供了两个具体实现类:org.apache.catalina.FileStore和org.apache.catalina.JDBCStore。
server.xml中的配置File Store -

<Context path="/helloapp" docBase="helloapp" debug="0" reloadable="true">
    <Manager className="org.apache.catalina.session.PersistentManager" debug="0" saveOnRestart="true" 
          maxActiveSessions
="-1" minIdleSwap="-1" maxIdleSwap="-1" maxIdleBackup="-1" >
    <Store className="org.apache.catalina.session.FileStore" directory="mydir"/>
    </Manager>
</Context>

参数说明:saveOnRestart-服务器关闭时,是否将所有的session保存到文件中;
maxActiveSessions-可处于活动状态的session数;
minIdleSwap/maxIdleSwap-session处于不活动状态最短/长时间(s),sesson对象转移到File Store中;
maxIdleBackup-超过这一时间,将session备份。(-1表示没有限制)

JDBCStore配置的区别:

<Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver" 
    connectionURL
="jdbc:mysql://localhost/tomsessionDB?user=root&password=" 
    sessionTable
="tomcat_session" sessionIdCol="session_id" sessionDataCol="session_data" 
    sessionValidCol
="session_valid" sessionMaxInactiveCol="max_inactive" 
    sessionLastAccessedCol
="last_access" sessionAppCol="app_name" checkInterval="60" debug="99" />

Session失效时间的设定
在web.xml文件中,位于<servlet-mapping>和<welcome-file-list>元素之间加入如下代码,单位为分钟:

<session-config>   
    <session-timeout>60</session-timeout>
</session-config>

Tomcat的admin平台和manager平台
这是Tomcat中自带的两个Web应用,位于<%CATALINA_HOME%>/server/webapps/admin(manager),访问地址是http://localhsot:8080/admin(manager)。要访问这两个Web应用,需要在
<%CATALINA_HOME%>/conf/tomcat-users.xml中添加如下内容:
<user username="admin" password="1234" role="admin"/>           //对应admin Web应用
<user username="manager" password="1234" role="manager"/>   //对应manager Web应用

admin平台把所有可配置的信息分为三类:Tomcat Server、Resources、User Definition。
Tomcat Server-相当于server.xml中的<Server>元素及其子元素,<Service>、<Host>、<Context>、<Resources>、<Date Source>。
Resources-相当于server.xml中的<GlobalNamingResources>,共有四种资源:Date Source(JNDI数据源)、Mail Sessioin(JNDI Mail Session资源)、Environment Entry(环境变量)、User Database(安全域中的用户数据库)。
User Definition-与tomcat-users.xml相对应。

manager平台-列出来所有Web应用和状态,并提供了Start、Stop、Reload、 Undeploy命令,还可以发布
<%CATALINA_HOME%>/webapps目录下的Web应用或系统文件任意位置的WAR文件。

参考:《Tomcat与JavaWeb开发技术详解》

 
分享到:
评论

相关推荐

    Session持久化

    在tomcat实现对session的持久化,如果浏览的用户过大,避免服务器的内存消耗太大,影响性能。

    通过Nginx+Tomcat+Redis实现持久会话

    Redis的特点就是可以将session持久化。样才能真正实现后台多个Tomcat负载平衡,用户请求能够发往任何一个tomcat主机。 keeplived、zabbix与ansible暂不在本文章的范围当中,会在之后的文章逐一进行讲解 实验架构图 ...

    Tomcat中的Session与Cookie深入讲解

    解决办法就是使用 Cookie,它由服务器返回给浏览器,浏览器缓存并在每次请求时将 cookie 数据提交到服务器。Cookies 在请求中以明文传输,且大小限制 4KB,显然把所有状态数据保存在浏览器是不靠谱的,主流做法是: ...

    谈谈业务中使用分布式的场景1

    2.集群中,各个应用服务器提供了session复制的功能,tomcat和jboss都实现了这样的功能 3.session的持久化,使用数据库来保存session

    编程入门_Eclipse教程

    1. 配置服务器Tomcat 2 1.1. 详细配置如下 2 2. Axis2与Eclipse的整合 7 2.1. Axis2下载,并部署axis2到Tomcat 7 2.2. Eclipse下安装Axis2插件 8 2.2.1. 下载axis2的eclipse插件 8 3. 编写Web service程序 10 3.1. ...

    how-tomcat-works

    4.2.1 持久化连接 18 4.2.2 编码 18 4.2.3 状态码100的使用 19 4.3 Connector接口 19 4.4 HttpConnector类 20 4.4.1 创建ServerSocket 20 4.4.2 维护HttpProcessor对象池 20 4.4.3 提供Http请求服务 21 4.5 ...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    4.2.1 持久化连接 18 4.2.2 编码 18 4.2.3 状态码100的使用 19 4.3 Connector接口 19 4.4 HttpConnector类 20 4.4.1 创建ServerSocket 20 4.4.2 维护HttpProcessor对象池 20 4.4.3 提供Http请求服务 21 4.5 ...

    低清版 大型门户网站是这样炼成的.pdf

    1.2.5 支持集群功能的web服务器tomcat 21 1.2.6 开源数据库服务器之骄子mysql 23 1.2.7 功能强大的flv流媒体服务器red5 24 1.3 门户网站开发指导思想 26 1.4 ssh 2组合框架—门户网站开发之首选 28 1.4.1 mvc...

    Nginx安装包

    与一般数据库不同,redis是使用内存作为主存,而使用硬盘来实现数据持久化,而且redis是周期性的将数据写到硬盘上。这就意味着一旦我们服务器出现断电、重启之类的情况,我们很可能会出现数据丢失的情况,所以不建议...

    jsp servlet 入门学习资料-新手一看就懂

    2.2.3 持久化 2.2.4 用户化 2.3 Java Servlet 2.3.1 HTTP Servlet API 2.3.2 系统信息 2.3.3 传送HTML信息 2.4 SQL语言 2.4.1 SQL子类型 2.4.2 SQL语言的具体命令和使用 2.5 JDBC 2.5.1 什么是 JDBC ...

    jsp从入门到高级编程

    2.2.3 持久化 2.2.4 用户化 2.3 Java Servlet 2.3.1 HTTP Servlet API 2.3.2 系统信息 2.3.3 传送HTML信息 2.4 SQL语言 2.4.1 SQL子类型 2.4.2 SQL语言的具体命令和使用 2.5 JDBC 2.5.1 什么是 JDBC ...

    Java及大数据学习路线.pdf

    HTML、CSS、JS、XML Tomcat服务器、HTTP协议、JSP、Servlet组件 EL表达式、会话控制、⽂件的上传下载 Filter组件、Listener组件、异步传输框架AJax 系统整体分层解耦框架spring 轻量级Web框架springmvc 轻量级持久层...

    JSP高级教程

    2.2.3 持久化 2.2.4 用户化 2.3 Java Servlet 2.3.1 HTTP Servlet API 2.3.2 系统信息 2.3.3 传送HTML信息 2.4 SQL语言 2.4.1 SQL子类型 2.4.2 SQL语言的具体命令和使用 2.5 JDBC 2.5.1 什么是 JDBC ...

    JSP高级编程

    2.2.3 持久化 2.2.4 用户化 2.3 Java Servlet 2.3.1 HTTP Servlet API 2.3.2 系统信息 2.3.3 传送HTML信息 2.4 SQL语言 2.4.1 SQL子类型 2.4.2 SQL语言的具体命令和使用 2.5 JDBC 2.5.1 什么是 ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    MyEclipse,Deamweare,选择SQLserver作为后台的数据库,选择JAVA、JSP、JavaScript、Html作为应用程序开发工具,运用Tomcat服务器技术,整个系统完全基于B/S (Browser/Server)模式进行设计。 1、Tomcat应用服务器 ...

    Hibernate教程

    1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant...

    hibernate3.04中文文档.chm

    符合Java习惯的关系数据库持久化 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 ...

    程序员面试刷题的书哪个好-Hackathon_Team_Project:ThisrepositoryisforHackathoncontest

    使用Tomcat服务器集群以及AWS提供的Application layer Load Balancer。 此外还使用了处于网络层第四层的Load Balancer,实现了由Nginx 集群+Tomcat集群组成的Server集群。 项目亮点: 系统架构完整:Serve集群,并...

    最全Hibernate 参考文档

    1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory ...

    深入体验Java Web开发内幕

    7.4 Session  7.5 Session的典型案例  7.6 Session的持久化管理  7.7 思考与实践 第8章 JSP  8.1 JSP入门  8.2 JSP基本语法  8.3 JSP指令  8.4 out对象  8.5 pageContext对象...

Global site tag (gtag.js) - Google Analytics