访问默认servlet,过滤器会生效两次
问题描述:
在访问默认servlet的时候,会创建两次请求对象,并且过滤器生效的日志会打印两次,这是为什么呢
相关截图:
相关代码:
public class firstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 在tomcat启动时就已经完成了对过滤器的初始化,对象肯定也已经被实例化过了
// servlet是在请求第一次被访问的时候初始化
// 过滤器对象在web应用启动时被创建且全局唯一
// 处理机制与servlet相同,采用单例多线程的处理机制
System.out.println("FirstFilter已被初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器已生效");
//将请求相应向后传递,被后续的Filter或者servlet进行处理
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
// 在web应用重启或者关闭的时候被销毁
System.out.println("FirstFilter已被销毁");
}
}
相关代码:
@WebFilter(filterName = "annotationFilter",urlPatterns = "/*")
public class AnnotationFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("注解形式过滤器已经初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("注解形式过滤器已经生效");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("注解形式过滤器已经销毁");
}
}
9
收起
正在回答 回答被采纳积分+1
1回答
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星