package org.nutz.mvc;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.nutz.log.Log;
import org.nutz.log.Logs;
/**
* 如果你的应用,在 Session 中保存了一些需要注销的对象,比如你在 Ioc 容器中将一个 DataSource 对象的范围设成
* "session",那么请启用本的监听器,它会在一个 session 注销时,关闭 DataSource
* <p>
* 启用的方法是在 web.xml 中,添加下面的代码:
*
* <pre>
* <listener>
* <listerner-class>org.nutz.mvc.NutSessionListener</listerner-class>
* </listener>
* </pre>
*
* <h4 style=color:red>注意:</h4><br>
* 如果你的 IocProvider 返回是 Ioc 而不是 Ioc2,那么 这个监听器是没有意义的。因为Nutz.Mvc 不会为 Session 创建
* IocContext,因此也就不需要注销
*
* @author zozoh(zozohtnt@gmail.com)
* @author wendal(wendal1985@gmail.com)
*/
public final class NutSessionListener implements HttpSessionListener {
private static final Log log = Logs.get();
/**
* 如果你在 web.xml 配置了这个监听器,那么我们理解你的意图就是要自动创建 session <br>
* 否则你就不需要自动创建 session。<br>
* 在 Nutz 默认的 ModuleProcessor 里,会根据这个变量来决定是否自动创建session的
*/
public static boolean isSessionScopeEnable = false;
public NutSessionListener() {
isSessionScopeEnable = true;
log.info("NutIoc SessionScope is Enable.");
}
public void sessionCreated(HttpSessionEvent se) {}
public void sessionDestroyed(HttpSessionEvent se) {
Mvcs.deposeSession(se.getSession());
}
}