Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
JSP Session处理

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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.4Tomcat5.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;

// ServletRequestListenerServlet2.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.xmlhost元素内加入以下行:

  <listener>

    <listener-class>listeners.SessionListener</listener-class>

  </listener>

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

 

 




相关文章

相关软件