首页 > 代码库 > 【Head First Servlets and JSP】笔记13:session & cookie

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

session的接口

杀死会话

cookie的性质

cookie的接口

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

 简单的定制cookie示例

 

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

 技术分享

 

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

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

 技术分享

技术分享

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

 技术分享

  • 在代码中对具体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语句 //这里有误

session的后续:

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

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

 

6、 简单的定制cookie示例

通常,我的习惯是先写一个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="http://www.mamicode.com/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;                }            }        }    }}

 

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