Java Web程序设计 - 显示用户上次访问时间

题目要求

完成教材5.2小节中的动手实验“任务:显示用户上次访问时间”使用Cookie技术,实现显示用户上次的访问时间的功能。
要求首次访问的时候能显示如下:
第二次访问时能显示如下:

实现步骤

1.创建Servlet

在src包中右键新建一个名称为LastAccessServlet的Servlet类。

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

@WebServlet(name = "LastAccessServlet", urlPatterns = "/LastAccessServlet")
public class LastAccessServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        response.setContentType("text/html;charset=UTF-8");

        // 获取所有cookie
        Cookie[] cookies=request.getCookies();
        boolean flag=false;

        // 遍历cookie数组
        if(cookies.length > 0 && cookies != null){
            for (Cookie cookie : cookies){
                // 获取cookie的名称
                String name=cookie.getName();

                if("lastTime".equals(name)){
                    flag=true;

                    // 获取cookie的value时间
                    String value=cookie.getValue();
                    System.out.println("解码前: " + value);

                    // URL解码
                    value = URLDecoder.decode(value, "UTF-8");
                    System.out.println("解码后: " + value);
                    response.getWriter().write("欢迎回来,您上次访问时间为" + value);

                    // 设置cookie的value
                    Date date = new Date();
                    SimpleDateFormat timesdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    String str_time = timesdf.format(date);
                    System.out.println("编码前: " + str_time);

                    // URL解码
                    str_time = URLEncoder.encode(str_time, "UTF-8");
                    System.out.println("编码后: " + str_time);

                    // 设置cookie存活时间
                    //cookie.setMaxAge(60*60*24*30);
                    cookie.setMaxAge(-1);

                    // 加入当前cookie请求时间
                    response.addCookie(cookie);
                    break;
                }
            }

            // 如果cookies中没有时间,也就是没有访问过
            if(cookies == null || cookies.length == 0 || flag == false){
                // 设置cookie的value
                Date date = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

                String str_date = sdf.format(date);
                System.out.println("编码前: " + str_date);

                // URL编码
                str_date = URLEncoder.encode(str_date, "UTF-8");
                System.out.println("编码后: " + str_date);
                Cookie cookie = new Cookie("lastTime", str_date);

                // 设置cookie存活时间
                //cookie.setMaxAge(60*60*24*30);
                cookie.setMaxAge(-1);

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

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

2.查看运行效果

启动IDEA中的Tomcat服务器,调用LastAccessServlet方法,由于第一次访问,会在浏览器看到如下效果。

刷新访问地址,浏览器的显示结果如下。

实验结果

第一次访问看到如下结果

刷新后看到如下结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值