【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>
原文地址:https://www.cnblogs.com/xkxf/p/6962961.html