代码中有些注释不是关于filter的,是和重定向/转发以及访问不屈安资源有关的,

先来看一下

demo构造图

第一步、先看一下web.xml文件,Tomcat启动时就会加载并初始化过滤器
把稳:过滤器的实行顺序和web.xml文件中顺序是一样的,从上往下依次实行。

web.xml文件

jsp如何调用音频绝对路径Shiro过滤器1先从filter路径开端讲起 CSS

第二步、编码过滤器,阐明在后面,先看代码。

编码过滤器

第三步、记录日志过滤器

日志过滤器

下面开始测试:

1)当我们启动Tomcat时,会发生什么事呢?来看一下日志。

启动tomcat

2)在地址栏中输入:http://localhost:8080/FilterTest/

index.jsp

在web.xml中默认访问首页是index.jsp。

index.jsp页面内容

此时过滤器事情流程是:

访问index.jsp时,过滤器的实行过程

从中我们可以看出,先实行了EncodingFilter中的doFilter()方法,然后在实行chain.doFilter(request, response);时,创造后面还有LogFilter()过滤器,就急速跳转实行LogFilter中的doFilter()方法,然后在实行chain.doFilter(request, response);时,后面已经没有过滤器了,将本过滤器中的doFilter()方法实行完之后有跳回到EncodingFilter中的doFilter()的chain.doFilter(request, response);的下一行,有点类似于中断嵌套的意思,自行体会吧。

3)接着再看一个表单提交的例子

form表单

<!-- 定义一个测试用的servlet -->

<servlet>

<servlet-name>filterTest</servlet-name>

<servlet-class>cn.uestc.chengdu.servlet.FilterTestServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>filterTest</servlet-name>

<url-pattern>/filterTest</url-pattern>

</servlet-mapping>

同样的,在地址栏输入:http://localhost:8080/FilterTest/filterTestForm.jsp,过滤器也会对其进行阻拦,这个和上一个是一样的,实质都是一次对做事器的访问。

filterTestForm.jsp

掌握台打印的日志如下:

4)点击提交表单,此时与提交干系的servlet如下,先测试转发时过滤器的事情流程:

表单内容

FilterTestServlet转发

掌握台日志如下:

success.jsp页面如下:

success.jsp页面

看到这里我们基本上就明白了:由于我们在web.xml文件中配置的是/,表示过滤所有要求,以是每次都会经由过滤器,FilterTestServlet类中我们用的是第24行代码,也便是转发,现在换成用31行的重定向来试试会有什么效果。

将FilterTestServlet类改成如下:

再次提交表单,看一下日志会打印出什么内容:

很明显,地址栏发生了改变,日志内容也比上次多了很多,缘故原由在于重定向是客户端重新向做事器发送要求,以是过滤器又会拦截一次。

5)下面

要求:从客户端--->做事器(Servlet)过程称为要求。
由客户端发出比如登录表单操作。

相应:从做事器---->客户端过程称为相应。
做事器向登录表单做出相应结果(无论登录是否成功)。

转发是同次要求(由做事器在它自己内部要求下一个资源)。
重定向是多次要求(由做事看重定向到客户端,由客户端要求下一个资源)。
一句话总结:转发是由做事器发出要求,重定向是由客户端发出要求。

6)重定向和转发相对路径和绝对路径问题

把稳:转发和重定向的URLString前有加 / 为绝对路径 反之为相对路径

1.我们这里通过表单要求指定的Url资源 action=\"大众filterTest\"大众 ,那么则表单天生的要求地址为:

http://localhost:8080/FilterTest/filterTest

2.在servlet处理要求之后重定向到下面指定资源

参数可以指定为相对路径或绝对路径或web运用程序。

①相对路径:response.sendRedirect(\"大众redirect.jsp\公众)天生的地址:原来要求地址+参数天生完全的URL即:http://localhost:8080/FilterTest/redirect.jsp

这个已履历证了。

②绝对路径:response.sendRedirect(\公众/AbsolutePath/absolutePath.jsp\"大众)天生的地址:web做事器本身地址+参数天生完全的URL 即:http://localhost:8080/AbsolutePath/absolutePath.jsp。
很明显,这是不对的。

如图所示:

正解如下:

下面

项目目录构造

FilterTestServlet变动及日志如下:

跳转结果如下:

重定向

③其他web运用地址response.sendRedirect(\公众http://www.baidu.com\"大众) 容器直接定向到该URL。

上述的结论

下面再说本日的末了一个问题,访问静态资源文件,在WEB-INF里的资源外界是无法访问的,由此可以知道,如果想用重定向肯定是不可能的,缘故原由是重定向便是外界直接访问的意思,而只能有转发:也便是做事器内部自己访问。
项目构造及干系代码如下:

运行结果:

大功告成了!
本日就先说这么多吧,本来是只想聊聊过滤器的,结果啰嗦了这么多,如果你以为小编的文章对你有用,请点赞支持一下!
感激啦!