📜  Servlet – Cookie

📅  最后修改于: 2022-05-13 01:55:21.096000             🧑  作者: Mango

Servlet – Cookie

Cookie 是在多次请求期间以键值对格式存储到客户端浏览器的文本信息。它是会话跟踪中的状态管理技术之一。基本上,服务器将每个客户端请求视为一个新请求,因此使用 cookie 来避免这种情况。当客户端生成请求时,服务器会使用具有 id 的 cookie 给出响应,然后将其存储在客户端的浏览器中。因此,如果客户端生成第二个请求,则具有匹配 id 的 cookie 也会发送到服务器。服务器将获取 cookie id,如果找到它会将其视为旧请求,否则该请求将被视为新请求。

客户端-服务器请求-响应模型中的 Cookie 创建

在Java中使用 Cookie

  • 为了在Java中使用 cookie,请使用javax.servlet.http包中的 Cookie 类。
  • 要制作 cookie,请创建 Cookie 类的对象并传递名称及其值。
  • 要在响应中添加 cookie,请使用 HttpServletResponse 接口的 addCookie(Cookie) 方法。
  • 要获取 cookie,请使用请求接口的 getCookies() 方法。

Cookies 中的方法

  • clone():覆盖标准Java.lang.Object.clone 方法以返回此 Cookie 的副本。
  • getComment():返回描述此 cookie 用途的注释,如果 cookie 没有注释,则返回 null。
  • getDomain():获取此 Cookie 的域名。
  • getMaxAge():获取此 Cookie 的最大年龄(以秒为单位)。
  • getName():返回 cookie 的名称。
  • getPath():返回浏览器返回此 cookie 的服务器上的路径。
  • getSecure():如果浏览器仅通过安全协议发送 cookie,则返回 true;如果浏览器可以使用任何协议发送 cookie,则返回 false。
  • getValue():获取此 Cookie 的当前值。
  • getVersion():返回此 cookie 所遵循的协议版本。
  • setValue(String newValue):为这个 Cookie 分配一个新值。
  • setVersion(int v):设置此 Cookie 所遵循的 cookie 协议的版本。

例子

研究所的名称使用 Cookie 从 Servlet 1 传递给 Servlet 2。

HTML


    
        TODO supply a title
        
        
        
          
        
        
    
    
        
            
                           
                
            

Enter your institute's name

                         
            
                                      

            
            
            
        
    


Java
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
  
public class Servlet1 extends HttpServlet {
  
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.println("");
            out.println("");
            out.println("");
            out.println("Servlet Servlet1");
            out.println("");
            out.println("");
  
            // Creating a string to store the name
            String name = request.getParameter("name");
            out.println("

Hello, welcome to " + name                         + "

");             out.println(                 "

Go to Servlet2

");             // Creating a cookie             Cookie c = new Cookie("user_name", name);             response.addCookie(c);                out.println("");             out.println("");         }     } }


Java
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
  
public class Servlet2 extends HttpServlet {
  
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.println("");
            out.println("");
            out.println("");
            out.println("Servlet Servlet2");
            out.println("");
            out.println("");
  
            // Fetching cookies(if found more than one)
            // Array of Cookies
            Cookie[] cookies = request.getCookies();
            boolean f = false;
            String name = "";
            if (cookies == null) {
                out.println(
                    "

You are new user, go to home page and submit your institute's name");                 return;             }             else {                 for (Cookie c : cookies) {                     String tname = c.getName();                     if (tname.equals("user_name")) {                         f = true;                         name = c.getValue();                     }                 }             }             if (f) {                 out.println("

Hello, welcome back "                             + name + "

");                 out.println("

Thank you!!

");             }             else {                 out.println(                     "

You are new user, go to home page and submit your institute's name");             }                out.println("");             out.println("");         }     } }



索引.html 输出

Java

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
  
public class Servlet1 extends HttpServlet {
  
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.println("");
            out.println("");
            out.println("");
            out.println("Servlet Servlet1");
            out.println("");
            out.println("");
  
            // Creating a string to store the name
            String name = request.getParameter("name");
            out.println("

Hello, welcome to " + name                         + "

");             out.println(                 "

Go to Servlet2

");             // Creating a cookie             Cookie c = new Cookie("user_name", name);             response.addCookie(c);                out.println("");             out.println("");         }     } }

Servlet1.java 输出

Java

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
  
public class Servlet2 extends HttpServlet {
  
    protected void
    processRequest(HttpServletRequest request,
                   HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.println("");
            out.println("");
            out.println("");
            out.println("Servlet Servlet2");
            out.println("");
            out.println("");
  
            // Fetching cookies(if found more than one)
            // Array of Cookies
            Cookie[] cookies = request.getCookies();
            boolean f = false;
            String name = "";
            if (cookies == null) {
                out.println(
                    "

You are new user, go to home page and submit your institute's name");                 return;             }             else {                 for (Cookie c : cookies) {                     String tname = c.getName();                     if (tname.equals("user_name")) {                         f = true;                         name = c.getValue();                     }                 }             }             if (f) {                 out.println("

Hello, welcome back "                             + name + "

");                 out.println("

Thank you!!

");             }             else {                 out.println(                     "

You are new user, go to home page and submit your institute's name");             }                out.println("");             out.println("");         }     } }

Servlet2.java 输出

如果直接在隐身模式下运行 servlet2 链接,则无法识别 cookie,并将其视为新用户。

Servlet2.java 以隐身模式输出

饼干的缺点

  • 空格字符和图像被视为无效。
  • 安全性较低。