chain.dofilter作用,chain.dofilter后面的语句还可以执行么,Java过滤器doFilter里chain.doFilter()函数的理解

chain.dofilter作用,chain.dofilter后面的语句还可以执行么,Java过滤器doFilter里chain.doFilter()函数的理解

这篇文章主要介绍了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名称映射之前执行。

以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: