Servlet的问题Cannot forward after response has been committed

//index.jsp 
<body>
    <font color="red">
    <%
    	if(request.getAttribute("err")!=null){
    		out.println(request.getAttribute("err"));
    	}
    %>
    </font>
    输入用户 名和密码:
    <form id="login" method="post" action="login" οnsubmit="return check(this);">
    	user:<input type="text" name="username"/><br/>
    	password:<input type="password" name="userpwd"/><br/>
    	<input type="submit" value="login"/><br/>
    </form>
    
  </body>




LoginServlet.class
public class LoginServlet extends HttpServlet{


	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		RequestDispatcher rd;
		String username=req.getParameter("username");
		String pass=req.getParameter("userpwd");
		String errMsg="";
		if(username==null||username.equals("")){
			errMsg+="lose username";
		}else if(pass==null|| pass.equals("")){
			errMsg+="lose password";
		}
		else{
			rd=req.getRequestDispatcher("/welcome.jsp");
			rd.forward(req, res);
			return;
		}
		
		if(errMsg!=null && !errMsg.equals("")){
			rd=req.getRequestDispatcher("/login.jsp");
			req.setAttribute("err", errMsg);
			rd.forward(req, res);
			return;
		}
	}


}






web.xml的配置
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>LoginServlet</servlet-name>
  	<servlet-class>hello.yaohuiye.controller.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>LoginServlet</servlet-name>
  	<url-pattern>/login</url-pattern>
  </servlet-mapping>
</web-app>




布置在tomcat上,启动后运行 localhost:8080/LoginTest/index.jsp


输入用户名,密码后,点击login


发生如下错误的时候
"java.lang.IllegalStateException: Cannot forward after response has been committed “
 
原因在于
当你有多个跳转的页面的语句时候,好好检查一下,当 转发 或者 重定向的时候,需要在后加一个retrun 即可。
		else{
			rd=req.getRequestDispatcher("/welcome.jsp");
			rd.forward(req, res);
			return;
		}
		
		if(errMsg!=null && !errMsg.equals("")){
			rd=req.getRequestDispatcher("/login.jsp");
			req.setAttribute("err", errMsg);
			rd.forward(req, res);
			return;
		}

服务器中不允许多次跳转,否则 会发生这个错误。
 因为服务器端使用sendRedirect跳转到客户端的时候,不能在使用req.getRequestDispatcher("跳转的页面").forward(req, reqs);
跳转;所以在跳转之后,return就不会往下执行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值