java 过滤器 拦截器 监听器


过滤器:Filter 
实现javax.servlet.Filter接口.基于函数回调,依赖servlet容器。可以对几乎所有的请求起作用。
在web.xml文件配置,随web应用启动而启动,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁
用于过滤字符编码,业务逻辑判断.判断登录,权限等.
拦截器: interceptor
面向切面编程应用的,基于java反射机制.配置在使用的框架的配置文件中.
拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次


执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 -过滤后个人认为过滤是一个横向的过程.
首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);
过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;
Action处理完成返回后,拦截器还可以做其他过程,再向上返回到过滤器的后续操作。

监听器:Listener  
实现javax.servlet.ServletContextListener接口.监听这个servlet容器.
就是监听application,request,response.这3个对象的创建,销毁,和它们的属性发生的变化.
用于做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等
在web.xml文件配置,随web应用启动而启动,只初始化一次,随web应用的停止而销毁.

把整个项目的流程比作一条河,那么监听器的作用就是能够听到河流里的所有声音,
过滤器就是能够过滤出其中的鱼,而拦截器则是拦截其中的部分鱼,并且作标记。
所以当需要监听到项目中的一些信息,并且不需要对流程做更改时,用监听器;
当需要过滤掉其中的部分信息,只留一部分时,就用过滤器;当需要对其流程进行更改,做相关的记录时用拦截器。

你可能感兴趣的:(JavaWeb,java)