|
JSP Session处理 |
|
作者:客服中心 文章来源:本站原创 点击数: 更新时间:2006-11-23 |
|
ASP程序员经常要在global.asa文件内处理Application_start,Session_Start等 事件,如:用户验证、重定向不同编码页面等,十分方便,然而一向颇受欢迎的JSP并不很支持这种处理,除了商业化服务器JRun支持global.jsa以外,竟连应用率极高的开放源码服务器Tomcat都不支持,这给JSP的开发造成不小障碍,虽然早期Tomcat(5.0以前版本)下可以通过以下方式实现Session-start事件处理 1. 添加Session session.put(“bind.listener”,new MyListener(getServletContext()) 2. 定义MyListener类 import javax.servlet.http.*; import javax.servlet.*; public class MyListener implements HttpSessionBindingListener { ServletContext context; public ODSessionListener(ServletContext context) { this.context=context; }
public void valueBound(HttpSessionBindingEvent event) { System.out.println(“bound”); }
public void valueUnBound(HttpSessionBindingEvent event) { System.out.println(“unbound”); } } 但处理前提是Session已经建立,并且不能在Session创建时处理验证等事件,通过研究Servlet 2.4(Tomcat5.0内建)终于找到一种可行方法,实现方法如下: //---------------------- SessionListener.java---------------------------------------------------- package listeners; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; // ServletRequestListener为Servlet2.4新增接口 import javax.servlet.ServletRequestListener; import javax.servlet.ServletRequestEvent; import javax.servlet.http.HttpServletRequest; public final class SessionListener implements HttpSessionListener,ServletRequestListener { private HttpServletRequest request; public void requestDestroyed(ServletRequestEvent sre) { } public void requestInitialized(ServletRequestEvent sre) { request=(HttpServletRequest)sre.getServletRequest(); } public void sessionCreated(HttpSessionEvent event) { String logMsg=event.getSession().getId() +"' '"+request.getRemoteAddr() +":"+request.getRemotePort(); log("sessionCreated('" + logMsg + "')"); } public void sessionDestroyed(HttpSessionEvent event) { log("sessionDestroyed('" + event.getSession().getId() + "')"); } private void log(String message) { System.out.println("SessionListener: " + message); } } 在开始接到客户端请求(requestInitialized)时,获得当前的HttpRequest对象保存在私有成员 request 中,这样在Session创建时可以实现对Session用户进行验证,以及关闭Session,限制IP地址访问等,这里仅以记录Session来源为例(SessionListener.java) 编译这个类后还要在web.xml的host元素内加入以下行: <listener> <listener-class>listeners.SessionListener</listener-class> </listener> 本文适用环境:Tomcat 5.02,J2SE1.41 |
返回上一页 |