题目要求
完成教材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方法,由于第一次访问,会在浏览器看到如下效果。
刷新访问地址,浏览器的显示结果如下。
实验结果
第一次访问看到如下结果
刷新后看到如下结果