• 【Head First Servlets and JSP】笔记13:session & cookie


    session的接口

    杀死会话

    cookie的性质

    cookie的接口

     再总结——cookie、session、JSESSIONID的前世今生

     简单的定制cookie示例

    1、session的接口,配合一些代码来理解。

     

    2、杀死会话——杀死的含义是使session无效化(在JVM中清除??)。

    • 立刻杀死,已知方式有两种,

     

    • 在DD中设定“默认期限”

     

    • 在代码中对具体session设定“期限”(不过,如果你设置为-1的话,session将永远不会过期,因为这个时间永远到不了,,)

    3、cookie的特性

    4、cookie的接口

    从客户请求得到cookie——稍微现代点的方法是这样的:

            Cookie[] cookies = request.getCookies();
            if(cookies != null){
                for(Cookie cookie : cookies){
                    if(cookie.getName().equals("JSESSIONID")){
                        System.out.println("JSESSIONID="+cookie.getValue());
                    }
                    cookie.setMaxAge(0);
                    response.addCookie(cookie);
                }
            }

    5、 再总结——cookie、session的前世今生

    • cookie之前世今生。

    cookie的产生:客户端向服务器发送request,服务器返回response并set-cookie

    就这样客户端中就存在一个对应cookie了,

    cookie的后续:之后客户端每次向服务器发送request,都会携带这个cookie

    本质上,cookie就是客户端和服务端交换一小段信息。

    • session的前世今生

    session的产生:通常是伴随着一个getSession语句 //这里可能误,不论有没手动getSession,服务器是一定会set-cookie的,也就是说JSESSIONID一定会有,而有没有对应的session就不知道了。

    session的后续:

    1. 我们用session来管理会话、存储信息
    2. 我们必须通过JSESSIONID来查找访问对应的session
    3. 我们必须在适当的时候杀死session

    本质上,session就是存在于服务端JVM中的一个对象。

     JSESSIONID的前世今生

    可以把每一次submit都想象成完成了一次反射。

    第一次submit

    第二次到第n次...

    6、 简单的定制cookie示例——输入姓名,输出 Hello+姓名

    通常,我的习惯是先写一个hello程序跑通一下环境。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="US-ASCII">
        <title>Home Page</title>
    </head>
    <body>
    
    <form action="CookieTest.do" method="post">
    
        Username: <input type="text" name="username">
        
        <input type="submit" value="submit">
    </form>
    </body>
    </html>
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
             version="2.4">
    
        <servlet>
            <servlet-name>CookieTest</servlet-name>
            <servlet-class>com.example.web.CookieTest</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>CookieTest</servlet-name>
            <url-pattern>/CookieTest.do</url-pattern>
        </servlet-mapping>
    
    </web-app>
    package com.example.web;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    public class CookieTest extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html");
            resp.getWriter().println("hello");
        }
    }

     成功跑出来之后开始写代码~

    package com.example.web;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    public class CookieTest extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html");
    
            String name = req.getParameter("username");
            Cookie cookie = new Cookie("username", name);
            cookie.setMaxAge(30*60); // 如果不设置的话,cookies的生存期限默认为“关闭浏览器为止”
            resp.addCookie(cookie);
    
            RequestDispatcher view = req.getRequestDispatcher("result.jsp");
            view.forward(req, resp);
        }
    }
    result.jsp
    <html>
        <body>
            <a href="checkcookie.do">click here</a>
        </body>
    </html>
    checkcookie.do
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
             version="2.4">
    
        <servlet>
            <servlet-name>CookieTest</servlet-name>
            <servlet-class>com.example.web.CookieTest</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>CookieTest</servlet-name>
            <url-pattern>/CookieTest.do</url-pattern>
        </servlet-mapping>
        
        <servlet>
            <servlet-name>checkcookie</servlet-name>
            <servlet-class>com.example.web.CheckCookie</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>checkcookie</servlet-name>
            <url-pattern>/checkcookie.do</url-pattern>
        </servlet-mapping>
    
    </web-app>
    package com.example.web;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class CheckCookie extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html");
            PrintWriter pw = resp.getWriter();
    
            Cookie[] cookies = req.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals("username")) {
                        pw.println("Hello " + cookie.getValue());
                        break;
                    }
                }
            }
        }
    }


    <form action="CookieTest.do" method="post">
     <a href="checkcookie.do">click here</a>
  • 相关阅读:
    图像控件 ImageControl
    日期条控件 DateFieldControl
    日期选择器和日期条控件 DateChooserAndDateFieldControls
    计数器控件实例 NumericStepper
    树结构控件实例 TreeControl
    vue2.0leaflet
    关于工具类中@Autowired注入为NULL的问题记录
    zabbix_agentd重装后启动时IPC和共享内存段问题
    rsync如何不指定密码文件
    MySQL5.7 JSON类型及其相关函数的学习
  • 原文地址:https://www.cnblogs.com/xkxf/p/6962961.html
Copyright © 2020-2023  润新知