写了一个登录的servlet 
现在老是报Cannot forward after response has been committed这个异常
提交10次表单就会出现两三次这个异常!!!
纠结很久了 就是不知道问题出在哪里!!!
求救!!!package com.lovo.shopping.reveal.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.lovo.shopping.protracted.dao.UserDao;
import com.lovo.shopping.protracted.daofactory.DaoFactory;
import com.lovo.shopping.protracted.daofactory.FactoryException;
import com.lovo.shopping.reveal.form.UserLoginForm;
import com.lovo.shopping.util.DBException;
import com.tackzero.js_validate4java.framework.Result;public class UserLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/main/login.jsp").forward(request, response);
response.getWriter().close();
return;
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Result result=(Result)request.getAttribute("result");
if(!result.isSuccess()){
doGet(request,response);
return;
}else{
UserLoginForm form=(UserLoginForm)result.getFormObject();
HttpSession session=request.getSession();
if(!form.getValidateCode().equalsIgnoreCase((String)session.getAttribute("validateCode"))){
result.addError("validateCode", "验证码错误");
}else{
try {
UserDao dao=DaoFactory.createImpl("UserDao");
int res=dao.login(form);
if(res==UserDao.SUCCESS){
session.setAttribute("user", form.getUserName());
session.setAttribute("userId", dao.queryUserId(form.getUserName()));
response.sendRedirect("member.book");
return;
}else if(res==UserDao.USER_NAME_ERROR){
result.addError("userName", "用户名错误");
}else{
result.addError("password","密码错误");
}
} catch (FactoryException e) {
e.printStackTrace();
} catch (DBException e) {
e.printStackTrace();
}
}
request.setAttribute("result", result);
doGet(request,response);
}
}
}

解决方案 »

  1.   

    doGet里面的response.getWriter().close();
    多次一举
      

  2.   

    我想 跟response.getWriter().close();这句没关系吧  forword执行完了才会执行这句
    删除了也一样
    另外 我在过滤器中设置了response的字符编码  是不是这个问题?
      

  3.   


    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
                    response.setCharacterEncoding("UTF-8");
    chain.doFilter(request, response);
    }就是这样
      

  4.   

    response.getWriter().close();你删除试过了吗?
      

  5.   

    试过  一样  不过我把过滤器中的 response.setCharacterEncoding("UTF-8");这句删掉之后 就没再抛这个异常了