1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Listener监听器与Filter过滤器

Listener监听器与Filter过滤器

时间:2019-06-10 20:22:21

相关推荐

Listener监听器与Filter过滤器

1.Listener

[1]监听器简介> Listener是JavaWeb的三大组件之一,Servlet、Filter、Listener> Listener翻译过来就是监听器> 现实生活中的监听器: - 监听谁:明星 - 监听器:朝阳群众 - 监听事件:干坏事 - 回调函数:报警> JavaWeb中的监听器: - 监听谁:ServletContext、HttpSession、ServletRequest - 监听器:自己写 - 监听的事件:生命周期、属性的变化 - 回调函数:自己写> JavaWeb中的监听器,共分为三大类,一共8个:> WEB组件的特点: 1.都需要创建一个类并实现某个接口 2.都要在web.xml文件中进行配置 [2]监听器分类1.生命周期监听器(3个)2.属性变化监听器(3个)3.session中指定类属性变化监听器(2) [3]生命周期监听器:> 监听ServletContext、HttpSession、ServletRequest三个对象创建和销毁> javax.servlet.ServletContextListener --> 监听ServletContext的生命周期变化 - 方法: void contextDestroyed(ServletContextEvent sce) - 在ServletContext对象销毁前调用void contextInitialized(ServletContextEvent sce) - 在ServletContext对象创建后调用 - 参数: ServletContextEvent - 可以用来获取ServletContext对象> javax.servlet.http.HttpSessionListener --> 监听HttpSession对象的生命周期变化 - 方法: void sessionCreated(HttpSessionEvent se) - 在HttpSession对象创建以后调用void sessionDestroyed(HttpSessionEvent se) - 在HttpSession对象销毁前调用 - 参数: HttpSessionEvent - 可以用来获取HttpSession对象> javax.servlet.ServletRequestListener --> 监听request对象的生命周期的变化 - 方法: void requestDestroyed(ServletRequestEvent sre) - 在request对象销毁前调用void requestInitialized(ServletRequestEvent sre) - 在request对象创建后调用 - 参数: ServletRequestEvent - 可以用来获取ServletContext对象 - 可以用来获取ServletRequest对象 [4]属性监听器> ServletContext属性变化监听器 javax.servlet.ServletContextAttributeListener - 方法: void attributeAdded(ServletContextAttributeEvent scab) - 当我们向application域中添加属性时调用 void attributeRemoved(ServletContextAttributeEvent scab) - 当我们从application域中移除属性时调用 void attributeReplaced(ServletContextAttributeEvent scab) - 当application域中一个属性被替换时调用> HttpSession的属性变化监听器 javax.servlet.http.HttpSessionAttributeListener - 方法: void attributeAdded(HttpSessionBindingEvent se) - 当我们向session域中添加属性时调用 void attributeRemoved(HttpSessionBindingEvent se) - 当我们从session中移除属性时调用 void attributeReplaced(HttpSessionBindingEvent se) - 当session域中的一个属性被替换时调用参数: HttpSessionBindingEvent: 作用:1.获取发生变化的属性的名字 getName()2.获取发生变化的属性的值 getValue() 注意属性替换时,获取到是旧的属性值3.获取HttpSession对象 getSession() 可以通过session对象获取到新的属性值> ServletRequest属性变化监听器 -javax.servlet.ServletRequestAttributeListener - 方法: void attributeAdded(ServletRequestAttributeEvent srae) - 当我们向request域中添加属性时调用 void attributeRemoved(ServletRequestAttributeEvent srae) - 当我们从request域中移除属性时调用 void attributeReplaced(ServletRequestAttributeEvent srae) - 当request域中的一个属性被替换时调用> 监听Session中指定类的实例属性变化的监听器- 这两个监听器的接口,由一个JavaBean去实现,而且不用编写配置文件 [5]HttpSessionBindingListenervoid valueBound(HttpSessionBindingEvent event) - 当该类实例设置进session域中时调用void valueUnbound(HttpSessionBindingEvent event) - 当该类的实例从session域中移除时调用HttpSessionBindingEvent: 作用: 1.获取发生变化的属性的名字 getName() 2.获取发生变化的属性的值 getValue() 3.获取HttpSession对象 getSession() [6]HttpSessionActivationListener> 监听某个类的实例和session一起活化和钝化的监听器- 方法: void sessionDidActivate(HttpSessionEvent se) - 当该类实例和session一起活化时调用 void sessionWillPassivate(HttpSessionEvent se) - 当该类实例和session一起钝化时调用- 参数: HttpSessionEvent - 可以用来获取HttpSession对象2.Filter[1] Filter简介- Filter直译过来就是过滤器的意思- JavaWeb中的Filter是用来过滤请求- Filter是JavaWeb中三大组件之一:Servlet、Filter、Listener- 三大组件都需要运行在服务器端- 编写WEB组件有一个共同的特点: 1.编写一个类实现某个接口 2.在web.xml文件中进行配置- Filter的作用: 1.过滤器可以在请求到达目标资源(JSP、HTML、Servlet等等)之前拦截请求 2.过滤器也可以放行请求,使请求到达目标资源 3.在响应到达浏览器之前对响应做一个处理 [2] Filter的HelloWorld1.创建一个类实现Filter接口2.编写web.xml配置文件 <filter> <filter-name>Filter的别名</filter-name> <filter-class>filter的全类名</filter-class> </filter> <filter-mapping> <filter-name>Filter的别名</filter-name> <url-pattern>要拦截的请求的地址</url-pattern> </filter-mapping>- url-pattern的配置规则: 1.精确匹配:只有访问的路径和url-pattern配置的路径完全一致时,才会调用Filter拦截请求 如: /index.jsp 只会拦截项目根目录下index.jsp的请求 2.路径匹配:只要访问的地址在url-pattern配置的路径下,就会调用Filter拦截请求 如: /hello/* 只要访问项目根目录下hello路径下的资源,就会调用Filter /* 只要是当前项目下的请求都会调用Filter 3.后缀匹配: 只要访问的地址后缀和url-pattern一致,就会调用Filter拦截请求 如: *.jsp 只要访问的地址以.jsp结尾,就会调用Filter 注意:所有的url-pattern必须符合上述规则。 以上规则同样适用于Servlet的url-pattern 当使用Filter去拦截一个Servlet时,只需要将Filter的url-pattern配置和Servlet的一样即可, 同时也可以在filter-mapping中设置一个servlet-name标签,来指定要拦截的Servlet, 这样即使Servlet的url-pattern发生改变,Filter也会照常拦截 [3] Filter的生命周期> Filter的生命周期是Filter由被创建到被销毁的过程> Filter的生命周期方法: 构造器:服务器一启动就会创建Filter的实例,只会调用一次,Filter是单例。 init(): 构造器调用之后,马上调用,用来初始化Filter,只会调用一次。 FilterConfig:代表当前Filter的配置信息,可以获取当前Filter的初始化参数。 还可以获取ServletContext对象。 doFilter():每次拦截请求时都会调用,会调用多次。 ServletRequest:代表浏览器发送给服务器的请求报文,和Servlet中的request是一样的。 ServletResponse:代表的是服务器响应给浏览器的响应报文,和Servlet中的response是一样的。 FilterChain: 用来放行请求: chain.doFilter(request,response) --> 放行请求, 当调用该方法时,相当于调用了目标资源的service方法。 destroy():项目卸载Filter对象销毁前调用,用来做一些如释放资源等收尾的工作,只会调用一次。 [4] Filter的执行顺序- 为同一个WEB资源可以设置多个Filter拦截请求,多个Filter就组成了一个Filter链。 当有多个Filter时,在去调用chain.doFilter()时, 如果Filter之后还有Filter,就相当于调用下一个Filter的doFilter方法 如果Filter之后没有Filter,就相当于调用了目标资源的service()方法- 多个Filter的执行顺序,有filter-mapping的顺序决定,filter-mapping靠前的先拦截,靠后的后拦截。- 注意:filter-mapping一定要在filter标签的下边 [5] dispatcher- Filter默认只会拦截直接向目标资源发送的请求。- 我们可以在filter-mapping中通过dispatcher标签来指定拦截请求的类型: <dispatcher>REQUEST</dispatcher> - request表示会拦截直接向目标资源发送的请求,如果不配置dispatcher则默认值就是request 如果写了dispatcher则以写的为准 <dispatcher>FORWARD</dispatcher> - forward表示会拦截通过转发向目标资源发送的请求 <dispatcher>INCLUDE</dispatcher> - include表示会拦截通过动态包含向目标发送的请求 <dispatcher>ERROR</dispatcher> - error表示会拦截通过错误页面的形式向目标发送的请求 <error-page> <error-code>404</error-code> <location>/4.jsp</location></error-page> [6] HttpFilter

转载请注明出处!

/libingbin/

感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。