Filter (一)
来源:互联网 发布:伍迪艾伦 知乎 编辑:程序博客网 时间:2024/06/05 11:58
理解Filter的执行顺序。
我们可以在web.xml中定义多个Filter,顺序很重要,从上往下的顺序。doFilter方法中的chain.doFilter(request, response)这一句,就是处理完当前这一句代码之前的代码后,接着处理下一个Filter。
执行顺序如下,假设有N个Filter,这里是三个。
web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>TestFilter</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>MyServlet</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.test.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
<filter>
<display-name>Filter1</display-name>
<filter-name>Filter1</filter-name>
<filter-class>com.test.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<display-name>Filter2</display-name>
<filter-name>Filter2</filter-name>
<filter-class>com.test.Filter2</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<display-name>Filter3</display-name>
<filter-name>Filter3</filter-name>
<filter-class>com.test.Filter3</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter3</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
servlet如下:
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("这里是处理servlet的代码。");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
下面是三个Filter:
public class Filter1 implements Filter {
/**
* Default constructor.
*/
public Filter1() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("------> Filter 1 中 chain.doFilter(request, response) 之前的代码");
chain.doFilter(request, response);
System.out.println("------> Filter 1 中 chain.doFilter(request, response) 之后的代码");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
-------------------------------------
public class Filter2 implements Filter {
/**
* Default constructor.
*/
public Filter2() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("------> Filter 2 中 chain.doFilter(request, response) 之前的代码");
chain.doFilter(request, response);
System.out.println("------> Filter 2 中 chain.doFilter(request, response) 之后的代码");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
------------------------------------
public class Filter3 implements Filter {
/**
* Default constructor.
*/
public Filter3() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("------> Filter 3 中 chain.doFilter(request, response) 之前的代码");
chain.doFilter(request, response);
System.out.println("------> Filter 3 中 chain.doFilter(request, response) 之后的代码");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
执行结果如下:
在浏览器中输入http://localhost:8080/TestFilter/MyServlet执行,控制台打印如下:
------> Filter 1 中 chain.doFilter(request, response) 之前的代码
------> Filter 2 中 chain.doFilter(request, response) 之前的代码
------> Filter 3 中 chain.doFilter(request, response) 之前的代码
这里是处理servlet的代码。
------> Filter 3 中 chain.doFilter(request, response) 之后的代码
------> Filter 2 中 chain.doFilter(request, response) 之后的代码
------> Filter 1 中 chain.doFilter(request, response) 之后的代码
- Filter (一)
- ---Filter(一)简介
- 深入浅出DirectShow Filter(一)
- 深入浅出DirectShow Filter(一)
- Filter的使用(一)
- 深入浅出DirectShow Filter(一)
- java过滤器(filter)一
- Filter的使用方法(一)
- 过滤器基础知识--Filter(一)
- Filter(一)
- Mina框架中的filter (一)解码器
- Mina框架中的filter (一)编码器
- CSS中的Filter样式特效(一)
- ORACLE TEXT FILTER PREFERENCE(一)
- servlet Filter(过滤器)讲解一
- Filter(一)配置及生命周期
- AngularJS-Filter的用法(一)
- 个人学习之filter (一)
- 第三篇 AS的插入排序
- 商品混凝土搅拌站组成
- 多线程中遇到ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);如何解决
- 【日记】感谢游戏,戏里戏外
- PL/SQL链接oracle成功能用sql查却无法显示表名的解决办法
- Filter (一)
- NativeActivity 使用那个 Tracer for OpenGL ES
- adapter和listview
- 数列通项的求法(一)
- Makefile自动依赖
- iOS- CoreData 数据库管理
- hdu1230 火星A+B
- Phalcon+PHP+win8.1+iis fastcgi+配置
- Cocos2d-x实现简易翻牌效果