问题描述:
今天帮同学排错,发现他在进行页面跳转后出现页面重复显示的问题,排除了JSP页面使用Ajax进行查询分页以及后端Servlet的问题,最后发现原来是使用过滤器这里出了错
问题截图:
问题分析:
因为排除了JSP页面使用Ajax以及后端Servlet的问题,根据现象就可以判断出可能是页面请求多次或者服务器响应多次的结果,查看对应区域的代码,果不其然,在使用过滤器进行访问权限控制的的时候,多写了一句chain.doFilter(request, response);
导致服务器响应了两次,所以也导致页面重复显示。第一次执行过doFilter后response已经包含了jsp的内容,再次执行doFilter时会再次输出一次jsp内容。
解决方法
仔细检查自己的过滤器部分代码,不要让chain.doFilter(request, response);
重复调用。
补充:
在启动服务器时我发现我的过滤器init初始化方法执行两次
创建过滤器的方式有两种:
- 通过注解方式进行配置例子
@WebFilter(filterName ="/LoginFilter",urlPatterns = {"/main.jsp"}) public class LoginFilter implements Filter { public LoginFilter() { // TODO Auto-generated constructor stub } public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here // pass the request along the filter chain chain.doFilter(request, response); } public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }
- 通过web.xml进行配置
<filter> <filter-name>AccessPermissionFilter</filter-name> <filter-class>com.ychs.uol.filter.AccessPermissionFilter</filter-class> </filter> <filter-mapping> <filter-name>AccessPermissionFilter</filter-name> <url-pattern>/user/*</url-pattern> <url-pattern>/member/*</url-pattern> <url-pattern>/publicclass/*</url-pattern> <url-pattern>/main.jsp</url-pattern> <url-pattern>/index.jsp</url-pattern> <url-pattern>/left.html</url-pattern> </filter-mapping>
经过查看代码:这是因为在创建Filter过滤器的时候自动添加了注解,然后又在web.xml中配置了一遍,所以导致初始化函数被执行了两次,对应的将其中一个删去即可。