控制台会打印两次
来源:2-8 过滤链
mixiaofan
2019-11-27 14:44:09

启动Tomcat时,控制台会打印两次ABC ABC
第三次是http://localhost:8080/filter_chain/hello时的反馈
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <filter> <filter-name>FilterA</filter-name> <filter-class>com.imooc.filter.FilterA</filter-class> </filter> <filter> <filter-name>FilterB</filter-name> <filter-class>com.imooc.filter.FilterB</filter-class> </filter> <filter> <filter-name>FilterC</filter-name> <filter-class>com.imooc.filter.FilterC</filter-class> </filter> <filter-mapping> <filter-name>FilterA</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FilterB</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FilterC</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
package com.imooc.filter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.SchemaOutputResolver;
import java.io.IOException;
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("Hello World!!!");
System.out.println("Hello World");
}
}package com.imooc.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "FilterC")
public class FilterC implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("I`m Filter C");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}package com.imooc.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "FilterB")
public class FilterB implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("I`m Filter B");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}package com.imooc.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "FilterA")
public class FilterA implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("I`m Filter A");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}2回答
hexuhao
2020-06-26
这是因为你同时使用了web.xml和注解两种方式进行配置,把其中一种注释掉就可以了
好帮手慕酷酷
2019-11-27
同学你好,老师这边测试同学的代码编写的没有问题,启动Tomcat时,控制台并没有打印两次ABC的情况哦!如:

建议同学清除一下Tomcat缓存和idea缓存,重新运行一下项目哦!如:

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题