报错内容:
java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
at servlet.loginSrevlet.doPost(loginSrevlet.java:100)
at servlet.loginSrevlet.doGet(loginSrevlet.java:67)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
报错原因:
out对象与RequestDispatcher并存,导致操作异常
报错代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
this.doPost(request, response);//此处需重点注意!!
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//取出页面上传过来的两个值
String userName=request.getParameter("userName");
String password=request.getParameter("password");
request.setAttribute("userName", userName);
request.setAttribute("password", password);
Connection con = null;
User user=new User(userName, password);
try {
con=jdbc.getCon();
User currentuser=userdao.login(con, user);//调用这个方法,进行数据库操作
if(currentuser==null){
request.setAttribute("error", "用户名或密码错误!");
//out.println("用户名或密码错误!");
request.getRequestDispatcher("/index.jsp").forward(request, response);//报错位置!!
return;
}
else{
//两种方式
response.sendRedirect("/login.jsp");
//request.getRequestDispatcher("/login.jsp").forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
上述代码,在GET里面调用了POST,而POST又有页面跳转,GET里有out输出,导致报错,将out输出删除即可。