servlet_13 Cookie处理

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/html
Set-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>




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值