Web.xml 里面的Session-Config 属性

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

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

具体设置方法有三种:

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

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

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

session-config :如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。

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

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

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

二、基于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");
  //...
  }


你可能感兴趣的:(session-config)