Web.xml 里面的Session-Config 属性

1、首先说明Web.xml 里面的Session-Config 属性

当session超时时,会调用httpSessionListener中的sessionDestroy()方法。
html

具体设置方法有三种:java

(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);能够经过对应的getMaxInactiveInterval()获取。参数900单位是秒,即在没有活动15分钟后,session将失效。另外,经过调用Session的invalidate()方法可使Session显示失效。web

这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。因此若是是在调试程序,应该是修改服务器端时间来测试,而不是客户端。spring

(2)也是比较通用的设置session失效时间的方法,就是在项目的web.xml中添加Xml代码服务器

session-config :若是某个会话在必定时间内未被访问,服务器能够抛弃它以节省内存。session

可经过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,app

或者可利用session-config元素制定缺省超时值。框架

<!-- session-config包含一个子元素session-timeout.定义web站台中的session参数.  -->  
 <session-config>  
     <!-- 定义这个web站台全部session的有效期限.单位为分钟. 例子中为600分钟 -->  
     <session-timeout>600</session-timeout>  
 </session-config>

2、基于Session操做的一些应用

2.1 基于servlet API 的Session 操做

 在通常系统中,也可能须要在session失效后作一些操做,性能

(1)控制用户数,当session失效后,系统的用户数减小一个等,控制用户数在必定范围内,确保系统的性能。测试

(2)控制一个用户屡次登陆,当session有效时,若是相同用户登陆,就提示已经登陆了,当session失效后,就能够不用提示,直接登陆了。

 那么如何在session失效后,进行一系列的操做呢?

这里就须要用到监听器了,即当session由于各类缘由失效后,监听器就能够监听到,而后执行监听器中定义好的程序就能够了。

监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法 

本身能够继承这个类,而后分别实现。

sessionCreated指在session建立时执行的方法

sessionDestroyed指在session失效时执行的方法

package com.yuan.Session;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {

	public void sessionCreated(HttpSessionEvent se) {
		// session建立时执行
		SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
		String nowtimes = simpleFormat.format(new Date());
		//User u = (User)ActionContext.getContext().getSession().get("user");//structs的方法
		//String username = (String)se.getSession().getAttribute("username");//用于获取元素,对象
		System.out.println("执行。。 当前时间:"+nowtimes+");
		HttpSession ses= se.getSession();
		String id=ses.getId()+"_"+ses.getCreationTime();
	}
	public void sessionDestroyed(HttpSessionEvent arg0) {
		// session失效时执行
		SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
		String nowtimes = simpleFormat.format(new Date()); 
		System.out.println("session失效时间: "+nowtimes);
	}
}

        这样的代码在传统的Servlet程序中是很常见的:由于使用了 Servlet API,从而对 Servlet API产生依赖。这样若是咱们要测试 action,咱们就必须针对 HttpServletRequest、HttpServletResponse 和 HttpSession类提供 mock 或者 stub 实现。固然如今已经有不少开源的 Servlet 测试框架帮助咱们减轻这个痛苦,包括 Spring 就自带了对了这些类的 stub 实现,但那仍是太冗繁琐碎了。那有没有比较好的办法来让咱们的 controller 更 POJO,让咱们的 action 脱离 Servlet API 依赖,更有益于测试和复用呢?咱们来看看在 Spring2.5 中访问 Session 属性的几种解决方案,并将在本博的后续文章继续探究解决方案选择背后的深层含义。

备注:感受测试会有问题,比较麻烦。

参考博文:能够查看该博文读取详细内容

2.2 spring 经过 申明来使用

Spring对annotationed的 action 的参数提供自动绑定支持的参数类型包括 Servlet API 里面的 Request/Response/HttpSession(包含Request、Response在Servlet API 中声明的具体子类)。因而开发人员能够经过在 action 参数中声明 Request 对象或者 HttpSession 对象,来让容器注入相应的对象。

  action 的代码以下:

  Java代码

  @RequestMapping
  public void hello(HttpSession session){
  User user = (User)session.getAttribute("currentUser");
  //...
  }
相关文章
相关标签/搜索