Cannot forward after response has been committed

出现此错误的原因是在用ajax进行数据验证是出现的错误,在执行mapping.findForward("add");之前,已经将相应结果返回客户端,由于重复提交response,
注释的部分引起的
// response.getWriter()
// .println("<?xml version='1.0' encoding='GB2312' ?>");
// response.getWriter().println("<root>");
// response.getWriter().println("<content>");
// response.getWriter().print(msgStr);
// response.getWriter().println("</content>");
// response.getWriter().println("</root>");
//
// response.getWriter().close();
response 相应在mapping.findForward("add");前就执行了,在执行mapping.findForward("add");是相当与有多个响应执行,将
// response.getWriter()
// .println("<?xml version='1.0' encoding='GB2312' ?>");
// response.getWriter().println("<root>");
// response.getWriter().println("<content>");
// response.getWriter().print(msgStr);
// response.getWriter().println("</content>");
// response.getWriter().println("</root>");
//
// response.getWriter().close(); 注释掉 就可以了,并在页面中出去所有的值进行验证。
出现这样的错误,具体的错误;

public ActionForward userIsExist(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("gb2312");
response.setContentType("text/xml;charset=GB2312");
response.setHeader("Cache-Control", "no-cache");
String account1 = (String) request.getParameter("account");
System.out.println("account1 = " + account1);

// ---
String msgStr="";
String user_id = request.getParameter("user_id");
if (user_id == null | user_id.length() <= 0) {

}
boolean isExist_ = false;
UserService ss = getManager("UserService ");
List list = ss.find("from User u where u.user_id=" + user_id);
if (list == null || list.size() <= 0) {
ActionMessages messages = new ActionMessages();
ActionMessage message = new ActionMessage(
"user.add.form.isnot.exist");
messages.add("isNotExist", message);
this.saveErrors(request, messages);
msgStr="此账号可以使用";

} else {

ActionMessages messages = new ActionMessages();
ActionMessage message = new ActionMessage(
"user.add.form.isnot.exist");
messages.add("isExist", message);
this.saveErrors(request, messages);
msgStr="数据库中存在此账号,请换另外一个账号";
}

// response.getWriter()
// .println("<?xml version='1.0' encoding='GB2312' ?>");
// response.getWriter().println("<root>");
// response.getWriter().println("<content>");
// response.getWriter().print(msgStr);
// response.getWriter().println("</content>");
// response.getWriter().println("</root>");
//
// response.getWriter().close();
return mapping.findForward("add");
}
response在forward()执行前已经返回 ,由于重复提交response,所以出现这样的错误
16:28:18,276 ERROR [action]:260 - Servlet.service() for servlet action threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:313)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1062)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.cn.bireport.common.CharacterEncodeFilter.doFilter(CharacterEncodeFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值