刚刚在写完了一个jsp程序,结果在数据提交后,网页跳转的时候报错了。错误原因:Cannot forward after response has been committed 自己不懂那就去麻烦一下百度大哥了,得到一个不是很明确的答案:这个是错误是由于response多次提交引起的。既然如此,那就看看自己什么地方多次使用跳转了吧。错误代码如下:

 
  1. package com.neeke.calc.control;
  2.  
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.io.*;
  6. import java.util.*;
  7. import com.neeke.calc.bean.LogicBean;
  8. import com.neeke.calc.bean.EntityBean;
  9.  
  10. public class CalcServlet extends HttpServlet {
  11.     private static final String CONTENT_TYPE = "text/html; charset=GBK";
  12.  
  13.     //Initialize global variables
  14.     public void init() throws ServletException {
  15.     }
  16.  
  17.     //Process the HTTP Get request
  18.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws
  19.             ServletException, IOException {
  20.         response.setContentType(CONTENT_TYPE);
  21.         request.setCharacterEncoding("GBK");
  22.         String money = request.getParameter("earning").trim();
  23.         String local = request.getParameter("localTax").trim();
  24.         String temp = "";
  25.         double earning = 0;
  26.         double localTax = 0;
  27.         if (money != null && local != null) {
  28.             if (money.equals("") || local.equals("")) {
  29.                 temp = "未输入收入或当地税额!";
  30.                 request.setAttribute("result", temp);
  31.                 request.setAttribute("result", temp);
  32.                 request.getRequestDispatcher("/error.jsp").forward(request,
  33.                         response);
  34.  
  35.             } else {
  36.                 try {
  37.                     earning = Double.parseDouble(money);
  38.                     localTax = Double.parseDouble(local);
  39.                 } catch (NumberFormatException ex) {
  40.                     temp = "输入内容有误!";
  41.                     request.setAttribute("result", temp);
  42.                     request.getRequestDispatcher("/error.jsp").forward(request,
  43.                             response);
  44.  
  45.                 }
  46.                 EntityBean ebean = new EntityBean();
  47. lass="alt">                LogicBean lbean = new LogicBean();
  48.                 ebean.setYourTax(lbean.calculateTax(earning, localTax));
  49.                 request.setAttribute("bean", ebean);
  50.                 request.getRequestDispatcher("/result.jsp").forward(request,
  51.                         response);
  52.  
  53.             }
  54.         }
  55.     }
  56.  
  57.     //Process the HTTP Post request
  58.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws
  59.             ServletException, IOException {
  60.         doGet(request, response);
  61.     }
  62.  
  63.     //Clean up resources
  64.     public void destroy() {
  65.     }
  66. }

修改后的代码:

 
  1. package com.neeke.calc.control;
  2.  
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.io.*;
  6. import java.util.*;
  7. import com.neeke.calc.bean.LogicBean;
  8. import com.neeke.calc.bean.EntityBean;
  9.  
  10. public class CalcServlet extends HttpServlet {
  11.     private static final String CONTENT_TYPE = "text/html; charset=GBK";
  12.  
  13.     //Initialize global variables
  14.     public void init() throws ServletException {
  15.     }
  16.  
  17.     //Process the HTTP Get request
  18.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws
  19.             ServletException, IOException {
  20.         response.setContentType(CONTENT_TYPE);
  21.         request.setCharacterEncoding("GBK");
  22.         String money = request.getParameter("earning").trim();
  23.         String local = request.getParameter("localTax").trim();
  24.         String temp = "";
  25.         double earning = 0;
  26.         double localTax = 0;
  27.         if (money != null && local != null) {
  28.             boolean y = false;
  29.             if (money.equals("") || local.equals("")) {
  30.                 temp = "未输入收入或当地税额!";
  31.                 request.setAttribute("result", temp);
  32.                 y = true;
  33.             } else {
  34.                 try {
  35.                     earning = Double.parseDouble(money);
  36.                     localTax = Double.parseDouble(local);
  37.                 } catch (NumberFormatException ex) {
  38.                     temp = "输入内容有误!";
  39.                     y = true;
  40.                 }
  41.             }
  42.             if (y) {
  43.                 request.setAttribute("result", temp);
  44.                 request.getRequestDispatcher("/error.jsp").forward(request,
  45.                         response);
  46.  
  47.             } else {
  48.                 EntityBean ebean = new EntityBean();
  49.                 LogicBean lbean = new LogicBean();
  50.                 ebean.setYourTax(lbean.calculateTax(earning, localTax));
  51.                 request.setAttribute("bean", ebean);
  52.                 request.getRequestDispatcher("/result.jsp").forward(request,
  53.                         response);
  54.  
  55.             }
  56.  
  57.         }
  58.  
  59.     }
  60.  
  61.     //Process the HTTP Post request
  62.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws
  63.             ServletException, IOException {
  64.         doGet(request, response);
  65.     }
  66.  
  67.     //Clean up resources
  68.     public void destroy() {
  69.     }
  70. }

经过对比可以看出问题出在

 
  1. if (money.equals("") || local.equals("")) {
  2.                 temp = "未输入收入或当地税额!";
  3.                 request.setAttribute("result", temp);
  4.                 request.setAttribute("result", temp);
  5.                 request.getRequestDispatcher("/error.jsp").forward(request,
  6.                         response);
  7.  
  8.             } else {
  9.                 try {
  10.                     earning = Double.parseDouble(money);
  11.                     localTax = Double.parseDouble(local);
  12.                 } catch (NumberFormatException ex) {
  13.                     temp = "输入内容有误!";
  14.                     request.setAttribute("result", temp);
  15.                     request.getRequestDispatcher("/error.jsp").forward(request,
  16.                             response);
  17.  
  18.                 }

不过究竟为什么这样就会出错就不清楚了,以前写的好像也有过多次跳转的这个,但是都没有错的啊!郁闷了~~~不过知道问题出在哪里了,以后尽量避免这样写就是了。o(∩_∩)o...

 » 除非另有声明,本站文章均为原创。
 » 转载原创文章请以链接形式注明:
 » 转载自:[Neeke] » [Cannot forward after response has been committed]
 » 本文链接地址: http://www.ineeke.com/archives/578/
 » 如果喜欢可以:点此邮件订阅或者点此阅读器订阅