(Filter)过滤器的使用
过滤器(Filter)的简介
过滤器(Filter): 能够完成筛选不需要数据的工具(东西).
类似于生活中的净水器,香烟过滤嘴,滤纸, 收费站等.------->单向的.
Web中: 过滤器其实就是服务端的一个程序(程序的最小单元就是类). 在Web开发中,过滤器其实就是一个Web组件(Servlet/Filter/Listener),其实就是一个特殊的类. 一个类实现javax.servlet.Servlet接口:--->Servlet类. 一个类实现javax.servlet.Filter接口:----->Filter类.
过滤器的作用: 过滤器可以对所有的请求或者响应做拦截操作.
1:以常规的方式调用资源(Servlet/JSP);
2:利用修改过的请求信息调用资源;
3:调用资源之后,但在响应到客户端之前,对响应做出修改;
4:阻止当前资源调用,代之转到其他资源.
Filter的开发和使用
开发Filter
(1):自定义一个类(XxxFilter,Xxx表示功能名),实现于javax.servlet.Filter接口.
(2):在web.xml中做配置,告诉Tomcat来帮我管理这一个类(负责了该类的生命周期).
使用:@WebFilter("/hello.jsp")
或者在web.xml里面设置拦截器
<filter>
<filter-name>XxxFilter</filter-name>
<filter-class>XxxFilter类的全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>XxxFilter</filter-name>
<!--表示:当前Filter只对哪些资源做过滤/拦截操作,只对hello.jsp做拦截-->
<url-pattern>/hello.jsp</url-pattern>
</filter-mapping>
Filter的生命周期方法
(1):void init(FilterConfig config): 初始化方法
(2):void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):执行过滤的方法(每一次请求都会执行过滤)
(3):void destroy():销毁方法 执行的流程: 在启动Tomcat服务器的时候,就会执行构造器和init方法. 构造器--->init方法 -----> ( doFilter方法 )N次------->destroy方法
chain:链,链条,多个链的节点组合而成.
FilterChain:过滤器链,多个过滤器按照一定的顺序排列在一起.
FilterChain.doFilter(req,resp):放行(放行给下一个Filter或资源)
Filter映射细节
1、多个Filter共存的时候,拦截的先后顺序由谁来决定?
由<filter-mapping>的配置先后顺序来决定.
2、Filter的对哪些资源做过滤.:
<url-pattern>被过滤的资源名称</url-pattern>
<url-pattern>/hello.jsp</url-pattern>:只对/hello.jsp做过滤.
<url-pattern>/*</url-pattern>:对所有的资源做过滤操作.
<url-pattern>/system/*</url-pattern>:只对以/system/打头的资源做过滤.
<url-pattern>*.do</url-pattern>:只对以.do结尾的资源做过滤
3、可以通过<init-param>元素来给当前Filter配置初始化参数.
通过FilterConifg对象.getInitParameter(String name)来获取初始化参数.
4、Servlet,Filter,Listener都属于Web组件.
一般的,先配置监听器,再配置过滤器,最后配置Servlet.
5、<filter-mapping>中的子元素<dispatcher>表示对哪些操作执行过滤.
<!-- 缺省情况:REQUEST -->
<dispatcher>REQUEST</dispatcher>
<!-- 对请求转发做拦截 -->
<dispatcher>FORWARD</dispatcher>
<!-- 对请求包含做拦截 -->
<dispatcher>INCLUDE</dispatcher>
<!-- 出错之后再跳转到全局的结果视图之前做拦截 -->
<dispatcher>ERROR</dispatcher>
请求编码过滤器:CharacterEncodingFilter
后期继续补充~
下一篇: PywebLesson02
推荐阅读
-
HDFS中JAVA API的使用
-
苹果全新MacBook Pro上添加指纹和银行卡的使用教程
-
在windows下使用淘宝的nginx插件 nginx_concat_module (附下载地址)
-
CorePlex的安装、配置和使用图文教程
-
C#使用checkedListBox1控件链接数据库的方法示例
-
详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用
-
使用spring的IOC解决程序耦合的方法
-
解决Intellij IDEA 使用Spring-boot-devTools无效的问题
-
java中final修饰符的使用方法
-
使用vue-router切换页面时,获取上一页url以及当前页面url的方法