b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

jsp - filter过滤器使用详解(7)

电脑杂谈  发布时间:2017-12-25 20:08:08  来源:网络整理

<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
</servlet-mapping>

映射一个路径下的所有请求。

<servlet-mapping>
    <servlet-name>EncodingFilter</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

需要注意的是,这种写法必须以/开头,写成与绝对路径的形式,即便是映射所有请求也要写成/,不能简化成。

映射结尾相同的一类请求。

<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

需要注意的是,这种请求映射就不能指定某一路径了,它必须是以星号()开始字母结尾,不能写成/.do的形式。

我们使用了两个过滤器,EncodingFilter负责设置编码,SecurityFilter负责控制权限,那这两个过滤器是怎么起作用的呢?

所有的奥秘就在Filter中的FilterChain中。服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。执行的顺序就如上图所示,执行第一个过滤器的chain.doFilter()之前的代码,第二个过滤器的chain.doFilter()之前的代码,请求的资源,第二个过滤器的chain.doFilter()之后的代码,第一个过滤器的chain.doFilter()之后的代码,最后返回响应。

代码执行顺序是:

(1)执行EncodingFilter.doFilter()中chain.doFilter()之前的部分:request.setCharacterEncoding(“gb2312”);

(2)执行SecurityFilter.doFilter()中chain.doFilter()之前的部分:判断用户是否已登录

(3)如果用户已登录,则访问请求的资源:/admin/index.jsp

(4)如果用户未登录,则页面重定向到:/failure.jsp

(5)执行SecurityFilter.doFilter()中chain.doFilter()之后的部分;

(6)执行EncodingFilter.doFilter()中chain.doFilter()之后的部分;

说的简单点就是filter将按照在web.xml文件中的声明顺序调用。

过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。

要特别注意过滤链的执行顺序问题,像EncodingFilter就一定要放在所有Filter之前(在web.xml文件中),这样才能确保在使用请求中的数据前设置正确的编码。

我们已经了解了filter的基本用法,还有一些细节配置在特殊情况下起作用。

在servlet-2.3中,Filter会过滤一切请求,包括服务器内部使用forward转发请求和<%@ include file=”/index.jsp”%>的情况。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55857-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...