Spring学习笔记(九):Spring拦截器和java过滤器的区别

来源:互联网 发布:seo与sem有和区别 编辑:程序博客网 时间:2024/06/10 16:40

1、如图:
这里写图片描述
2、多个拦截器的执行顺序,如下图:
这里写图片描述
3、web.xml中过滤器:
(1)过滤器也是java组件;
发生在用户请求之后,调用Servlet之前,所以Servlet对过滤器一无所知
(2)请求过滤器:(注:请求过滤器和响应过滤器都是实现了filter接口,没有所谓的requestFilter和responseFilter )
完成安全检查;
重新格式化请求首部或体;
建立请求日志
响应过滤器:
压缩响应流;
追加或修改响应流;
创建一个完全不同的响应;
(3)过滤器的生命周期:
init()
doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
destroy()
(4)FilterChain是什么?
过滤器世界里,最酷的就要属FilterChain了。过滤器(更不用说servlet)并不知道请求所涉及的其他过滤器,但是必须有人知道过滤器执行的顺序才行,这就是FilterChain。它由DD中指定的filter元素驱动
(5)chain.doFilter()是干嘛的?
这个是为了明确接下来调用chain中的哪个过滤器(如果到了链尾,就调用servlet的service()方法),filter接口中的doFilter方法只是为了完成过滤。
(6)servlet-name和url-pattern会影响filterChain的顺序。

如下web.xml,

    <filter-mapping>        <filter-name>Filter1</filter-name>        <url-pattern>/Test/*</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>Filter2</filter-name>        <servlet-name>/Test/First.do</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>Filter3</filter-name>        <url-pattern>/Test/Add/*</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>Filter4</filter-name>        <servlet-name>/Test/Modify/Update.do</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>Filter5</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

对应的请求路径,调用顺序如下:
/Test/Second.do ————–1、5
/Test/First.do——————-1、5、2
/Test/Modify/Update.do——-1、5、4
/Demo.do———————–5
/Test/Add/A.do—————–1、3、5

0 0