A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fhd 初级黑马   /  2019-9-12 16:31  /  1018 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[Java] 纯文本查看 复制代码
package cn.itcast.web.cookie;

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.net.URI;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
    Cookie会话案例
    案例:记住上一次访问时间
		1. 需求:
			1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
			2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
 */
@WebServlet("/cookieTest")
public class CookieTest extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码
        response.setContentType("text/html;charset=utf-8");
        //获取Cookies数组
        Cookie[] c = request.getCookies();
        //判断Cookie对象数组中是否存在所我们需要的Cookie对象   false为不存在
        boolean flag = false;

        //判断Cookie对象数组是否存在数据
        if (c != null && c.length > 0){
            //遍历Cookie数组
            for (Cookie cookie : c) {
                //得到Cookie对象中的Name值(键)
                String name = cookie.getName();
                //判断name是否为我们所要的 lastTime
                if (name.equals("lastTime")){
                    //若满足条件则存在我们所要Cookie对象
                    flag = true;
                    //得到cookie的值    值为一个时间字符串
                    String value = cookie.getValue();
                    //URLDecoder解码
                    String d = URLDecoder.decode(value, "utf-8");
                    //输出到页面上
                    response.getWriter().write("<h1>欢迎回来,您上次访问时间为:"+d+"</h1>");

                    //创建一个时间对象 得到当前时间的毫秒值
                    Date date = new Date();
                    //给SimpleDateFormat对象一个时间格式
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    //格式化SimpleDateFormat的时间
                    String format = sdf.format(date);
                    //URLEncoder编码
                    String s = URLEncoder.encode(format, "utf-8");

                    //将当前时间存储到Cookie中
                    cookie.setValue(s);
                    //设置Cookie的存活时间 单位秒
                    cookie.setMaxAge(60*60);

                    response.addCookie(cookie);
                    //退出循环
                    break;
                }
            }
        }

        //若Cookie对象数组不存在我们所要的Cookie 则创建Cookie
        if (c == null || c.length == 0 || flag == false){
            Date d = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String format = sdf.format(d);
            //URLEncoder编码
            String s = URLEncoder.encode(format, "utf-8");
            Cookie cookie = new Cookie("lastTime",s);

            response.addCookie(cookie);
            response.getWriter().write("您好,欢迎您首次访问");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马