
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("您好,欢迎您首次访问");
}
}
}