需求分析:
1. 可以采用Cookie来完成
2. 在服务器中的Servlet判断是否有该用户的cookie
有:不是第一次访问
1. 响应数据:欢迎回来,用户的名字,上次访问时间为yyyy年MM月dd日 HH:mm:ss
2. 写回Cookie:用户名=yyyy年MM月dd日 HH:mm:ss
没有:是第一次访问
1. 响应数据:您好,欢迎您首次访问
2. 写回Cookie:用户名=yyyy年MM月dd日 HH:mm:ss
步骤:
设计一个工具类,传递用户名,用于判断并获取访问的时间,返回对象ResultInfo(里面包括是否第一次访问[用boolean判断]、以及[用String来表示]) public class Interview_time {
public ResultInfo Interview(HttpServletRequest request, HttpServletResponse response,String id) throws IOException {
//设置相应的消息体的数据格式以及编码
response.setContentType("text/html;charset=utf-8");
//创建对象
ResultInfo info = new ResultInfo();
//获取所有的Cookie
Cookie[] cookies = request.getCookies();
boolean flag = false;//没有cookie时为false
try{
//遍历cookie数组
if(cookies!=null&&cookies.length>0){
for(Cookie cookie:cookies){
//获取cookie的名称
String cookie_id = cookie.getName();
System.out.println("cookie_id="+cookie_id);
//判断名称是否为该用户的ID
if(id.equals(cookie_id)){
//有该Cookie,不是第一次访问
flag = true;
//设置Cookie的value
//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie
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.setValue(str_date);
//设置Cookie的存活时间
cookie.setMaxAge(60*60*24*30);//一个月
response.addCookie(cookie);
//响应数据
//获取Cookie的value,时间
String value = cookie.getValue();
//解码
value = URLDecoder.decode(value,"utf-8");
System.out.println("解码后:"+value);
//将数据写入对象中
info.setFlag(flag);
info.setErrorMsg(value);
break;
}
}
}
if(cookies==null||cookies.length==0||flag==false){
//没有,第一次访问
//设置Cookie的value
//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie
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);
str_date = URLEncoder.encode(str_date,"utf-8");
System.out.println("编码后:"+str_date);
Cookie cookie = new Cookie(id,str_date);
//设置cookie的存活时间
cookie.setMaxAge(60 * 60 * 24 * 30);//一个月
response.addCookie(cookie);
info.setFlag(flag);
info.setErrorMsg("none");
}
}catch (NullPointerException e){
e.printStackTrace();
info.setErrorMsg("no_display");
info.setFlag(true);
}
return info;
}
}
2.创建一个简易的登录页面用于获取用户然后跳转显示其上次访问时间
主页面
提交
3.创建一个servlet用于响应数据
@WebServlet("/interviewTimeServlet")
public class InterviewTimeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取用户名
String username =request.getParameter("username");
//创建对象,并调用方法来查询访问时间
ResultInfo info = new ResultInfo();
info = new Interview_time().Interview(request,response,username);
//响应数据
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),info);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
至此便完成了该功能,当然要是输入中文的话会报java.lang.IllegalArgumentException。
效果图如下
当第一次访问时
第二次在访问时