JavaWeb的三大组件
JavaWeb三大组件分别对应的是Servlet、过滤器Filter、监听器Listener。
过滤器的介绍
过滤器是一个服务器端的组件,它可以拦截客户端的请求和响应信息,并对这些信息进行过滤。
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继续执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。当执行完成Servlet的代码后,还会执行Filter后面的代码。
过滤器(Filter):就是当用户请求资源时,过滤器先对其进行拦截,做一些统计,判断,中文乱码、权限校验处理等等操作,然后再放行。
大致图解:
![](https://img-blog.csdnimg.cn/img_convert/6a6000a9579e303ad61e7d1313384be0.png)
详细图解:
![](https://img-blog.csdnimg.cn/img_convert/e12e4ffe94bac9b00b19ddfe38ea9979.png)
过滤器生命周期:
1:启动服务器是加载过滤器的实例,并调用init()方法来初始化实例
2:每次请求都会调用doFilter()方法
3:关闭服务器时调用destory()方法来销毁实例。
Filter是单例的,这个特性和Servlet一样
过滤器链中的过滤器的执行顺序:在xml中,根据filter-mapping标签在web.xml中顺序决定的(自上而下的顺序)。
![](https://img-blog.csdnimg.cn/img_convert/278242969fd798859fc67f8b435ce995.png)
过滤器的四种拦截方式
<dispatcher>REQUEST</dispatcher> 默认的! //拦截直接请求方式
<dispatcher>FORWARD</dispatcher> //拦截请求转发方式
<dispatcher>INCLUDE</dispatcher> //拦截请求包含方式
<dispatcher>ERROR</dispatcher> //拦截错误转发方式
如何配置过滤器的拦截方式?
在web.xml的<filter-mapping>中进行配置。添加一句:<dispatcher>拦截方式</dispatcher>即可
小结:
1. Filter的生命周期三个方法:
void init(FilterConfig):在Tomcat启动后被调用;
void destroy():在Tomcat关闭前被调用;
void doFilter(ServletRequest,ServletResponse,FilterChain):每次有请求时都调用该方法;
2. FilterChain类:
void doFilter(ServletRequest,ServletResponse):放行!表示执行下一个过滤器,或者执行目标资源。
可以在调用FilterChain的doFilter()方法的前后添加功能,在FilterChain的doFilter()方法之前的功能会在目标资源执行之前执行,在FilterChain的doFilter()方法之后的功能会在目标资源执行之后执行。
3. 四各拦截方式:REQUEST、FORWARD、INCLUDE、ERROR,默认是REQUEST方式。
REQUEST:拦截直接请求方式;
FORWARD:拦截请求转发方式;
INCLUDE:拦截请求包含方式;
ERROR:拦截错误转发方式;
监听器的介绍
监听器(Listener):就是监听事件的发生,如果事件发生,那么执行相应的代码。
生活中的例子:自动门,摄像头等。生活中的监听器,例如商场摄像头,可以监视客户的一举一动。如果客户有违法行为,商场可以采取相应的措施。
监听器就是监听某个对象的的状态变化的组件。Servlet API中提供了一个Listener接口,如果编写的类实现了这个接口,则称这个类为监听器。