老师请问一下

老师请问一下

多个过滤器的情况下:

过滤器的初始化(init)顺序以及销毁(destroy)顺序是什么?

我测试了一下

发现过滤器的初始化(init)顺序以及销毁(destroy)顺序跟在web.xml里注册的的顺序无关??

package 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 Filter1 implements Filter {

	@Override
	public void destroy() {
		System.out.println("Filter1 destroy");
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		// TODO Auto-generated method stub

	}

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

	}

}
package 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 Filter2 implements Filter {

	@Override
	public void destroy() {
		System.out.println("Filter2 destroy");
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		// TODO Auto-generated method stub

	}

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

	}

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>FilterDemo2</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<filter>
		<filter-name>filter2</filter-name>
		<filter-class>filter.Filter2</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>filter2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>




	<filter>
		<filter-name>filter1</filter-name>
		<filter-class>filter.Filter1</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>filter1</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


</web-app>

http://img1.sycdn.imooc.com//climg/5ca871260001ba7105720220.jpg

http://img1.sycdn.imooc.com//climg/5ca871320001f46f05270295.jpg

请问过滤器的初始化(init)顺序以及销毁(destroy)顺序是根据什么来决定的?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好。这个顺序是根据字母的优先顺序,在字母表中越靠前越优先。第一个字母相同时,默认以第二个字母顺序为准,比如:

http://img1.sycdn.imooc.com//climg/5ca9ded10001777908160712.jpg

http://img1.sycdn.imooc.com//climg/5ca9def50001d8fd06340591.jpg

如果解答了同学的疑问,望采纳~

祝学习愉快~

  • MasonM 提问者 #1
    好的非常感谢你老师!
    2019-04-07 19:37:37
芝芝兰兰 2019-04-07 18:27:32

同学你好,过滤器的destory的顺序和init的顺序一致,而init的顺序是根据filter-name来决定的:

http://img1.sycdn.imooc.com//climg/5ca9cf850001418a08790699.jpg

http://img1.sycdn.imooc.com//climg/5ca9cfa70001507506900807.jpg

http://img1.sycdn.imooc.com//climg/5ca9cfdd0001833407340748.jpg

http://img1.sycdn.imooc.com//climg/5ca9d0060001473706800764.jpg

如果还有疑问,可以继续提问。如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 提问者 MasonM #1
    init的顺序是根据filter-name标签里面的值来决定吗? 比如<filter-name>a</filter-name>跟<filter-name>b</filter-name>,按a和b这两个值来排列? 那么他是怎样根据这个值来排列的呢?
    2019-04-07 18:49:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师