Filter过滤器
来源:互联网 发布:淘宝刷手p图软件哪个好 编辑:程序博客网 时间:2024/06/06 10:31
Filter时servlet的一个高级特性,Servlet 发 Filter也是体现设计模式中的Filter;Filter是职责链模式的一种体现, 对于Filter而言就是,请求传给具体的web资源(比如jsp/servlet)之前要经过Filter的预处理,在web资源处理完成返回给客户端之前也要被Filter处理一遍。指责链喔给大家说一例子:好比一个来百姓要上京告御状,告的证实皇上的大舅子,因为这个大舅子在民间以强权其他百姓,现在百姓要状告他。告御状要把状纸呈上去,先给了地方芝麻县令,县令一看这是我管不了,就上传到知州,知府,按察使...等等...最后到皇上手中,一看大怒,后面就不说了。这个传递的过程就是一个职责链,每个部分都有相应的职责,谁能处理就要谁来处理。Filter只不过是在职责链上加了一个条件,就形成了过滤器。(这是我的理解,哪位有不同的理解,可以一起探讨学习)
Filter是servlet的高级特性,那当然也是servlet的一种;Filter需要实现Java中的Filter接口。其运行过程同servlet大经相同,只不过是把doGET和doPOST方法改装成为doFilter了,要在xml文件中配置;但是和servler不同servlet是在servlet的init方法第一次被访问时执行,而Fliter的init是在容器初始化时被执行。
Filter的执行过程:
package com.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;
import javax.servlet.annotation.WebFilter;
/**
* Servlet Filter implementation class filterOne
*/
@WebFilter("/filterOne")
public class filterOne implements Filter {
/**
* Default constructor.
*/
public filterOne() {
// TODO Auto-generated constructor stub
System.out.println("====构造函数=====");
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
System.out.println("====销毁方法=====");//
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
System.out.println("====执行dofilter方法=====");
// pass the request along the filter chain
chain.doFilter(request, response);//调用此方法奖执行下一个组件
System.out.println("====结束doFliter方法=====");
}/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("====初始化方法====");
String initParam=fConfig.getInitParameter("param");//获取配置参数
System.out.println(initParam);
}
}
xml文件配置:
<filter>
<filter-name>filterone</filter-name>
<filter-class>com.filter.filterOne</filter-class>
<init-param>
<param-name>param</param-name>
<param-value>likang</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filterone</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter会在tomcat服务器启动的时候调用构造函数,我初始化方法。在调用servlet时调用Fliter的doFliter方法,doFilter会在setvlet中的service调用之前进行调用,起到过滤作用,在service方法执行完毕,调用chain.doFilter(request, response)方法。
Filter是一个弹性的机制,功能强大,而且与servlet和jsp没有耦合,可以自由拆卸。Filter是现在Aop(面向切面编程)的思想的一种体现。如果有多个Filter要注意配置顺序,放置相互影响;
以上是我在学习Filter时总结的,望大家多多指教,共同进步;
- 过滤器Filter
- 过滤器Filter
- Filter 过滤器
- 过滤器 filter
- 过滤器filter
- 过滤器,Filter
- 过滤器Filter
- filter--过滤器
- 过滤器Filter
- filter过滤器
- Filter过滤器
- filter过滤器
- Filter过滤器
- Filter过滤器
- Filter 过滤器
- Filter过滤器
- Filter(过滤器)
- filter过滤器
- 我用Python写自动刷代理服务IP的经过
- leatcode 6. ZigZag Conversion
- lightoj - 1193 - Dice (II) dp / 背包
- implement of deep neural network --- python
- Problem O
- Filter过滤器
- leetcode4:Median of Two Sorted Arrays
- 《第一行代码2》
- java中子类与父类的同名变量覆盖问题
- 【Spark】Spark基本概念
- Android——AS的Refactor下拉菜单Rename的作用
- [leetcode] 24. Swap Nodes in Pairs
- day23
- 【Web】JavaScript中Node节点的CURD