今天创建了一个Web项目,练习过滤器。
但是当在Webxml中配置好过滤器之后,我的jsp出问题了。在浏览器中访问jsp,页面上什么都没有。
然后我又创建了一个项目,将那个jsp复制粘贴过去,发布好了,然后访问,页面内容又回来了。
在百度上搜了好久也没有解决。
我想可能是原来的项目出问题了,于是就又在新项目里面创建了一个过滤器,然后配置xml文件。然后在访问又jsp,结果内容又消失了。
我恍然大悟,其实是我的过滤器写的有问题。问题就在下面这段代码里
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("过滤");
}
正确的写法应该是
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("过滤");
chain.doFilter(request, response);//少了一句重要的话
}
chain.doFilter();是什么意思呢?
FilterChain的源代码是
package javax.servlet;
import java.io.IOException;
public abstract interface FilterChain
{
public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse)
throws IOException, ServletException;
}
Filter的源代码是
package javax.servlet;
import java.io.IOException;
public abstract interface Filter
{
public abstract void init(FilterConfig paramFilterConfig)
throws ServletException;
public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain)
throws IOException, ServletException;
public abstract void destroy();
}
暂时理解为向后执行吧