`

Servlet学习,url重写实现Session跟踪以Session的持久化

阅读更多

今天主要学习了Session,跟张老师学习了使用url重写实现Session跟踪以及Session的持久化,张老师不光只讲基础知识,今天学的使用url重写实现Session跟踪还有以前学习防止表单重复提交,都是在实际项目中要用到的,提前学习,加深基础知识的理解,又为以后项目的学习打好基础。
使用url重写实现Session跟踪
    这是在浏览器不支持Cookie的情况下,servlet引入的一种补充的会话机制。当用户发出下一次请求时,如果请求消息中没有包含Cookie头字段,Servlet引擎则认为客户端不支持Cookie,他将依据请求url参数中的会话标识号来实施会话跟踪。这种方式要求响应消息中出现的超链接地址后面附带会话标识号参数,用户也必须通过超链接来提交后续的访问请求。
   这种技术成为url重写,tomcat发送给客户端的会话标识号的Cookie名称为JSESSIONID。url重写就是将JSESSIONID关键字作为参数名和将会话标识号作为参数附加到URL后面。如果浏览器不支持Cookie或者关闭Cookie,就必须对所有可能被客户端访问的请求路径进行URL重写,如超链接,form表单的action属性和重定向的URL

  HttpServletResponse接口定义了两个用于URL重写的方法:
    encodeURL方法,用于超链接和form表单的action属性中设置的URL进行重写
    encodeRedirectURL 方法 用于对传递给HttpServletResponse.sendRedirect方法的URL进行重写
    他们根据请求消息中是否含有Cookie头字段来决定是否进行url重写。把URL作为参数传递给这两个方法,他们就能完成url重写,在url后面添加jsessionid参数及其值。可以关闭浏览器的Cookie,然后,进行实验,在网页源文件中查看URL后面是否有jsessionid参数及其值。


Session的持久化
客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源。
 web服务器通常将那些暂时不活动但为超时的HttpSession对象转移到文件系统或数据库中保存,服务器要使用他们时再将他们从文件系统或数据库中装载入内存,这种技术称为Session的持久化。
  将HttpSession对象保存到文件系统或数据库中,需要采用序列化的方式将HttpSession对象中的每个属性对象保存到文件系统或数据库中;将HttpSession对象从文件系统或数据库中装载如内存时,需要采用反序列化的方式,恢复HttpSession对象中的每个属性对象。所以存储在HttpSession对象中的每个属性对象必须实现Serializable接口。

Session的持久化的作用:
  1.提高服务器内存的利用率,保证那些暂停活动的客户端在会话超时之前继续原来的会话
2,在多台web服务器协同对外提供服务的集群系统中,使用Session的持久化技术,某台服务器可以将其中发生改变的Session对象复制给其他服务器。保证了在某台服务器停止工作后可以由其他服务器来接替它与客户端的会话
3,在一个web应用程序重启时,服务器也会持久化该应用程序中所有HttpSession对象,保证客户端的会话活动仍可以继续。
 Tomcat使用Session Manager 类来管理Session的持久化,他提供了两个SessionManager类
   org.apache.catalina.session.StandardManager
    org.apache.catalina.session.PersistentManager
StandardManager是tomcat默认使用的,在web应用程序关闭时,对内存中的所有HttpSession对象进行持久化,把他们保存到文件系统中。默认的存储文件为
<tomcat 安装目录>\work\Catalina\<主机名>\<应用程序名>\sessions.ser
PersistentManager比StandardManager更为灵活,只要某个设备提供了实现org.apache.catalina.Store接口的驱动类,PersistentManager就可以将HttpSession对象保存到该设备

分享到:
评论

相关推荐

    Tomcat_Session的持久化

    如果客户端不支持 Cookie,Servlet 容器可以通过重写 URL 来实现 Session 的跟踪。 三、Session 的管理 当一个 Session 开始时,Servlet 容器会创建一个 HttpSession 对象。在某些情况下,把这些 HttpSession 对象...

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    以上就是使用`SessionListener`、持久化`Session`和`Springmvc拦截器`实现单点登录的基本原理和实现步骤。通过这样的设计,可以有效地提升用户体验,同时确保系统的安全性。在实际项目中,还需要根据具体需求进行...

    关于servlet中request,session,application三者关系的形象解析

    每个session都有一个唯一的ID,这个ID通过cookie或者URL重写等方式发送给客户端。客户端在后续的请求中携带此ID,服务器据此识别出对应的session。session在默认情况下会在客户端一段时间无活动后自动失效。 3. ...

    有关session的技术原理及其应用

    1. **参数控制**:WebLogic Server提供了一系列参数来控制其`HttpSession`的实现方式,包括是否使用Cookie、URL重写、Session的持久化设置、Session的有效期设置以及Cookie的相关配置等。 2. **持久化设置**:通常...

    j2ee项目使用filter和memcached实现session服务器

    注意,虽然Memcached提供了一种快速的session存储解决方案,但也要考虑其局限性,如数据持久化、安全性等问题。在实际应用中,可能需要结合其他技术,如Redis或数据库,以提供更全面的解决方案。

    Java关于session的详细解释

    4. **表单数据持久化**:对于多步骤的表单,可以将用户的输入暂存于Session中,方便用户返回上一步进行修改。 #### 五、Session的生命周期 Session的生命周期通常包括以下几个阶段: 1. **创建**:当用户第一次...

    java中使用session购物车的简单例子

    - 为了提高性能和扩展性,大型应用往往不直接存储大量数据在Session中,而是用Session作为用户标识,将购物车数据持久化到数据库或其他缓存系统。 在“SessionCart”这个文件中,很可能包含了实现上述功能的Servlet...

    jsp购物车 servlet实现的

    虽然这个系统没有使用数据库进行持久化存储,但仍然可以展示基本的添加、删除商品以及计算总价等核心功能。 【主要知识点】 1. **JSP与Servlet**: JSP是动态网页技术,用于创建视图层,而Servlet是Java Web开发...

    JAVA servlet 编程指南

    通过创建和管理session,开发者可以实现用户状态的持久化,例如购物车功能。 ### 7. Filter Servlet Filter允许在请求到达Servlet之前拦截和修改它。开发者可以使用`Filter`接口和`FilterChain`类实现过滤器,用于...

    JavaWeb基础-Cookie和Session的简单使用案例

    3. 为了持久化用户登录状态,服务器还可以创建一个包含Session ID的Cookie(默认名为JSESSIONID),并将其设置为浏览器,这样每次请求时,浏览器都会自动携带这个Cookie。 4. 用户再次访问其他受保护的页面时,...

    在Java的web编程中关于session技术的使用详解

    - 使用URL重写,即将SessionID附加到URL上,不依赖Cookie。 - 使用Local Storage或Session Storage(HTML5引入),存储在客户端,适用于单页应用。 - 利用数据库或分布式缓存(如Redis)存储用户状态,适用于大型...

    tomcat8-session共享

    在IT行业中,尤其是在Web应用程序开发领域...但是,也要注意Redis的数据持久化和安全性,防止因服务器故障导致Session丢失。在大型分布式系统中,合理地管理和共享Session是保持用户体验一致性和系统稳定性的重要环节。

    kryo方式实现tomcat Session共享所需jar包

    它的优势在于序列化和反序列化速度极快,内存占用少,非常适合在网络之间或者持久化到内存中存储数据。在Tomcat Session共享中,Kryo可以将Session对象转换为字节数组,然后在各个节点间传递。 接着,配置Tomcat ...

    深入Java Servlet网络编程

    4. Session和Cookie:Session用于跟踪用户的会话状态,而Cookie可以持久化用户数据在客户端,两者在Web开发中用于实现用户登录状态的保持。 5. URL映射:通过在Servlet的web.xml配置中,或者使用@WebServlet注解,...

    Servlet API 文档帮助文件

    8. **Session和Cookie**:Servlet API提供了对HTTP Session和Cookie的支持,用于在客户端和服务器之间持久化数据。Session用于存储用户会话信息,Cookie常用来实现用户跟踪和个性化设置。 9. **Filter链**:通过`...

    HTTP1.1 服务器端及servlet引擎 java实现

    如果需要更复杂的功能,如session管理、过滤器等,就需要使用Servlet容器。 在实际项目中,我们通常不会从零开始编写整个HTTP服务器和Servlet引擎,而是选择已有的成熟框架,如Spring Boot,它提供了内置的Tomcat...

    servlet聊天室

    7. **存储聊天记录**:为了保存历史聊天记录,可以使用数据库或其他持久化存储方案。Servlet接收到新消息后,可以将其添加到数据库中,以便后续查询和展示。 8. **前端界面**:虽然这里主要讨论的是后端的Servlet...

    基于servlet实现的点餐系统.zip

    订单信息同样需要持久化到数据库中。 5. 订单状态跟踪:系统应能显示订单的状态,如待支付、已支付、正在处理、已完成等。Servlet会监控这些状态变化,并更新前端展示。 6. 支付集成:如果系统支持在线支付,还...

Global site tag (gtag.js) - Google Analytics