Servlet Cookie 处理:
Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。
识别返回用户包括三个步骤:
1.服务器向浏览器发送一组Cookie,例如:姓名、年龄或识别号码等。
2.浏览器将Cookie保存在计算机上,以备将来使用。
3.当下一次浏览器向 Web 服务器发送任何请求时,浏览器会将这些Cookie信息发送给服务器,服务器将使用这些信息来识别用户。
Servlet Cookie 处理需要对中文进行编码和解码:
String str = java.net.URLEncoder.encode("中文"); //编码 String str = java.net.URLDecoder.decode("编码后的字符串"); // 解码
Cookie剖析:
Cookie通常设置在HTTP头信息中。设置 Cookie 的 Servlet 会发送如下的头信息:
HTTP/1.1 200 OK Date: Fri, 04 Feb 2000 21:03:38 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=w3cschool.cc Connection: close Content-Type: text/htmlSet-Cookie包含一个名称值对,一个GMT日期,一个路径和一个域。 名称和值会被 URL 编码。
expires是一个指令,指定Cookie过期的日期。
通过Servlet设置Cookie
通过Servlet设置Cookie包含三个步骤:
1.创建Cookie对象,可调用带有cookie名称和cookie值的构造函数,cookie名称和值都是字符串
Cookie cookie=new Cookie("key","value");
2.设置生命周期
cookie.setMaxAge(60*60*24);
3.发送Cookie到HTTP响应头
respond.addCookie(cookie);
实例:
package MyServlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;
import java.net.URLEncoder;
/**
* Created by 1192126986 on 2017/1/18.
*/
@WebServlet(name = "SetCookies")
public class SetCookies extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie名称为name的Cookie对象
Cookie nameCookie=new Cookie("name", URLEncoder.encode(request.getParameter("name"),"UTF-8"));
//创建Cookie名为url的Cookie对象
Cookie urlCookie=new Cookie("url",request.getParameter("url"));
//设置Cookie的过期日期为24小时后
nameCookie.setMaxAge(60*60*24);
urlCookie.setMaxAge(60*60*24);
//将Cookie添加到响应头
response.addCookie(nameCookie);
response.addCookie(urlCookie);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
String title = "设置 Cookie 实例";
String docType = "<!DOCTYPE html>\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>站点名:</b>:"
+ request.getParameter("name") + "\n</li>" +
" <li><b>站点 URL:</b>:"
+ request.getParameter("url") + "\n</li>" +
"</ul>\n" +
"</body></html>");
}
}
通过Servlet读取Cookie
步骤:
1.通过request.getCookies()方法获取Cookie数组对象
2.循环遍历Cookie数组,
3.输出Cookie的信息,如名称和值
package MyServlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;
import java.net.URLDecoder;
/**
* Created by 1192126986 on 2017/1/18.
*/
@WebServlet(name = "ReadCookie")
public class ReadCookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie=null;
Cookie[] cookies=null;
//获取Cookie数组
cookies=request.getCookies();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "Delete Cookie Example";
String docType = "<!DOCTYPE html>\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" );
if(cookies!=null){
out.println("<h2>Cookie名称和值</h2>");
for(int i=0;i<cookies.length;i++){
cookie=cookies[i];
//获取Cookie名称为name的Cookie
if(cookie.getName().compareTo("name")==0){
cookie.setMaxAge(0);//设置Cookie的过期日期
response.addCookie(cookie);//将Cookie添加到HTTP响应头
out.print("已删除的 cookie:" +
cookie.getName( ) + "<br/>");
}
//输出Cookie的名称
out.print("名称:"+cookie.getName()+",");
//输出Cookie的值
out.print("值:"+ URLDecoder.decode(cookie.getValue(),"utf-8")+"<br/>");
}
}
else{
out.println(
"<h2 class=\"tutheader\">No Cookie founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
通过Servlet删除Cookie:
步骤:
1.通过request.getCookies()方法获取Cookie数组
2.循环遍历Cookie数组,找到要删除的Cookie
3.将找到的Cookie设置过期日期为0秒
4.将该Cookie添加到响应头
package MyServlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;
/**
* Created by 1192126986 on 2017/1/18.
*/
@WebServlet(name = "DeleteCookies")
public class DeleteCookies extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie=null;
Cookie cookies[]=null;
cookies=request.getCookies();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "删除 Cookie 实例";
String docType = "<!DOCTYPE html>\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" );
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
cookie=cookies[i];
if(cookie.getName().compareTo("url")==0){
//删除Cookie只需过期日期设置为0
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("已删除的 cookie:" +
cookie.getName( ) + "<br/>");
}
out.print("名称:"+cookie.getName()+",");
out.print("值:"+cookie.getValue()+"<br/>");
}
}
else{
out.println(
"<h2 class=\"tutheader\">No Cookie founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
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>SetCookies</servlet-name>
<servlet-class>MyServlet.SetCookies</servlet-class>
</servlet>
<servlet>
<servlet-name>ReadServlet</servlet-name>
<servlet-class>MyServlet.ReadCookie</servlet-class>
</servlet>
<servlet>
<servlet-name>DeleteCookies</servlet-name>
<servlet-class>MyServlet.DeleteCookies</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SetCookies</servlet-name>
<url-pattern>/SetCookies</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ReadServlet</servlet-name>
<url-pattern>/ReadCookie</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DeleteCookies</servlet-name>
<url-pattern>/DeleteCookies</url-pattern>
</servlet-mapping>
</web-app>