关于session会话事件处理

ASP.NET程序员经常要在global.asax文件内处理Application_start,Session_Start等事件,如:用户验证、重定向不同编码页面等,十分方便,然而一向颇受欢迎的JSP并不很支持这种处理,除了商业化服务器JRun支持global.jsa以外,竟连应用率极高的开放源码服务器Tomcat都不支持,这给JSP的开发造成不小障碍,虽然早期Tomcat(5.0以前版本)下可以通过以下方式实现Session-start事件处理

一)使用HttpSessionBindingListener
1、添加Session
session.setAttribute("bind.listener", new MyListener());

2、定义MyListener类
package web;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class MyListener implements HttpSessionBindingListener {
 ServletContext context = null;

 public MyListener() {
 }

 public MyListener(ServletContext context) {
  this.context = context;
 }

 public void valueBound(HttpSessionBindingEvent event) {
  System.out.println("bound");
 }

 public void valueUnbound(HttpSessionBindingEvent arg0) {
  System.out.println("unBound");
 }
}

二)使用HttpSessionListener
但处理前提是Session已经建立,并且不能在Session创建时处理验证等事件,通过研究Servlet 2.4(Tomcat5.0内建)终于找到一种可行方法,实现方法如下:
package web;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public final class MyListener implements HttpSessionListener,
  ServletRequestListener {
 public void requestDestroyed(ServletRequestEvent sre) {
  System.out.println("MyListener.requestDestroyed()");
 }

 public void requestInitialized(ServletRequestEvent sre) {
  System.out.println("MyListener.requestInitialized()");
 }

 public void sessionCreated(HttpSessionEvent event) {
  System.out.println("MyListener.sessionCreated()");
 }

 public void sessionDestroyed(HttpSessionEvent event) {
  System.out.println("MyListener.sessionDestroyed()");
 }
}

在开始接到客户端请求(requestInitialized)时,获得当前的HttpRequest对象保存在私有成员 request 中,这样在Session创建时可以实现对Session用户进行验证,以及关闭Session,限制IP地址访问等,这里仅以记录Session来源为例(SessionListener.java)

编译这个类后还要在web.xml的host元素内加入以下行:
 <listener>
  <listener-class>web.MyListener</listener-class>
 </listener>

本文适用环境:Tomcat 5.02,J2SE1.41

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leeshuqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值