关闭

Servlet、Filter、Listener、Interceptor

261人阅读 评论(0) 收藏 举报
分类:

首先,JSP/Servlet规范中定义了Servlet、Filter、Listener这三种角色,并没有定义Interceptor这个角色,Interceptor是某些MVC框架中的角色,比如Struts2中,Interceptor是用来拦截Action中的方法的调用,在被拦截的Action方法被执行前,先执行响应的拦截器中的方法。
servlet、filter、listener是配置到web.xml中,interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。


servlet、filter、listener三者的加载顺序与它们在 web.xml 文件中配置的先后顺序无关。即不会因为filter写在listener的前面而会先加载filter:加载它们的先后顺序是:listener -> filter -> servlet
同时还存在着这样一种配置节:context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文中的信息,那么 context-param 配置节是不是应该写在 listener 配置节前呢?实际上 context-param 配置节可写在任意位置,因此真正的加载顺序为:context-param -> listener -> filter -> servlet


context-param、listener、 filter、 servlet的加载顺序不是配置时先后顺序的影响,但是多个filter时,filter之间的加载顺是受影响的。web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的。


==================================Filter=============================================
filter过滤器是在Java Servlet规范2.3中定义的,在Java Servlet规范2.3出来之前,是没有filter这个角色的。
filter这个角色是用来:在请求到达servlet之前,先截获请求,对请求先做一些预处理(例如编码转换,权限验证)。处理完后在把请求转发给servlet或把不符合某些规则的请求丢弃掉,不再转发给servlet了。当servlet处理好请求后,返回响应给浏览器时,filter拦截响应,对响应做一些处理之后,再返回给浏览器。由此可见,filter这个角色的职责就是:帮servlet做一些前期预处理工作(先于servlet处理request)和善后工作(后于servlet处理response)的辅助角色,它就像servlet的助手一样,但它并不是必须的,因为在之前没有filter的时候,servlet也能很好地工作。只是如果有filter的帮助的话,servlet就能更专注处理一些核心的业务。
多个filter可以协同工作,它们之间采用了职责链的设计模式来协同工作。一个filter处理完后,调用下一个filter来处理,每个filter负责处理不同的工作,而这些filter之间可以根据需要灵活组合。filter的先后顺序按filter在web.xml中配置的先后顺序。
filter需要servlet容器(tomcat)的支持,能运行filter的servlet容器必须实现在Java Servlet规范2.3版中定义的功能。servlet容器是对javax.servlet.Filter这个接口进行编程的,所以你自己写的filter必须直接或间接的实现了javax.servlet.Filter这个接口,否则servlet容器不能跟你定义的filter进行交互(因为在编程实现容器时,就把javax.servlet.Filter这个接口编进容器代码中了,容器只能调用javax.servlet.Filter接口的实现类)。




=====================================Listener============================================
listener是对事件进行监听和处理的角色,它采用观察者模式,只有当在这个listener上注册了的事件
发生时,listener才会执行事件处理方法。这些事件举例:上下文(context)加载事件;session创建或销毁事件;容器、session或请求的属性设置或移除事件等。


servlet2.4规范中提供了8个listener接口,可以将其分为三类,分别如下:
第一类:与servletContext(Application)有关的listner接口。包括:ServletContextListener、ServletContextAttributeListener
第二类:与HttpSession有关的Listner接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、                                                     HttpSessionActivationListener;
第三类:与ServletRequest有关的Listener接口,包括:ServletRequestListner、ServletRequestAttributeListener




=====================================Interceptor=========================================
Interceptor是某些MVC框架中的角色,比如Struts2中,Interceptor是用来拦截Action中的方法的调用,在被拦截的Action方法被执行前,先执行响应的拦截器中的方法。interceptor:是在面向切面编程的,就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,比如动态代理就是拦截器的简单实现。filter是在servlet前面拦截请求,而interceptor是利用面向切面编程的技术,在Struts的内部Action中拦截调用方法请求。
1
0
查看评论

Servlet、Filter、Listener、Interceptor

首先,JSP/Servlet规范中定义了Servlet、Filter、Listener这三种角色,并没有定义Interceptor这个角色,Interceptor是某些MVC框架中的角色,比如Struts2中,Interceptor是用来拦截Action中的方法的调用,在被拦截的Action方法被执...
  • zuoluoboy
  • zuoluoboy
  • 2014-02-23 09:46
  • 7568

javaweb---filter、Listener、interceptor小结

一、Filter: Servlet加强版,对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是典型的处理链。   用处: 1、  在HttpServletRequest到达servlet之前,拦截客户的HttpServletRequest 2、...
  • jing12062011
  • jing12062011
  • 2017-08-04 14:45
  • 146

Java中Filter、Listener,拦截器的学习,listener、 filter、servlet 加载顺序及其详解

Filter filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Se...
  • lexang1
  • lexang1
  • 2016-08-17 16:18
  • 2881

Servlet 过滤器(filter)和Spring 拦截器(Interceptor)区别

转自:http://blog.csdn.net/ggibenben1314/article/details/45341855 一、定义 拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单...
  • c2223164136
  • c2223164136
  • 2016-04-13 17:58
  • 2186

web.xml中servlet ,filter ,listener ,interceptor的作用与区别

一、概念:          1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。最早支持 Servlet 技术的是 Java...
  • netdevgirl
  • netdevgirl
  • 2016-05-23 17:23
  • 5806

servlet/filter/listener/interceptor

1、servlet servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。最早支持 Servlet技术的是 JavaSoft 的 Java Web Server。此后,一些其它的基于Java的Web S...
  • qq_28042233
  • qq_28042233
  • 2017-03-02 15:00
  • 81

servlet、listener、filter、Interceptor

概念上:  servlet:是运行于服务端的java程序,可生成动态的web页面。接受请求、产生响应页面和数据。 filter:用于对请求或者相应进行预处理和后处理。它与Servlet的区别在于:它不能直接向用户生成响应。使用方式:实现了Filter接口的类,web.xml中配...
  • hust_dxxxd
  • hust_dxxxd
  • 2016-08-21 20:27
  • 279

servlet、filter、listener、interceptor

servletservlet??????????java????,?????????????,?????????web??,????????????????????Servlet ??????????????????,???? Web ??? 1) ????????????; 2) ???????...
  • qq_17612199
  • qq_17612199
  • 2016-04-27 10:46
  • 2378

Servlet,Filter,Listener,Interceptor

一.概念:  1.Servlet:    servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。    2.Filter:    filter流程是线性的,它...
  • F7ANTY
  • F7ANTY
  • 2015-03-15 21:24
  • 293

Servlet、Filter、Listener深入理解

Servlet、Filter和Listener总结以及Cookie和Session的深入理解
  • sunxianghuang
  • sunxianghuang
  • 2016-08-10 12:02
  • 3582
    个人资料
    • 访问:9920次
    • 积分:183
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    最新评论