一、记录上一次用户访问时间
1.1 需求
(1)访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
(2)如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串。
1.2 分析
1 可以采用Cookie来完成
2 在服务器中的Servlet判断是否有一个名为lastVisit的Cookie
(1)有:不是第一次访问
响应数据:欢迎回来,您上次访问时间为:2022年09月07日 18:41:08
将Cookie添加到respose对象中去
(2)没有:是第一次访问
响应数据:欢迎,这是您第一次访问
将Cookie添加到respose对象中去
1.3 代码实现
@WebServlet(name = "CookiePracticeServlet", value = "/cookiePractice")
public class CookiePracticeServlet extends HttpServlet {
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码和响应消息体的数据格式以及编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取cookie
Cookie[] cookies = request.getCookies();
//表示cookie是第一次访问
boolean flag = false;
//遍历cookie
for (Cookie cookie : cookies) {
//判断我们存的cookie名和得到的Cookie名是否一致
if ("lastVisit".equals(cookie.getName())) {
//表示cookie不是第一次访问
flag = true;
Date date = new Date();
String format = sdf.format(date);
//对日期进行编码
format = URLEncoder.encode(format, "utf-8");
cookie.setValue(format);
//将cookie添加到response对象中
response.addCookie(cookie);
String value = cookie.getValue();
//对日期进行解码
value = URLDecoder.decode(value, "utf-8");
response.getWriter().write("<h1>欢迎回来" + cookie.getName() + ",上次访问的时间为" + value + "</h1>");
break;
}
}
if (flag == false) {
Date date = new Date();
String format = sdf.format(date);
//对日期进行编码
format = URLEncoder.encode(format, "utf-8");
//第一次则创建cookie
Cookie cookie = new Cookie("lastVisit", format);
//将cookie添加到response对象中
response.addCookie(cookie);
response.getWriter().write("<h1>欢迎," + cookie.getName() + "这是您第一次访问</h1>");
}
}
}
1.4 实现效果图
第一次访问
不是首次访问
1.5 总结
Cookie是存放在浏览器端的会话技术,实现原理是:浏览器向客户端发送
HTTP请求,服务器端接收到请求后会对请求做出响应,会在HTTP响应头里
设置set-Cookie,当下一次访问的时候会在在请求头中带上Cookie信息。本
次练习主要用到了Cookie的存值取值、以及对字符串进行编码和解码的两个
方法,有不足的地方请大家多多批评指教。