2021-04-21 08:34  阅读(113)
文章分类:Servlet 简单教程 文章标签:Servlet
©  原文作者:一点教程 原文地址:http://www.yiidian.com/servlet/

Cookie就是存储在客户端的一小段文本。

Cookie包含名称,单个值和可选属性,例如注释,路径和域限定符,有效时长和版本号等信息。

1 Cookie运行原理

默认情况下,每个请求都被视为一个新请求。在Cookie技术中,我们通过来自Servlet的响应添加Cookie。因此,Cookie存储在浏览器的缓存中。之后,如果用户发送了请求,则默认情况下将Cookie与请求一起发送过来。这样,服务器就可以识别用户为旧用户。

2021042108319_1.png

2 Cookie的分类

Servlet中有两种Cookie。

  1. 非永久性Cookie
  2. 永久性Cookie

2.1 非永久性Cookie

它仅对当前单个会话有效。每次用户关闭浏览器时都会将其删除。

2.2 永久性Cookie

它在多次会话中都有效。用户每次关闭浏览器时都不会将其删除。仅在用户注销将其删除。

3 Cookie的优势

  1. 维持状态的最简单技术。
  2. Cookies在客户端维护。

4 Cookie的特点

  1. 如果从浏览器禁用cookie,它将无法正常工作。
  2. Cookie对象中只能设置文本(字符串)信息。

5 Cookie的API

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

5.1 Cookie类的构造方法

构造方法 说明
Cookie() 构造一个Cookie。
Cookie(Stringname,Stringvalue) 构造包含指定名称和值的Cookie。

5.2 Cookie类的普通方法

方法名称 说明
publicvoidsetMaxAge(intexpiry) 设置Cookie的最长使用期限(以秒为单位)。
publicStringgetName() 返回Cookie的名称。创建后不能更改名称。
publicStringgetValue() 返回Cookie的值。
publicvoidsetName(Stringname) 更改Cookie的名称。
publicvoidsetValue(Stringvalue) 更改Cookie的值。

6 操作Cookie的方法

为了添加Cookie或获取Cookie的值,我们需要其他接口提供的一些方法。如下:

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

7 创建Cookie的方法

创建Cookie的示例:

    
    Cookie ck=new Cookie("user","yiidian");//创建Cookie对象
    response.addCookie(ck);//把Cookie添加到响应中 

8 删除Cookie的方法

删除cookie的代码示例,它主要用于注销或注销用户:

    
    Cookie ck=new Cookie("user","");//删除指定name的Cookie值
    ck.setMaxAge(0);//把时长改为0  
    response.addCookie(ck);//把Cookie添加到响应中

9 读取所有Cookie

获取所有Cookie的简单示例:

    
    Cookie ck[]=request.getCookies();  
    for(int i=0;i<ck.length;i++){  
       out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//打印输出Cookie的name和value  
    }  

10 Cookie的案例

在下面示例中,我们将用户名存储在Cookie对象中,并在另一个Servlet中获取这些Cookie数据。因为每个用户的Cookie数据是存在浏览器中的。所以,如果您使用不同的浏览器,则会得到不同的Cookie值。

10.1 编写页面

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>一点教程网-Cookie的案例</title>
        <meta http-equiv="content-type" content="text/html" charset="UTF-8">
    </head>
    <body>
    <form action="servlet1" method="post">
        用户名:<input type="text" name="userName"/><br/>
        <input type="submit" value="提交"/>
    </form>
    </body>
    </html>
    

10.2 编写FirstServlet

    
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class FirstServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
    
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                String n=request.getParameter("userName");
                out.print("欢迎 "+n);
    
                Cookie ck=new Cookie("uname",n);//创建Cookie对象
                response.addCookie(ck);//把Cookie添加到响应
    
                //创建提交按钮
                out.print("<form action='servlet2'>");
                out.print("<input type='submit' value='提交'>");
                out.print("</form>");
    
                out.close();
    
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

10.3 编写SecondServlet

    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class SecondServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
    
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                Cookie ck[]=request.getCookies();
                for(Cookie c:ck){
                    if(c.getName().equals("uname")){
                        out.print("你好 "+c.getValue());
                    }
                }
    
                out.close();
    
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

10.4 配置web.xml

    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>FirstServlet</servlet-name>
            <servlet-class>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>SecondServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>SecondServlet</servlet-name>
            <url-pattern>/servlet2</url-pattern>
        </servlet-mapping>
    
    </web-app>

10.5 运行测试

2021042108315_2.png

点击提交,看到下面效果:

2021042108310_3.png再次点击提交,效果如下:

202104210834_4.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Servlet中的Cookie使用
上一篇
什么是会话跟踪
下一篇
使用Cookie完成登录注销案例