經過TOMCAT把系統啓動,能夠正常登錄門戶,登錄進去選擇子系統的時候點擊登錄的時候,但是去又回到了登錄界面,如此反覆就是不可以進入子系統,查看後臺報的錯誤:html
Cannot forward after response has been committedjava
中文意思就是已經有提交了,不可以再次轉向了,而後根據JSP標籤中設置的錯誤頁面又回到了登錄頁面。web
(核心:同一個servlet(而且該servlet裏面存在重定向或者請求轉發)被屢次訪問,而致使了上面出現的錯誤)。見我出現錯誤的例子:websocket
package sc.tl.filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.websocket.Session; /** * Servlet Filter implementation class adminLogin */ @WebFilter("/manage/*") public class adminLogin implements Filter { public void destroy() { } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //父類轉子類 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //設置字符集 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); HttpSession s = req.getSession(); //獲取session中的isAdmin的值 String flag = (String)s.getAttribute("isAdminLogin"); String spath = req.getRequestURI().substring(req.getContextPath().length()); if(spath.contains("admin_")) { if(flag!=null && flag.equals("1")) { chain.doFilter(request, response); return; //出現上述問題的地方 } else { PrintWriter out = response.getWriter(); out.write("<script>"); out.write("alert('請先登陸管理員用戶帳號!');"); out.write("location.href='login.jsp';"); out.write("</script>"); out.close(); return; } } chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }
上面的代碼是一個關於用戶訪問管理員頁面的一個過濾器。若是是管理員且登陸那麼就轉發到相應的servlet或者jsp頁面中去,不然就決絕訪問。session
而我找了一半天的錯誤居然是管理員驗證成功socket
chain.doFilter(request, response);
以後,忘記return跳出了,致使再一次執行了最後面的
chain.doFilter(request, response);也就是說若是是管理員能夠訪問的servlet和jsp,那麼始終會訪問兩次,就會爆Cannot forward after response has been committed的錯誤!本身注意查看,出現這樣的錯誤,確定是不注意的是後訪問了兩次。