`

Cannot forward after response has been committed 错误已解决

阅读更多
不知道为什么,在写servlet的时候总是出现标题这样的错误,
2009-10-8 20:26:11 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet CommonReceiveParamterServlet threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:312)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at edu.bjtu.newBean.servlet.CommonReceiveParamterServlet.doPost(CommonReceiveParamterServlet.java:345)
	at edu.bjtu.newBean.servlet.CommonReceiveParamterServlet.doGet(CommonReceiveParamterServlet.java:36)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Thread.java:619)

代码是这样的:
List<Map<String,Object>> orderlist = new ArrayList<Map<String,Object>>();
procedure ="{call SCOTT.processed_total(?)}";
DBUtils dbUtils = new DBUtils();
try {
	orderlist = dbUtils.executeProcedureWithOutInputParamter(procedure);
	} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}//orderlist用来判断结果集是不是为空!
	if(orderlist.size()==0){
	request.setAttribute("error","noJgcpGN");				     request.getRequestDispatcher("err/noData.jsp").forward(request, response);
			}
			request.setAttribute("orderlist", orderlist);
			request.getRequestDispatcher("jgcp/jgcp/jgcpGN.jsp").forward(request, response);

就是上述代码,因为对request转发不明白真正的含义引起的,本来以为request.getRequestDispatcher("err/noData.jsp").forward(request, response);后就跳出来servlet,没想到还是会执行下面这一段代码,太大意了,后来debug的时候才看到,
request.setAttribute("orderlist", orderlist);
			request.getRequestDispatcher("jgcp/jgcp/jgcpGN.jsp").forward(request, response);
把代码最后加上
else{request.setAttribute("orderlist", orderlist);
			request.getRequestDispatcher("jgcp/jgcp/jgcpGN.jsp").forward(request, response);
}
就不会出现这个问题了!
最后的代码为:
List<Map<String,Object>> orderlist = new ArrayList<Map<String,Object>>();
procedure ="{call SCOTT.processed_total(?)}";
			DBUtils dbUtils = new DBUtils();
			try {
				orderlist = dbUtils.executeProcedureWithOutInputParamter(procedure);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if(orderlist.size()==0){
				request.setAttribute("error", "noJgcpGN");
				request.getRequestDispatcher("err/noData.jsp").forward(request, response);
			}else{
			request.setAttribute("orderlist", orderlist);
			request.getRequestDispatcher("jgcp/jgcp/jgcpGN.jsp").forward(request, response);
			}
问题解决!
分享到:
评论
2 楼 移动的马桶 2015-01-15  
嗯,是不小心,最后的转发位置放错了
1 楼 jk625 2011-08-13  
   

相关推荐

Global site tag (gtag.js) - Google Analytics