当前位置:文档之家› ssh中自定义监听器,拦截器,过滤器

ssh中自定义监听器,拦截器,过滤器

SSH中自定义监听器、拦截器、过滤器1、自定义监听器a)自定义监听器有哪些监听器的定义是在web.xml中完成,其实做过ssh项目的人并不陌生监听器,主要是因为spring提供了监听器就是<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>如果我们想自己定义一个监听器来完成我们自己的特定功能怎么办呢,struts为我们提供了自定义servlet监听器,他们主要有(1)ServletContextListenerServlet的上下文监听,它主要实现监听ServletContext的创建和删除。

该接口提供了两种方法1.contextInitialized(ServletContextEvent event); 通知正在收听的对象,应用程序已经被加载和初始化。

2.contextDestroyed(ServletCotextEvent event); 通知正在收听的对象,应用程序已经被载出,即关闭。

(2)ServletAttributeListener主要实现监听ServletContext属性的增加,删除和修改。

该接口提供了一下3个方法1.attributeAdded(ServletContextAttributeEvent event); 当有对象加入Application的范围时,通知正在收听的对象2.attributeReplaced(ServletContextAttributeEvent event); 当在application的范围有对象取代另一个对象的时,通知正在收听的对象3.attributeRemoved(ServletContextAttributeEvent event); 当有对象从application的范围移除时,通知正在收听的对象(3)HttpSessionListenerHTTP会话监听,该接口实现监听HTTP会话创建、销毁。

该接口提供了一下两种方法1.sessionCreated(HttpSessionEvent event); 通知正在收听的对象,session已经被加载及初始化2. sessionDestoryed(HttpSessionEvent event)l 通知正在收听的对象,session已经被载出(HttpSessionEvent类的主要方法是getSession(),可以使用该方法回传一个session对象)(4)HttpSessionActivationListener该接口实现监听HTTP会话active和passivate。

该接口提供了一下3个方法1.attributeAdded(HttpSessionBindingEvent event); 当有对象加入session的范围时,通知正在收听的对象2.attributeReplaced(HttpSessionBindingEvent event); 当在session的范围有对象取代另一个对象时,通知正在收听的对象。

3.attributeRemoved(HttpSessionBindingEvent event); 当有对象从session的范围有对象取代另一个对象时,通知正在收听的对象其中HttpSessionBindingEvent类主要有三个方法:getName()、getSession()和getValue()(5)HttpBindingListener接口实现监听HTTP会话中对象的绑定信息。

它是唯一不需要在web.xml中设定Listener的。

该接口提供了以下2个方法1.valueBound(HttpSessionBindingEvent event); 当有对象加入session的范围时会被自动调用2.valueUnBound(HttpSessionBindingEvent event); 当有对象从session的范围内移除时会被自动调用(6)HttpSessionAttributeListener该接口实现监听HTTP会话中属性的设置请求。

该接口提供了以下两个方法。

1.sessionDidActivate(HttpSessionEvent event); 通知正在收听的对象,它的session已经变为有效状态。

2.sessionWillPassivate(HttpSessionEvent event); 通知正在收听的对象,它的session已经变为无效状态(7)ServletRequestListener该接口提供了以下两个方法。

1.requestInitalized(ServletRequestEvent event) 通知正在收听的对象,ServletRequest已经被加载及初始化2.requestDestroyed(ServletRequestEvent event) 通知正在收听的对象,ServletRequest已经被载出,即关闭(8)ServletRequestAttributeListener该接口提供了一下三种方法1.attributeAdded(ServletRequestAttributeEvent event);当有对象加入request的范围时,通知正在收听的对象2.attributeReplaced(ServletRequestAttributeEvent event); 当在request的范围内有对象取代两一个对象时,通知正在收听的对象3.attributeRemoved(ServletRequestAttributeEvent event); 当有对象从request的范围移除时,通知正在收听的对象b)怎么去自定义监听器1)在web.xml中加入这一样一段话<!-- 监听器的使用,监听session对象 --><listener><listener-class>com.wlm.iagtc.listener.SessionListener</listener- class></listener>把自己定义的监听器类的全路径写进去SessionListener.java类package com.wlm.iagtc.listener;import java.util.Enumeration;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class SessionListener implements HttpSessionListener{public void sessionCreated(HttpSessionEvent se) {System.out.println("session监听器启动!!!");HttpSession session = se.getSession();Enumeration login = session.getAttributeNames();if(login.hasMoreElements()){System.out.println("监听到了session对象的创建"+login.nextElement());}System.out.println(session.getId()+"----id");}public void sessionDestroyed(HttpSessionEvent se) {System.out.println("session监听器销毁!!!");HttpSession session = se.getSession();Enumeration login = session.getAttributeNames();if(login.hasMoreElements()){System.out.println("监听到session对象的消失!"+login.nextElement());}}}就这样就可以监听session对象的创建和销毁了注:session的创建:对象在你打开浏览器访问网站的一瞬间就框架就已经创建了Session的销毁:session的销毁有三种方式1、关闭浏览器2、利用代码invalidate()方法销毁session对象3、设置session过期时间,销毁session<!-- 配置session时长,也就是说如果用户长时间没有访问服务器,就杀死session --><session-config><session-timeout>5</session-timeout></session-config>你可以根据不同的接口,来监听不同的事件。

2、自定义过滤器a)过滤器的创建过滤器struts2自己就定义的有,是默认的过滤器在web.xml中<!-- 定义默认过滤器 --><filter><!-- 过滤器的名字 --><filter-name>struts2</filter-name><!-- 过滤器的类文件 --><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!-- 启动过滤器 --><filter-mapping><!-- 要引用的过滤器 --><filter-name>struts2</filter-name><!-- 过滤器的url串,这里是过滤全部 --><url-pattern>/*</url-pattern></filter-mapping>过滤器是Servlet2.3以上新增加的一个功能,其技术也是非常强大的。

通过Filter技术可以对WEB服务器的文件进行拦截,从而实现一些特殊的功能。

相关主题