zoukankan      html  css  js  c++  java
  • 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>
    " +
                    "<html>
    " +
                    "<head>
    " +
                    "<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会话

  • 相关阅读:
    用户调查报告
    beta-2阶段组员贡献分分配
    beta阶段140字评论
    11月9号站立会议
    BETA预发布演示视频
    第八周PSP&进度条
    11月8号站立会议
    栈——C语言模拟
    读《弗洛伊德:作家与白日梦》
    《爱的艺术》爱的误解——对象,状态
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/9958746.html
Copyright © 2011-2022 走看看