java Filter___ 顺序(一)

一直没有仔细去研究下filter ,最近系统的测试了下:

先看代码吧

Java代码 复制代码
  1. FirstFilter.java
  2. ==================
  3. packagecom.test.filter;
  4. importjava.io.IOException;
  5. importjavax.servlet.Filter;
  6. importjavax.servlet.FilterChain;
  7. importjavax.servlet.FilterConfig;
  8. importjavax.servlet.ServletException;
  9. importjavax.servlet.ServletRequest;
  10. importjavax.servlet.ServletResponse;
  11. publicclassFirstFilterimplementsFilter{
  12. @Override
  13. publicvoiddestroy(){
  14. }
  15. @Override
  16. publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
  17. FilterChainchain)throwsIOException,ServletException{
  18. System.out.println("beforeinvokefirstFilter'schain.doFilter()..");
  19. chain.doFilter(request,response);
  20. System.out.println("afterinvokefirstFilter'schain.doFilter()..");
  21. }
  22. @Override
  23. publicvoidinit(FilterConfigarg0)throwsServletException{
  24. System.out.println("firstFilterinit()...");
  25. }
  26. }
  27. ============
  28. SecondFilter.java
  29. ==============
  30. packagecom.test.filter;
  31. importjava.io.IOException;
  32. importjavax.servlet.Filter;
  33. importjavax.servlet.FilterChain;
  34. importjavax.servlet.FilterConfig;
  35. importjavax.servlet.ServletException;
  36. importjavax.servlet.ServletRequest;
  37. importjavax.servlet.ServletResponse;
  38. publicclassSecondFilterimplementsFilter{
  39. @Override
  40. publicvoiddestroy(){
  41. }
  42. @Override
  43. publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
  44. FilterChainchain)throwsIOException,ServletException{
  45. System.out.println("beforeinvokesecondFilter'schain.doFilter()..");
  46. chain.doFilter(request,response);
  47. System.out.println("afterinvokesecondFilter'schain.doFilter()..");
  48. }
  49. @Override
  50. publicvoidinit(FilterConfigfilterConfig)throwsServletException{
  51. System.out.println("secondFilterinit()...");
  52. }
  53. }
  54. ==========
  55. FirstServlet.java
  56. =============
  57. packagecom.test.servlet;
  58. importjava.io.IOException;
  59. importjavax.servlet.ServletException;
  60. importjavax.servlet.http.HttpServlet;
  61. importjavax.servlet.http.HttpServletRequest;
  62. importjavax.servlet.http.HttpServletResponse;
  63. publicclassFirstServletextendsHttpServlet{
  64. @Override
  65. protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
  66. throwsServletException,IOException{
  67. System.out.println("servletdoGetbeinvoked...");
  68. req.getRequestDispatcher("test.jsp").forward(req,resp);
  69. }
  70. @Override
  71. protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
  72. throwsServletException,IOException{
  73. //TODOAuto-generatedmethodstub
  74. doGet(req,resp);
  75. }
  76. }
  77. =========
  78. web.xml
  79. ===========
  80. <?xmlversion="1.0"encoding="UTF-8"?>
  81. <web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"
  82. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  83. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  84. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  85. <welcome-file-list>
  86. <welcome-file>index.jsp</welcome-file>
  87. </welcome-file-list>
  88. <filter>
  89. <filter-name>firstFilter</filter-name>
  90. <filter-class>com.test.filter.FirstFilter</filter-class>
  91. </filter>
  92. <filter>
  93. <filter-name>secondFilter</filter-name>
  94. <filter-class>com.test.filter.SecondFilter</filter-class>
  95. </filter>
  96. <filter-mapping>
  97. <filter-name>secondFilter</filter-name>
  98. <url-pattern>/*</url-pattern>
  99. </filter-mapping>
  100. <filter-mapping>
  101. <filter-name>firstFilter</filter-name>
  102. <url-pattern>/*</url-pattern>
  103. </filter-mapping>
  104. <servlet>
  105. <servlet-name>firstServlet</servlet-name>
  106. <servlet-class>com.alimama.servlet.FirstServlet</servlet-class>
  107. </servlet>
  108. <servlet-mapping>
  109. <servlet-name>firstServlet</servlet-name>
  110. <url-pattern>/firstServlet</url-pattern>
  111. </servlet-mapping>
  112. </web-app>
  113. ============
FirstFilter.java
==================
package com.test.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;

public class FirstFilter implements Filter {

	@Override
	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("before invoke firstFilter's chain.doFilter() ..");
		chain.doFilter(request, response);
		System.out.println("after invoke firstFilter's chain.doFilter() ..");
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("firstFilter init()...");

	}

}


============

SecondFilter.java
==============

package com.test.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;

public class SecondFilter implements Filter {

	@Override
	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("before invoke secondFilter's chain.doFilter() ..");
		chain.doFilter(request, response);
		System.out.println("after invoke secondFilter's chain.doFilter() ..");
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("secondFilter init()...");
	}

}
==========

FirstServlet.java
=============
package com.test.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("servlet doGet be invoked...");
		req.getRequestDispatcher("test.jsp").forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}
	
}

=========

web.xml

===========
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<filter>
		<filter-name>firstFilter</filter-name>
		<filter-class>com.test.filter.FirstFilter</filter-class>
	</filter>
	<filter>
		<filter-name>secondFilter</filter-name>
		<filter-class>com.test.filter.SecondFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>secondFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>firstFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<servlet>
		<servlet-name>firstServlet</servlet-name>
		<servlet-class>com.alimama.servlet.FirstServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>firstServlet</servlet-name>
		<url-pattern>/firstServlet</url-pattern>
	</servlet-mapping>
</web-app>

============


然后发布,发现打印的日志如下:

。。。

firstFilter init()...
secondFilter init()...

。。。

2008-10-23 11:36:43 org.apache.catalina.startup.Catalina start
信息: Server startup in 3665 ms

这里过滤器初始化好了。

当我们访问我们的 应用:http://127.0.0.1:8080/appName

发现打印日记如下:

before invoke secondFilter's chain.doFilter() ..
before invoke firstFilter's chain.doFilter() ..
after invoke firstFilter's chain.doFilter() ..
after invoke secondFilter's chain.doFilter() ..

当我们将web.xml中filter的位置进行调整后:

Xml代码 复制代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6. <welcome-file-list>
  7. <welcome-file>index.jsp</welcome-file>
  8. </welcome-file-list>
  9. <filter>
  10. <filter-name>firstFilter</filter-name>
  11. <filter-class>com.test.filter.FirstFilter</filter-class>
  12. </filter>
  13. <filter>
  14. <filter-name>secondFilter</filter-name>
  15. <filter-class>com.test.filter.SecondFilter</filter-class>
  16. </filter>
  17. <SPANstyle="COLOR:#ff0000"><filter-mapping>
  18. <filter-name>firstFilter</filter-name>
  19. <url-pattern>/*</url-pattern>
  20. </filter-mapping>
  21. <filter-mapping>
  22. <filter-name>secondFilter</filter-name>
  23. <url-pattern>/*</url-pattern>
  24. </filter-mapping></SPAN>
  25. <servlet>
  26. <servlet-name>firstServlet</servlet-name>
  27. <servlet-class>com.alimama.servlet.FirstServlet</servlet-class>
  28. </servlet>
  29. <servlet-mapping>
  30. <servlet-name>firstServlet</servlet-name>
  31. <url-pattern>/firstServlet</url-pattern>
  32. </servlet-mapping>
  33. </web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<filter>
		<filter-name>firstFilter</filter-name>
		<filter-class>com.test.filter.FirstFilter</filter-class>
	</filter>
	<filter>
		<filter-name>secondFilter</filter-name>
		<filter-class>com.test.filter.SecondFilter</filter-class>
	</filter>
             <filter-mapping>
		<filter-name>firstFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>secondFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<servlet>
		<servlet-name>firstServlet</servlet-name>
		<servlet-class>com.alimama.servlet.FirstServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>firstServlet</servlet-name>
		<url-pattern>/firstServlet</url-pattern>
	</servlet-mapping>
</web-app>

然后在启动应用,会看到打印:

before invoke firstFilter's chain.doFilter() ..

before invoke secondFilter's chain.doFilter() ..
after invoke secondFilter's chain.doFilter() ..

after invoke firstFilter's chain.doFilter() ..

总结:

filter的执行顺序是按照web.xml中定义的顺序进行执行的(当多个filter都匹配的时候),执行顺序如下图表示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值