014.采用Cookie和Session完成,登录时间不能存储在cookie中(判断是不是第一次登陆)
package com.session.homework; import cn.hutool.core.date.DateUtil; import com.sun.org.apache.bcel.internal.generic.NEW; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; @WebServlet("/sessionHomework") public class SessionHomework extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /** * 1.解决中文乱码 */ req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); /** * 1.使用Hutool工具类获取当前时间 * 2.将时间格式化成对应的yyyy年MM月dd日 HH时mm分ss秒 * 3.使用utf-8编码 timeFormatDateCoded= URLEncoder.encode(formatDate,"utf-8"); * 4.使用utf-8解码 timeFormatDateDecode = URLDecoder.decode(value,"utf-8"); */ Date date = DateUtil.date(System.currentTimeMillis()); String formatDate = DateUtil.format(date, "yyyy年MM月dd日 HH时mm分ss秒"); String timeFormatDateCoded = URLEncoder.encode(formatDate, "utf-8"); String timeFormatDateDecode = URLDecoder.decode(formatDate, "utf-8"); /** * 1.登录时间存储在session中 timeFormatDate * 2.往session中装入属性 key(String) : value(Object)) */ HttpSession session = req.getSession(); session.setAttribute("time", timeFormatDateDecode); /** *2.Java获取当前时间到凌晨12点剩余秒数 * 2.1 cal.set(Calendar.HOUR,0);此方法如果当前时间超过中午12点,则返回的结果是当前时间到明天中午十二点的秒数,如果当前时间不超过中午12:00,则返回的结果是到第二天凌晨的秒数 * 2.2 cal.set(Calendar.HOUR_OF_DAY, 0);无论当前时间是否超过中午12:00,获取的都是到第二天凌晨的秒数。 * 2.3 Calendar.HOUR:12小时制。 * 2.4 Calendar.HOUR_OF_DAY :24小时制。 */ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); long seconds = (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000; /** * 1.设获取HttpSession对象:HttpSession session = req.getSession() * 2.第一次访问会默认添加一个cookie,名称JSESSIONID,是隐形的,是被req.getSession()底层封装的,所以我们看不到,此时cookie的生命周期为浏览器关闭后就消失 * 3.为了解决2中(cookie的生命周期为浏览器关闭后就消失)可以new一个cookie,名称也是JSESSIONID,会覆盖默认创建的cookie * 4.Cookie生存时间介绍:持久化存储期限以秒为单位 * 5. jsessionIdCookie.setMaxAge(24*60*60);设置了jsessionIdCookie的存活时间是24小时 * 6.优化:jsessionIdCookie到当天24点需要失效,因为已经到了第二天了,浏览器再次访问,应该返回 首次访问 */ Cookie jsessionIdCookie = new Cookie("JSESSIONID", session.getId()); jsessionIdCookie.setMaxAge((int) seconds); resp.addCookie(jsessionIdCookie); /** * 1.对jsessionIdCookie进行判断 * 2.获取所有的jsessionIdCookie值 * 3.若jsessionIdCookie为空,说明第一次访问 */ Cookie[] jsessionIdCookies = req.getCookies(); if (jsessionIdCookies != null) { resp.getWriter().write("欢迎回来,您上次访问时间为:" + session.getAttribute("time")); } else { resp.getWriter().write("您好,欢迎您首次访问"); } } }