`

servlet中的session使用

阅读更多
还是由于HTTP协议连接的无状态性,才使得session的不得已而产生。既然Web应用并不了解有关同一用户以前请求的信息,那么解决这个问题的一个办法是使用Servlet/JSP容器提供的会话跟踪功能,Servlet API规范定义了一个简单的HttpSession接口,通过它我们可以方便地实现会话跟踪。

     HttpSession接口提供了存储和返回标准会话属性的方法。标准会话属性如会话标识符、应用数据等,都以“名字-值”对的形式保存在服务器端。也就是说,HttpSession接口提供了一种把对象保存到内存、在同一用户的后继请求中提取这些对象的标准办法。在会话中保存数据的方法是setAttribute(String s, Object o),从会话提取原来所保存对象的方法是getAttribute(String s)。

   在服务器端,每当新用户请求一个使用了HttpSession对象的JSP页面,Servlet/JSP容器除了发回应答页面之外,它还要以cookie的形式向浏览器发送一个特殊的数字。这个特殊的数字称为“会话标识符”,它是一个唯一的用户标识符。此后,HttpSession对象就驻留在内存之中(这当然是在服务器端),浏览器再请求session时,服务器会先得到它的sessionid,再作处理。

     在客户端,浏览器保存会话标识符,并在每一个后继请求中把这个会话标识符发送给服务器。会话标识符告诉JSP容器当前请求不是用户发出的第一个请求,服务器以前已经为该用户创建了HttpSession对象。此时,JSP容器不再为用户创建新的HttpSession对象,而是寻找具有相同会话标识符的HttpSession对象,然后建立该HttpSession对象和当前请求的关联。

   会话标识符以Cookie的形式在服务器和浏览器之间传送,标准会话属性在服务器端也是以会话的形式存在的,并且这个Cookie的生命周期只是临时的,即会话结束后就自动消失,没有为它指定固定的生命周期,因此有人说session是基于Cookie的技术。另外,如果客户端不支持Cookie,运用url重写机制来保证会话标识符传回服务器。

     还有一点,session不像Cookie那样拥有路径访问的问题。session对应的是窗口,只要是同一个客户端或者是存在父子关系的多个客户端,同一个application下的servlet/JSP可以共享同一个session。当然,session和窗口的对应关系也是受时间限制的,至于多长时间,可以在服务器的conf/web.xml中配置<session-config><session- timeout>30</session-timeout></session-config>


实例代码:

1.设置session 和 显示session

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out=resp.getWriter();
        //String title="Session Tracking Example";
        HttpSession session=req.getSession(true);//如果没有该session,则自动创建一个新的
        String heading;
        Integer accessCount=(Integer)session.getAttribute("accessCount");
        if(accessCount==null){
            accessCount=new Integer(0);
            heading="Welcome, NewComer!";
        }else{
            accessCount=new Integer(accessCount.intValue()+1);
            heading="Welcome,back!";
        }
        session.setAttribute("accessCount", accessCount);
        out.println("<html><head><title>Session追踪</title></head>"
                +"<body bgcolor=\"#FDF5E6\">\n"
                +"<h1 align=\"center\">"
                +heading+"</h1>\n"
                +"<h2>Information On Your Session: </h2>\n"
                +"<table border=1 align=\"center\">\n"
                +"<tr>\n"+" <td>id\n"+"<td>"+session.getId()+"\n"
                +"<tr>\n"+" <td>CreatTime\n"+"<td>"
                +new Date(session.getCreationTime())+"\n"
                +"<tr>\n"+" <td>Time Of Last Access\n"+"<td>"
                +new Date(session.getLastAccessedTime())+"\n"
                +"<tr>\n"+" <td>Number Of Prious Access\n"+"<td>"
                +accessCount+"\n"+"</table>\n"+"</body></html>");
    }
   

2.URL重写

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out=resp.getWriter();
        HttpSession session=req.getSession(true);
        out.println("<html><head><title>Session追踪</title></head>"
                +"<body>\n"
                +"Session ID: "+session.getId()+"<br>"
                +"from URL? : "+req.isRequestedSessionIdFromURL()+"<br>"
                +"from Cookie? : "+req.isRequestedSessionIdFromCookie()+"<br>"
                +"<a href="+resp.encodeURL(req.getRequestURL().toString())+">test</a& gt;<br>"//重写URL:encodeURL(),如果浏览器的cookie没有禁掉,则这句话没有对 req.getRequestURL().toString()作任何处理,还是保持这个字符串的原样;如果cookie被禁掉了,则在字符串的后面加上一字符串";"+session ID
                +"<a href="+req.getRequestURL().toString()+">test</a>"
                +"</body></html>");
    }


分享到:
评论

相关推荐

    JSP 在servlet中使用session

    本篇文章将深入探讨如何在Servlet中使用session,并通过一个猜数字的小游戏来实践这个概念。 首先,理解什么是session。Session是一种基于cookie的会话管理机制,当用户首次访问服务器时,服务器会在内存中创建一个...

    servlet中关于session的理解

    接着可以通过`setAttribute`方法向Session中存储数据: ```java session.setAttribute("username", user); session.setAttribute("password", pass); ``` 这些数据可以在用户的后续请求中被获取到,从而保持了数据...

    登录验证完整版(servlet及session技术支持)

    当用户成功登录后,服务器会创建一个新的Session对象,并将用户的一些重要信息(如用户ID或认证令牌)存储在这个Session中。Session通过一个唯一的Session ID来标识,这个ID会被发送回客户端(通常是通过Cookie),...

    Servlet Session机制详解

    Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码

    jsp和servlet之中的session详细介绍

    本文将深入探讨JSP和Servlet中的session概念,以及它们如何在Web应用程序中实现状态管理。HTTP协议本身是无状态的,这意味着每次客户端(浏览器)向服务器发送请求时,服务器无法识别请求是否来自同一个会话。为了...

    基于jsp_servlet_session完成的图书查询及购物车案例-内含有MySQL数据库

    该案例是基于Java Web技术,特别是JSP(JavaServer Pages)、Servlet和Session,实现的一个图书查询及购物车系统。这个系统充分利用了三层架构模式,即表现层(Presentation Layer)、业务逻辑层(Business Logic ...

    Servlet实现Session

    在其他受保护的页面,Servlet会检查用户是否已经登录,即Session中是否有登录过的标识。可以通过 `getAttribute()` 方法来获取Session中的值,如果值为空,则表示用户未登录,应重定向回登录页面。 7. **管理...

    Servlet中如何捕获Session事件?

    Servlet中如何捕获Session事件

    JSP_tomcat_mysql_servlet_session

    标题“JSP_tomcat_mysql_servlet_session”揭示了这个实例是关于在Java Web开发中使用JSP、Tomcat服务器、MySQL数据库以及Servlet和Session来实现Model-View-Controller(MVC)架构的一个实践项目。这里我们将深入...

    北大青鸟Y2指导学习一servlet和session

    【标题】:“北大青鸟Y2指导学习一servlet和session”主要涵盖了Web开发中的两个核心概念:Servlet和Session。Servlet是Java服务器端编程的重要组成部分,用于扩展服务器的功能,处理HTTP请求并返回响应。而Session...

    Servlet对Cookie和Session的管理源码实例

    Servlet不仅能够生成动态内容,还能进行会话管理,其中最常用的就是Cookie和Session。本文将深入探讨Servlet如何管理和利用这两种技术进行会话跟踪。 **Cookie管理** Cookie是一种客户端存储机制,用于在用户的...

    servlet+cookie和Session

    Servlet是Java EE技术中用于处理Web应用客户端请求的核心组件,它是实现了特定接口的Java类,主要职责是接收和响应客户端的HTTP请求。Servlet容器(如Tomcat)负责加载和运行Servlet,当特定请求到达时,容器会实例...

    servlet中session简介和使用例子

    在servlet中,session是封装在javax.servlet.http.HttpSession这个接口中的,这个接口是构建在cookie或者URL重写的基础上,要得到一个HttpSession的实例,就可以通过HttpServletRequest的getSession()方法来获得

    birt 使用session数据, 通过servlet访问

    接下来,让我们深入探讨如何在BIRT中使用Session。HTTP Session是Web应用中常用的一种技术,用于存储用户特定的信息,比如登录状态、购物车内容等。在BIRT中,可能我们需要将用户的某些信息或者特定的报告参数保存在...

    Java Web应用开发 51 课堂案例-应用Servlet读取Session数据.docx

    这个案例不仅教授了如何在Servlet中使用Session,还涉及了HTTP请求和响应的处理,以及Servlet的生命周期方法。通过实践这个案例,开发者可以深入理解Web应用程序中用户状态管理的重要性以及如何有效地实现这一功能。

    servlet session 购物车

    3. 操作购物车:每当用户选择添加、删除或修改商品数量时,我们从Session中取出购物车对象进行相应操作,然后重新存入Session。这样,即使用户在不同的页面间跳转,购物车信息也能保持一致。 4. 清除购物车:当用户...

    学习JSP(JBuilder版)——用Servlet实现页面间通信(Session对象)

    本教程将聚焦于如何在JSP应用中使用Servlet和Session对象来实现在不同页面间的数据共享,尤其适用于JBuilder开发环境。 **一、JSP与Servlet简介** JSP是一种服务器端技术,它允许开发者使用HTML或者XML模板来嵌入...

    北大青鸟Y2 指导学习一(servlet 和session) 开发基于JSP Servlet JavaBean网上交易系

    课程将教授如何在JSP中使用这些元素,以及如何通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化页面逻辑。 3. **JavaBean规范**:JavaBean遵循一定的设计模式,包括具有默认构造...

    jsp servlet过滤器,登陆验证 获取session

    // 如果session中没有登录信息,表示用户未登录 if (session == null || session.getAttribute("loginUser") == null) { // 重定向到登录页面 req.getRequestDispatcher("/login.jsp").forward(request, ...

    Servlet_Session和Cookie学习

    在Servlet中使用Cookie通常涉及到以下几个步骤: 1. 创建Cookie对象,并为它设置名称和值。 2. 通过HttpServletResponse对象的addCookie方法将Cookie添加到HTTP响应中。 3. 当浏览器接收到这个响应后,会把Cookie...

Global site tag (gtag.js) - Google Analytics