Servlet会话跟踪和Cookies及HttpSession会话

会话只是指一段指定的时间间隔。

会话跟踪是维护用户状态(数据)的一种方式。它也被称为servlet中的会话管理。

Http协议是一个无状态的,所以我们需要使用会话跟踪技术来维护用户状态。 每次用户请求服务器时,服务器将请求视为新请求。 所以需要保持一个用户的状态来识别特定的用户。

HTTP是无状态的,这意味着每个请求被认为是新的请求。

为什么使用会话跟踪?

  • 因为需要用于识别特定的用户。

会话跟踪技术

会话跟踪中使用的技术有四种:

  • Cookies
  • 隐藏表格域
  • 网址重写
  • HttpSession

 

默认情况下,每个请求都被视为新的请求。在cookie技术中,servlet响应可以添加cookie。 所以cookie存储在浏览器的缓存中。之后,如果用户发出请求,默认情况下会带上cookie。 因此,我们就可以知道用户旧用户。

非持久性cookie

  • 它仅适用于单个会话。当用户关闭浏览器时都会删除它。

持久性Cookie

  • 它对多个会话有效。当用户关闭浏览器时也不会删除它。只有在用户注销或注销时才被删除。

javax.servlet.http.Cookie类提供了使用Cookie的功能。它为Cookie提供了很多有用的方法

Cookie ck=new Cookie("user","maxsu jaiswal");//creating cookie object  
response.addCookie(ck);//adding cookie in the response

如何删除Cookie?

 

Cookie ck=new Cookie("user","");//deleting value of cookie  
ck.setMaxAge(0);//changing the maximum age to 0 seconds  
response.addCookie(ck);//adding cookie in the response

 

Cookie ck[]=request.getCookies();  
for(int i=0;i<ck.length;i++){  
    out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//printing name and value of cookie  
}

 

Cookie.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cookie In Servlet</title>
</head>
<body>
 <div style="text-align: center">
     <form action="seevlet1" method="post">
        用户名:<input type="text" name="username" value="tanlei"/>
              <input type="submit" value="提交"/>
     </form>
 </div>
</body>
</html>

 

FirstServlet.java

package com.tanlei.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class FirstServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();

        String name = req.getParameter("username");
        String username = new String(name.getBytes("ISO-8859-1"),"utf-8");

        out.print("<!DOCTYPE html>\r\n" +
                "<html>\r\n" +
                "<head>\r\n" +
                "<meta charset=\"UTF-8\"><body>");
        out.print("欢迎您, " + username);

        Cookie cookie=new Cookie("uname",username);
        resp.addCookie(cookie);

        out.print("<form action='servlet2' method='post'>");
        out.print("<p>Cookies已在浏览器中设置,现在跳转到第二个Servlet中读取Cookies的值。</p>");
        out.print("<input type='submit' value='提交到第二个Servlet'>");
        out.print("</form>");

        out.close();
       }catch (Exception e){
           System.out.println(e);
       }
    }
}

 

SecondServlet.java

package com.tanlei.cookie;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class SecondServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            Cookie ck[] = request.getCookies();
            out.print("Hello " + ck[0].getValue());
            out.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

 

 

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_4_0.xsd"
         version="4.0">
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>com.tanlei.cookie.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>com.tanlei.cookie.SecondServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SecondServlet</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
</web-app>

 

HttpSession会话

 

posted @ 2018-11-14 16:40  言西早石头侠  阅读(213)  评论(0编辑  收藏  举报