servlet三大组件之过滤servlet(Filter)

servlet三大组件

包含普通servlet,过滤servlet,监听servlet

这篇文章主要说一下Filter
在这里插入图片描述
先快速入门一下
注解是如何配置的
@WebFilter("/*")这个就是会拦截所有的访问,它会考虑是否放行,filterChain.doFilter(servletRequest,servletResponse);这行代码就是我们所说的放行。
在这里我说一下
@WebFilter的常用属性
在这里插入图片描述
过滤器的使用场景
* @Description:filter的三种典型应用:
* 1、可以在filter中根据条件决定是否调用chain.doFilter(request, response)方法, 即是否让目标资源执行
* 2、在让目标资源执行之前,可以对request\response作预处理,再让目标资源执行
* 3、在目标资源执行之后,可以捕获目标资源的执行结果,从而实现一些特殊的功能
详细讲一下
web.xml文件如何配置

<filter>
    <filter-name>demo1</filter-name>
    //这里指明filter的文件存放位置
    <filter-class>cn.rong.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
	//filter文件的名字要和上面的filter-name进行匹配
    <filter-name>demo1</filter-name>
    //这里设置的就是filter过滤的路径请求
    //拦截路径
    <url-pattern>/*</url-pattern>
</filter-mapping>

过滤器的生命周期
过滤器也是有三个方法:
初始化方法init()---->只会执行一次,通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

说起这个初始化就要看一下这个方法中的这个参数
FilterConfig config
用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,
调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。
因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得

String getFilterName():得到filter的名称。
String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
public ServletContext getServletContext():返回Servlet上下文对象的引用。

主题方法doFilter()-----》每次拦截时都会执行
还有销毁方法destroy()-----》只会执行一次
而我们对于过滤器的执行流程:
在拦截请求时,过滤器主体方法会从方法的其实位置开始执行,然后执行到放行位置,在服务器处理完相应的请求之后,服务器执行放回,而返回位置的执行地方就是在放行位置的下一行,
我们可以设置过滤器的访问方式
给注解配置dispatcherTypes属性
1.Request:默认值。浏览器直接请求资源
2.ForWard:转发访问资源
3.Include。包含访问资源
4.Error:错误访问资源
5.ASYNC:异步访问资源
在web.xml文件中配置时
在filter-mapping标签中配置
dispatcherTypes标签属性

过滤器链
其实就是按照栈的方式进行拦截
但是过滤器的先后顺序是怎么回事呢?
注解配置:
他们的入栈方式是按照过滤器名字的字符串大小进行排序的,小的先执行,先入栈
web.xml文件的配置:
他们就是filter-mapping谁定义在文件的上面,谁先执行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值