Servlet Cookie

// 文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestServletCookie.java
package com.test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServletCookie {

    public void testfun(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置返回响应内容类型及编码,否则返回输出中文会乱码
        response.setContentType("text/html;charset=UTF-8");
        // Servlet Cookie 处理需要对中文进行编码与解码,方法如下
        String enStr = java.net.URLEncoder.encode("测试中文", "UTF-8"); // 编码
        String deStr = java.net.URLDecoder.decode(enStr, "UTF-8"); // 解码
        
        // 创建新 cookie 对象 并赋键值对,键值即该 cookie 名称,这里值赋中文值,需要先编码
        Cookie cookie = new Cookie("testKey",enStr);
        // 设置 cookie 适用的域名,例如 runoob.com,这里是 localhost(不用加:8080端口号)
        cookie.setDomain("localhost");
        // 获取 cookie 适用的域,例如 runoob.com
        cookie.getDomain();
        // 设置 cookie 过期的时间(以传给客户端为起始,以秒为单位)。如果不设置,cookie 只会在当前 session 会话中持续有效。或者cookie.setMaxAge(0) 即表示删除这个cookie
        cookie.setMaxAge(3600 * 24);
        // 返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
        cookie.getMaxAge();
        // 返回 cookie 的名称。名称在创建后不能改变。
        cookie.getName();
        // 设置 cookie 的值,除了创建 cookie 对象时赋值,setValue() 方法也可赋值。赋的值非中文就不用转码了
        cookie.setValue("newTestVal");
        // 获取 cookie 的值
        cookie.getValue();
        // 设置 cookie 适用的路径uri。浏览器在发该 cookie 消息给服务器之前,请求的 url 中必须存在一个指定 uri 路径。这个比较是通过将 path 属性值与请求的 url 从头开始逐字符串比较完成的。如果字符匹配,则发送该 cookie 消息。如果不指定路径,与当前页面相同目录(uri)下的(包括子目录下的)所有 url 浏览器都会返回 cookie。
        cookie.setPath("/HelloWorld/TomcatTest/TestServlet");// 此时浏览器完整访问路径为 http://localhost:8080/HelloWorld/TomcatTest/TestServlet
        // 获取 cookie 适用的路径uri。
        cookie.getPath();
        // 设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
        cookie.setSecure(false);
        // 设置该 cookie 在浏览器中不能通过 Javascript 的 document.cookie 属性访问
        cookie.setHttpOnly(true);
        // 设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
        cookie.setComment("testNotes");
        // 获取 cookie 的注释,如果 cookie 没有注释则返回 null。
        cookie.getComment();
        
        // 输出 cookie值,中文的话需要解码
        response.getWriter().append("<br/>创建并发送给浏览器的 cookie : testKey 值为 : " + java.net.URLDecoder.decode(cookie.getValue(), "UTF-8"));
        
        // 发送 Cookie 到 HTTP 响应头,即将 cookie 传到浏览器
        response.addCookie(cookie);
        
        
        // 获取览器发送的与当前页面 url 相关的 Cookie 的数组
        Cookie request_cookie[] = request.getCookies();
        if( request_cookie != null ){
            // 遍历获取每一个浏览器发送的 cookie
            for (int i = 0; i < request_cookie.length; i++){
                cookie = request_cookie[i];
                // 对比找到指定名称的 cookie
                if((cookie.getName( )).compareTo("delCookieName") == 0 ){
                    // 然后删除
                    cookie.setMaxAge(0);
                    response.addCookie(cookie);
                }else {
                    response.getWriter().append("<br/>浏览器上传 cookie 名称 : " + cookie.getName() + " 值为 : " + cookie.getValue());
                }
            }
        }else{
            response.getWriter().append("<br/>No Cookie founds");
        }
    }
}

 

posted @ 2019-09-08 15:36  风吹屁股凉冰冰  阅读(219)  评论(0编辑  收藏  举报