JSP Session处理 (转)

本文介绍了一种在Tomcat环境下实现JSP Session处理的方法。通过实现SessionListener接口,可以在Session创建时进行用户验证等操作。这种方法弥补了JSP在Session处理上的不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP Session处理 (转)[@more@]

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”);

  }

}

XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

但处理前提是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元素内加入以下行:

 

  listeners.SessionListener

 

  本文适用环境:Tomcat 5.02,j2se1.41(不支持商业服务器)

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-956684/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-956684/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值