java代码显示用户触摸持续的时间_JavaWeb——实现记录并显示用户上次访问的时间...

需求分析:

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。

效果图如下

当第一次访问时

72e79554f4b0b5e10d5601f1eba4eb6a.png

第二次在访问时

ad81e6be0bc682478d40bd82f28d0465.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值