来看下我今天遇到的问题
大概的意思就是:我在提交了访问后不能再转发
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 将ServletRequest强转为HttpServletRequest
HttpServletRequest req = (HttpServletRequest) request;
// 1.判断访问路径是否为LoginServlet、login.jsp、css、fonts、js、VerificationCodeServlet...
// 如果是则放行
// 得到访问的路径
String requestURI = req.getRequestURI();
if (requestURI.contains("LoginServlet")
|| requestURI.contains("login.jsp")
|| requestURI.contains("css") || requestURI.contains("fonts")
|| requestURI.contains("js")
|| requestURI.contains("VerificationCodeServlet")) {
chain.doFilter(request, response);
// return;
}
// 2.从session中判断user_session中是否为空,为空则说明没有登录,跳转到login.jsp,不为空则说明已经登录,直接放行
if((User)req.getSession().getAttribute("user_session") != null) {
chain.doFilter(request, response);
}else {
req.getRequestDispatcher("login.jsp").forward(request, response);
}
}
然后可以看到我代码中有两个并列的if并且都有chain.doFilter还有else中的getRequestDispatcher,这些都会完成转发,如果我第一个if通过了,执行chain.doFilter完成转发,然后第二个if或else也通过了,又执行了完成转发
,这样就会导致报错
解决方法:在第一个if中chain.doFilter下面加一个return; 这样会使得第一个if完成转发之后返回,不会影响到后面的转发或者重定向
通过return确保执行完上面的请求转发或者重定向返回,避免执行了上面的请求转发或重定向后又执行下面的请求转发或重定向,这必然会报错…