2021-04-21 08:34  阅读(83)
文章分类:Servlet 简单教程 文章标签:Servlet
©  原文作者:一点教程 原文地址:http://www.yiidian.com/servlet/

1 HttpSession会话跟踪原理

服务器会为每一个用户创建一个独立的HttpSession对象。

  1. 当用户第一次访问Servlet时,服务器端会给用户创建一个独立的HttpSession对象,并且生成一个Session ID,这个Session ID在响应浏览器的时候会被装进Cookie中,从而被保存到浏览器中。
  2. 当用户再一次访问Servlet时,请求中会携带着Cookie中的Session ID去访问
  3. 服务器会根据这个Session ID去查看是否有对应的HttpSession对象。有就拿出来使用(服务器会认为用户已经访问过);没有就创建一个新的HttpSession (服务器这时会认为用户第一次访问)

20210421083113_1.png2 如何获得HttpSession对象

HttpServletRequest接口提供了两种方法来获取HttpSession的对象:

方法名称 说明
publicHttpSessiongetSession() 返回与此请求关联的当前会话,或者如果该请求没有会话,则创建一个。
publicHttpSessiongetSession(booleancreate) 返回与此请求关联的当前HttpSession,或者,如果没有当前会话且create为true,则返回一个新会话。

3 HttpSession常用方法

方法名称 说明
publicStringgetId() 返回包含唯一标识符值的字符串。
publiclonggetCreationTime() 返回创建此会话的时间,以1970年1月1日0点以来的格林威治标准时间(为毫秒数单位)。
publiclonggetLastAccessedTime() 返回客户端最后一次发送与此会话相关联的请求的时间,以1970年1月1日0点以来的格林威治标准时间(为毫秒数单位)。
publicvoidinvalidate() 使此会话无效,把绑定到HttpSession的所有对象解绑。

4 HttpSession的案例

在下面的示例中,我们在一个Servlet的会话范围内设置属性,并从另一个Servlet的会话范围获取该值。为了在会话范围内设置属性,我们使用了HttpSession接口的setAttribute()方法,并且为了获取属性,我们使用了getAttribute方法。

4.1 编写页面

index.jsp:

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>一点教程网-HttpSession案例</title>
    </head>
    <body>
    <form action="servlet1">
        用户名:<input type="text" name="userName"/><br/>
        <input type="submit" value="提交"/>
    </form>
    </body>
    </html>

4.2 编写FirstServlet

FirstServlet:

    
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class FirstServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
    
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                String n=request.getParameter("userName");
                out.print("欢迎 "+n);
    
                HttpSession session=request.getSession();
                session.setAttribute("uname",n);
    
                out.print("<a href='servlet2'>访问</a>");
    
                out.close();
    
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

4.3 编写SecondServlet

SecondServlet:

    
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class SecondServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
    
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                HttpSession session=request.getSession(false);
                String n=(String)session.getAttribute("uname");
                out.print("你好 "+n);
    
                out.close();
    
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

4.4 配置web.xml

web.xml:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>FirstServlet</servlet-name>
            <servlet-class>FirstServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>FirstServlet</servlet-name>
            <url-pattern>/servlet1</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>SecondServlet</servlet-name>
            <servlet-class>SecondServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>SecondServlet</servlet-name>
            <url-pattern>/servlet2</url-pattern>
        </servlet-mapping>
    
    </web-app>

4.5 运行测试

2021042108319_2.png

点击“提交”,如下:

2021042108313_3.png

点击“访问”,如下:

202104210836_4.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Servlet中HttpSession使用
上一篇
Servlet中实现URL重写
下一篇
使用Session完成登录注销案例