Cannot call sendRedirect() after the response has been committed解決方法


<%		
		JudgeName judge = new JudgeName();

		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("userName");
		if (name != null) {
			session.setAttribute("name", name);
			session.setMaxInactiveInterval(30);
		} else {
			response.sendRedirect("index.jsp");
			/* return; */
		}
		String pwd = request.getParameter("pwd");

		if (judge.isExists(name)) {

			if (pwd.equals("12345")) {
				response.sendRedirect("succeed.jsp");
				/*return;*/
			} else {
				session.setAttribute("msg", "密碼錯誤");
				response.sendRedirect("failed.jsp");
				/*return;*/
			}

		} else {
			session.setAttribute("msg", "用戶名不存在");
			response.sendRedirect("failed.jsp");
              /*return;*/ } %>

該頁面主要實現的功能是對request的數據進行對比判斷,由form表單進入該頁面並不會出錯,但是由於邏輯混亂導致直接進入頁面時會發生兩次response的重定向,所以報錯

邏輯上的錯誤導致response可能被執行兩次,兩種解決方案:

1.修改邏輯

2.在response后加return;

3.但是不能再最后一個response后添加return;否則報錯:

以下為修改后的代碼:

<%
		JudgeName judge = new JudgeName();
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("userName");
		String pwd = request.getParameter("pwd");

		if (name != null && pwd != null) {
			session.setAttribute("name", name);
			session.setMaxInactiveInterval(30);
			
			if (judge.isExists(name)) {
				if (pwd.equals("12345")) {
					response.sendRedirect("succeed.jsp");
					
				} else {
					session.setAttribute("msg", "密碼錯誤");
					response.sendRedirect("failed.jsp");
				}
				
			} else {
				session.setAttribute("msg", "用戶名不存在");
				response.sendRedirect("failed.jsp");
			}

		} else {
			response.sendRedirect("index.jsp");
		}
	%>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM