注销操作应用(监控session的创建和注销)
在写登录的时候考虑到session在长时间的不活动以后自动注销,而我又需要在每次注销之前对数据库库中的值进行修改,于是用到了HttpSessionListener这个接口,监听session的创建和注销
我需要做的是在session注销时能跳转到我需要做的地址,然后跳回首页
在sessionDestroyed中获账号传递标志值
@Override
public void sessionDestroyed(HttpSessionEvent se){
HttpSession session=se.getSession();
Login user_session =(Login) session.getAttribute("USER_SESSION");
if (user_session!=null){//因为我跳转前的地址是在注销账号的地址,避免死循环
String id=user_session.getUserId();
System.out.println("id:"+id);
session.getServletContext().setAttribute("QUIT",id);//账号也是标志值
}
在拦截器中根据QUIT的值进行拦截,一定要对remove标志值,在跳转目标地址时也会进行拦截一次
String quitsignal=(String)session.getServletContext().getAttribute("QUIT");
if(quitsignal!=null){
Login login=new Login();
login.setUserId(quitsignal);
session.setAttribute("USER_SESSION",login);
session.getServletContext().removeAttribute("QUIT");
request.getRequestDispatcher("/login/quit.action").forward(request, response);
System.out.println(request.getContextPath()+"/login/quit.action");
return false;
}
之后在Controller需要session.removeAttribute(“USER_SESSION”)和session.invalidate();(???,写太多了有点记不清了),对应sessionDestroyed中 if (user_session!=null)
在web.xml
配置监视器
<listener>
<listener-class>com.sessionlistener.SessionListner</listener-class>
</listener>
设置session的周期
<session-config>
<session-timeout>1</session-timeout>
</session-config>
(MVC)提交表单以后重新再次提交
登录操作
在MVC中提交表单以后,return "next"之后的地址页面没有改变,虽然区分了地址的method,但是可以发现在return之后的页面仍然是POST,在刷新以后出现了表单有新内容需要重新刷新,之后传method变为GET,在尝试了以后,可以使用return “redirect:/login”;,重定向地址
SQL的Datetime在固定的格式显示
在mysql中设置的类型为Datetime的显示形式为
从数据库中查询出以后给Date的其实是全时间,如果想要以固定的格式显示
在POJO中加上String dateString
之后一个一个时间进行转化在赋值