这篇文章主要介绍了Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)过滤器doFilter里chain.doFilter()函数的理解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
目录
对过滤器doFilter里chain.doFilter()函数的理解过滤器Filterchain.doFilter()
对过滤器doFilter里chain.doFilter()函数的理解
关于chain.doFilter()函数在最近的使用中不是很理解,但是考虑到他是过滤器。过滤器顾名思义就是在执行某件事情的时候开始之前。
开始进行处理的叫做过滤处理。一个方法,一个类就是充当过滤器的角色。它是在一个容器(类似于Tomcat)启动之后,打开一网站,他就会根据配置就行过滤处理。
doFilter()方法就是过滤器的主要方法,init()方法就是在容器启动的时候执行的doFilter()方法中的chain.doFilter(请求,响应)方法刚开始还有些不怎么理解。现在有一点明白了。
doFilter(请求,响应)的方法就是在你打开一个页面当满足过滤器的条件的时候,他就会继续执行你打开页面时候的操作。同时如果你使用了httpservletrequest和httpservletResponse的话,获取servletPath的值就是你要打开的文件的地址。
例子如下:
公共void doFilter(ServletRequest请求,ServletResponse响应,滤波器链链)引发IOException,ServletException {
http servlet请求req=(http servlet请求)请求;
http servlet响应resp=(http servlet响应)响应;
字符串servlet path=req。get servlet path();
http会话session=req。getsession();
String flag=(String)会话。get属性(“flag”);
if(servletPath!=null(servlet路径。等于(/03/index。JSP )| | servlet路径。等于(/03/登录。JSP )| | servlet路径。equals(/log in servlet 17 ){
chain.doFilter(请求,响应);
}否则{
如果(旗帜!=空标志。等于( log in _ success ){
chain.doFilter(请求,响应);
}else if(flag!=空标志。等于( log in _ error ){
req.setAttribute(msg ,登录失败,请重新登录);
req.setAttribute(return_uri ,servlet路径);
请求调度程序rd=req。getrequest调度程序(/03/登录。JSP’);
研发转发(请求,响应);
}否则{
req.setAttribute(msg ,你尚未登录);
req.setAttribute(return_uri ,servlet路径);
请求调度程序rd=请求。getrequest调度程序(/03/登录。JSP’);
研发转发(请求,响应);
}
}
系统。出去。println(servlet路径);
}
过滤器Filterchain.doFilter()
容器在加载的时候,会读取web.xml中的过滤器/过滤器,根据指定的类路径来实例化过滤器。
那么过滤器究竟是用来做什么的呢?
顾名思义,过滤器肯定是过滤我们不想要的东西。所以说执行肯定是在我们访问某个页面之前。所以发散开来,它也可以执行一些我们在访问某个页面,或者某些页面之前想要的操作。
那么:
a.什么是过滤器?过滤器和普通类有什么区别?
b.过滤器中的chain.doFilter()起什么作用?
所以说chain.doFilter(请求,响应)是过滤器的必要操作,目的是如果有多个过滤器需要处理同一个全球资源定位器(统一资源定位器)时把请求传给下一个过滤器。
c.过滤器的处理的先后顺序?
小型应用程序映射
servlet-name我的servlet/servlet-name
全球资源定位器(Uniform Resource Locator)模式/foo*/url模式
/servlet-映射
过滤映射
过滤器名称服务过滤器/过滤器名称
URL模式我的servlet/URL模式
/过滤器-映射
过滤映射
过滤器名称我的过滤器/过滤器名称
全球资源定位器(Uniform Resource Locator)模式/foo*/url模式
/过滤器-映射
过滤映射
过滤器名称另一个过滤器/过滤器名称
全球资源定位器(Uniform Resource Locator)模式/foo/bar/url模式
/过滤器-映射
如果请求访问的普通URL是/foo/bar,那么它将匹配所有三个过滤器。过滤器链将由三个过滤器组成,分别是myFilter、anotherFilter和servletFilter。MyFilter将在anotherFilter之前执行,因为这是它们在部署描述符中出现的顺序。它们都将在ServletFilter之前执行,因为URL映射总是在servlet名称映射之前执行。
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。