Filter接口源代码:
public abstract interface Filter{ public abstract void init(FilterConfig paramFilterConfig) throws ServletException; public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) throws IOException, ServletException; public abstract void destroy(); }
Filter的工作原理:
Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法 。
Filter开发步骤:
Filter开发分为2步:
* 编写java类实现Filter接口,并实现其doFilter方法。
* 在web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源。
示例:
filter示例代码:
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * @author yangcq * @description 过滤器Filter的工作原理 */ public class FilterTest implements Filter{ public void destroy() { System.out.println("----Filter销毁----"); } public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException { // 对request、response进行一些预处理 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); System.out.println("----调用service之前执行一段代码----"); filterChain.doFilter(request, response); // 执行目标资源,放行 System.out.println("----调用service之后执行一段代码----"); } public void init(FilterConfig arg0) throws ServletException { System.out.println("----Filter初始化----"); } }
web.xml里配置filter:
- <filter>
- <description>过滤器名称</description>
- <filter-name>自定义的名字</filter-name>
- <filter-class>com.yangcq.filter.FilterTest</filter-class>
- <!--配置FilterTest过滤器的初始化参数-->
- <init-param>
- <description>配置过滤器的初始化参数</description>
- <param-name>name</param-name>
- <param-value>gacl</param-value>
- </init-param>
- <init-param>
- <description>配置FilterTest过滤器的初始化参数</description>
- <param-name>like</param-name>
- <param-value>java</param-value>
- </init-param>
- </filter>
Filter链:
在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了ilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,
如果没有,则调用目标资源。
相关推荐
Java三大器过滤器&拦截器&监听器实现,其中每一个包都能单独运行,但是全部一起运行时会报错,原因是SpringBoot有关@Bean注入的问题,作者学艺不精只有待以后学懂后改,大家先将就看,源码解析及有关Java三大器理解...
python基础(补充):python三大器之迭代器
python基础(补充):python三大器之装饰器
python基础(补充):python三大器之生成器
[“大器之才”阅读答案] 大器之才的阅读答案.docx
大器之才的意思是什么参考.doc
动力电池-国之大器,锂电崛起.pdf
动力电池:国之大器,锂电崛起.pdf
动力电池-国之大器,锂电崛起.zip
焕华真意 敦厚大器
multisim仿真,低频功率发大器
免杀过云杀专用。可以把文件虚胖到几百M,轻松过云杀压缩后仍然原体积压缩,释放后几百M。干什么你懂得
第三步:把darqi目录下的子目录images读写权限设成777,这个是为图片本地化用的,如果设置不同目录存放,则要将该目录读写权限设置成777; 第四步:将压缩包中cron目录下的文件cron_darqi_auto.php上传到你的论坛...
非常大器漂亮实用的查询源码,从www.39ca.com(39查询大全)弄下来的
大器新闻采集1.5.0 FOR DZ!X1.5 UTF-8
谐振功率防大器ok原理PPT学习教案.pptx
大器新闻采集1[1].5.0 FOR Discuz!X1.5
懂此言-日后必成大器(人生箴言).doc
初中语文文摘历史“大器晚成”的“大器”是什么