【发布时间】:2017-09-10 18:28:12
【问题描述】:
好吧,直截了当: 我用 Eclipse 创建了两个过滤器(Filter1 和 Filter2)和一个 servlet(DisplayHeader)来查看过滤器的执行顺序。 我使用 Tomcat 8.5 作为目标运行时。
新建/动态网络项目/ 带有上下文根 / 并检查了“生成 web.xml delpoyment 描述符”
Filter1 在执行时打印“I'm Filter 1”,我将其“链接”到特定的 servlet“DisplayHeader”。 Filter2 它是 2 而不是 1 的孪生兄弟。 DisplayHeader servlet 映射到 /DisplayHeader。
为清楚起见,下面是 Filter1 代码
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
@WebFilter(
urlPatterns = {"/Filter1"},
servletNames = {"DisplayHeader"}
)
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 {
// TODO Auto-generated method stub
// place your code here
System.out.println("I'm Filter 1");
// pass the request along the filter chain
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
好吧,当我在 Tomcat (Tomcat v8.5) 上运行 servlet 时,它会打印出来
I'm Filter 1
I'm Filter 2
表示Filter1在Filter2之前执行。
我读到过滤器的执行顺序来自 web.xml 文件中的映射顺序, 所以我希望在 web.xml 文件中的某个地方找到类似
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/DisplayHeader</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>/DisplayHeader</url-pattern>
</filter-mapping>
我应该按顺序倒过来……
问题是:当我打开我的项目的 web.xml(从项目资源管理器,见下图)文件时,我只看到这个:
<?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>SetFilterOrder</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>
</web-app>
web.xml location in the explorer
我只是缺少正确的 web.xml 文件路径还是这个 web.xml 是使用“生成 web.xml delpoyment 描述符”选项的结果?
【问题讨论】:
标签: eclipse web.xml servlet-filters