<%
request.setCharacterEncoding("GBK");
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
User user=new User(name,pwd);
UserDao userdao=new UserDaoimpl();
boolean bool=userdao.login(user);
if(bool){
session.setAttribute("login",name); //登录成功就保存对象,实现权限控制
request.getRequestDispatcher("admin.jsp").forward(request,response);
}else{
request.setAttribute("message","用户名或密码不正确");
request.getRequestDispatcher("index.jsp").forward(request,response);
}
 %>
错误。。org.apache.jasper.JasperException: java.lang.IllegalStateException: Cannot forward after response has been committed

解决方案 »

  1.   

    错误信息:Cannot forward after response has been committed
    意思是:当你前面的代码已经对response有所输出之后(且已经flush到了客户端浏览器),是不允许执行重定向的。建议你采用MVC模型,不要在JSP里面做这些逻辑判断和页面跳转,因为你JSP页面前面很可能已经针对response有输出了。
    另外请楼主请注意,你使用:
    request.getRequestDispatcher("admin.jsp").forward(request,response);
    意味着浏览器端的地址是不变的,还是那个提交登录的URL地址,所以我猜测你可能应该用request.sendRedirect会更合适些。
      

  2.   

    楼上正解,在这里之前请不要用response输出或者flush,不然就会报这个错误的~!