day19JavaWeb(filter过滤器)


JavaWeb三大组件
1、都需要在web.xml中进行配置
    Servlet
    Listener(2个感知监听器不需要配置)
    Filter
2、过滤器
    它会在一组资源(jsp、servlet、.class、.html)的前面执行
    可以让请求得到目标资源,也可以不让请求达到
        过滤器有拦截请求的能力
    如果在拦截范围内 那么都会拦一次
    登录:
        允许它访问AServlet、BServlet、CServlet

过滤器如何编写
1、写一个类实现Filter
2、在web.xml中进行配置

Filter

void init(FilterConfig)
    创建之后马上执行 Filter会在服务器启动时就创建
void destroy()
    销毁之前执行。在服务器关闭时
void doFilter(ServletRequest,ServletResponse,FilterChain)
    每次过滤时都会执行

Filter是单例的。 
web.xml
<filter>
    <filter-name>xxx</filter-name>
    <filter-calss>my.web.filter.AFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>xxx</filter-name>
    <url-patter>/*</url-pattern
</filter-mapping>

FilterConfig(与ServletConfig相似)
    获取初始化参数:getInitParameter()
    获取过滤器名称:getFilterName()
    获取application:getServletContext()

FilterChain
    doFilter(ServletRequest,ServletResponse):放行
    放行,就相当于调用了目标的   Servlet的service()方法

多过滤器
    FilterChain#doFilter()方法
        执行目标资源,或是执行下一个过滤器。如果没有下一个过滤器那么执行的是目标资源,如果有,那么就执行下一个过滤器

过滤器的四种拦截方式
    请求 REQUEST
    转发 FORWARD
    包含 INCLUDE
    错误 ERROR
        <dispatcher>REQUEST</dispatcher> 默认的 如果有其他的那么没默认的
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
在<filter-mapping>里面配置   

多个过滤器的执行顺序
在<filter-mapping>的配置顺序决定了过滤器的执行顺序

过滤器的应用场景
    执行目标资源之前做预处理工作,例如设置编码,这种通常会放行,几乎所有的Servlet中都需要写request.setCharacterEncoding()可以放到Filter中
    通过条件判断是否放行,例如检验当前用户是否登录 或者用户ip是否被禁用
    在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理:回程连接

在<servlet-mapping>中可以使用<servlet-name></servlet-name>    过滤指定的servlet







猜你喜欢

转载自blog.csdn.net/Entermomem/article/details/83856791