Cookie是一小段信息,可在多个客户端请求之间保留。Cookie具有名称,单个值和可选属性,例如注释,路径和域限定符,最长期限和版本号。

默认情况下,每个请求都被视为一个新请求。 在cookie技术中,我们通过来向servlet的响应添加cookie。 因此,cookie信息存储在浏览器的缓存中。 之后,如果用户发送了请求,则默认情况下会在请求中添加cookie信息。 因此,我们通过cookie信息来识别是否为旧用户。

servlet中按过期时间可以分为两种cookie:

  • 非永久性Cookie
  • 永久性Cookie

非永久性Cookie
它仅对单个会话有效,每次用户关闭浏览器时都会将其删除。

永久性Cookie
对多个会话有效,用户每次关闭浏览器时都不会将其删除,仅在用户注销或注销时将Cookie信息删除。

3. Cookies的优点

  • 维持状态最简单技术。
  • Cookies在客户端维护。

4. Cookies的缺点

  • 如果浏览器禁用cookie,它将无法正常工作。
  • Cookie对象中只能设置文本信息。

注意:Gmail使用cookie技术进行登录。 如果您禁用Cookie,Gmail将无法使用。

javax.servlet.http.Cookie类提供使用cookie的函数功能,它为cookie提供了许多有用的方法。

Cookie类的构造方法

编号 构造方法 描述
1 Cookie() 构造一个cookie。
2 Cookie(String name, String value) 构造具有指定名称和值的cookie。

Cookie类的实用方法

下面列出了Cookie类的一些常用方法。

编号 构造方法 描述
1 public void setMaxAge(int expiry) 设置Cookie的最长使用期限(即过期时间,以秒为单位)。
2 public String getName() 返回cookie的名称,创建后不能更改名称。
3 public String getValue() 返回cookie的值。
4 public void setName(String name) 更改cookie的名称。
5 public void setValue(String value) 更改cookie的值。

使用Cookies所需的其他方法

要添加cookie或从cookie中获取值,需要其他接口提供的一些方法。这些方法是:

  • public void addCookie(Cookie ck) - HttpServletResponse接口的方法用于在响应对象中添加cookie。
  • public Cookie[] getCookies() - HttpServletRequest接口的方法用于读取从浏览器返回所有cookie。

如何创建Cookie?

下面是创建cookie的简单代码:

Cookie ck=new Cookie("user","max su");//creating cookie object  
response.addCookie(ck);//adding cookie in the response

如何删除Cookie?
下面是用于删除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?
下面是用于获取cookie的简单代码,它主要用于读取用户登录信息。

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对象中,并在另一个servlet中访问此用户名。 众所周知,会话可以识别不同的用户。 因此,如果从具有不同值的浏览器中访问Web应用,则会获得不同的值。

Servlet Cookie实例

打开Eclipse,创建一个动态web项目:ServletCookie,完整项目结构如下:

文件:index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
    <form action="servlet1" method="post">
        用户名:<input type="text" name="username" /><br /> 密码:<input type="password"
            name="passwd" /><br /> <input type="submit" value="登录" />
    </form>
</body>
</html>

文件:FirstServlet.java

package com.xntutor.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            response.setContentType("text/html;charset=utf-8");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();

            String username = request.getParameter("username");
            String passwd = request.getParameter("passwd");

            if (username.equals("maxsu") && passwd.equals("passwd123")) {
                out.print("你好, " + username);

                Cookie ck = new Cookie("uname", username);// creating cookie object
                response.addCookie(ck);// adding cookie in the response
                // creating submit button
                out.print("<form action='servlet2' method='post'>");
                out.print("<input type='submit' value='进入下一页'>");
                out.print("</form>");
            }else {
                out.print("<span color='red'>用户名或密码错误!</span>");
            }
            out.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

文件:SecondServlet.java

package com.xntutor.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SecondServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            response.setContentType("text/html;charset=utf-8");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();

            Cookie ck[] = request.getCookies();
            out.print("你好, " + ck[0].getValue());

            out.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

文件:web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>ServletCookie</display-name>
    <servlet>
        <servlet-name>firstServlet</servlet-name>
        <servlet-class>com.xntutor.servlet.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.xntutor.servlet.SecondServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>secondServlet</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

启动Tomcat服务器,打开浏览器访问下面URL:

Servlet Cookie实例

Servlet Cookie实例2

Servlet Cookie实例3