手机网站二级域名,杭州e时代网站建设,建设银行网网站,吐鲁番seo招聘JavaWeb中监听器Listener过滤器filter拦截器interceptor区别
如果从整个项目中看#xff0c;一个servlet请求的执行过程就变成了这样context-param–listener–filter–servlet–interceptor(指的是拦截器)
1.概念
context-param#xff1a;就是一些需要初…JavaWeb中监听器Listener过滤器filter拦截器interceptor区别
如果从整个项目中看一个servlet请求的执行过程就变成了这样context-param–listener–filter–servlet–interceptor(指的是拦截器)
1.概念
context-param就是一些需要初始化的配置放入context-param中从而被监听器这里特指org.springframework.web.context.ContextLoaderListener监听然后加载
监听器(listener)就是对项目起到监听的作用它能感知到包括request(请求域)session(会话域)和applicaiton(应用程序)的初始化和属性的变化
过滤器(filter)就是对请求起到过滤的作用它在监听器之后作用在servlet之前对请求进行过滤
servlet就是对request和response进行处理的容器它在filter之后执行servlet其中的一部分就是controller层标记为servlet_2还包括渲染视图层(标记为servlet_3)和进入controller之前系统的一些处理部分(servlet_1)另外我们把servlet开始的时刻标记为servlet_0servlet结束的时刻标记为servlet_4。
拦截器(interceptor)就是对请求和返回进行拦截它作用在servlet的内部具体来说有三个地方
区别
1,servlet 流程是短的url传来之后就对其进行处理之后返回或转向到某一自己指定的页面。它主要用来在 业务处理之前进行控制.
2,filter 流程是线性的 url传来之后检查之后可保持原来的流程继续向下执行被下一个filter, servlet接收等而servlet 处理之后不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去或者主导流程而servlet的功能主要用来主导流程。
filter可用来进行字符编码的过滤检测用户是否登陆的过滤禁止页面缓存等
3, servlet,filter都是针对url之类的而listener是针对对象的操作的如session的创建session.setAttribute的发生在这样的事件发生时做一些事情。
可用来进行Spring整合Struts为Struts的action注入属性web应用定时任务的实现在线人数的统计等
4interceptor拦截器类似于filter不过不是在web.xml,并且不是针对url的而是针对action的当页面提交时进行过滤操作
使用原则 对整个流程清楚之后然后就是各自的使用在使用之前应该有一个使用规则为什么这个说因为有些功能比如判断用户是否登录既可以用过滤器也可以用拦截器用哪一个才是合理的呢那么如果有一个原则使用起来就会更加合理。实际上这个原则是有的
把整个项目的流程比作一条河那么监听器的作用就是能够听到河流里的所有声音过滤器就是能够过滤出其中的鱼而拦截器则是拦截其中的部分鱼并且作标记。所以当需要监听到项目中的一些信息并且不需要对流程做更改时用监听器当需要过滤掉其中的部分信息只留一部分时就用过滤器当需要对其流程进行更改做相关的记录时用拦截器。
拦截器这个要详细讲述一下了上一篇文章说到Spring的配置文件应该扫描service层及以下SpringMvc的配置文件应该扫描controller层 我们在service层如果想做日志的话可以使用spring aop特性在spring.xml中配置aspect即可那么如果想在controller层做日志相应地在SpringMvc.xml中应该怎么配置呢
这个时候就需要拦截器它其实也是一种aop的实现(aop本身是一种思想)而且这种实现本质上和aspect是一样的只是做了更多的事情我们当然可以在SpringMvc.xml中也配置aspect不过现在有一个更好的实现为什么不用呢。
生命周期
1.servlet
servle的生命周期开始于被装入web服务器的内存中并在web服务终止或者重新装入servlet的时候结束
servlet一旦被装入web服务器一般不会从web服务器内存中删除直到web服务器关闭
装入启动服务器时加载servlet的实例
初始化web服务器接收到请求时或者两者之间的某个时刻启动调用init
调用从第一次到以后的多次访问都只调用doGet或dopost方法
销毁停止服务器时调用destroy方法销毁实例
2.filter
需要实现javax.servlet包的Filter接口的三个方法initdoFilterdestroy
加载启动服务器时加载过滤器的实例并调用init方法
调用每次请求的时候只调用方法doFilter进行处理
销毁服务器关闭前调用destroy方法销毁实例
3.listener
web.xml的加载顺序是context-param-listener-filter-servlet
4.interceptor
加载配置文件后初始化拦截器当有对action的请求的时候调用interceptor方法最后也是根据服务器停止进行销毁
执行流程 参考博客https://blog.csdn.net/Jintao_Ma/article/details/52972482 https://www.cnblogs.com/heyanan/p/9591670.html