// 文件路径 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");
}
}
}