在写servlet 文件时,遇到了java.lang.IllegalStateException异常,刚开始一直不知道错误出现在哪里,后来才发现。
以下是异常提示:
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.UserListByPowerServlet.doPost(UserListByPowerServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
出现异常的servlet文件是UserListByPowerServlet.java,文件代码如下
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
String power=request.getParameter("power");
String pNo=request.getParameter("pNo");
String po="0";
if(power.equals("1")){
po="超级管理员";
}else if(power.equals("2")){
po="普通管理员";
}else if(power.equals("3")){
po="普通用户";
}
if(power.equals("0")){
request.setAttribute("pNo", pNo);
request.getRequestDispatcher("userListServlet?pNo="+pNo).forward(request, response);
return;
}
if(pNo==null || pNo.equals("") || pNo.trim().equals("0")){
pNo="1";
}
int p=1;
try{/当用户输入的是字符串时
p=Integer.parseInt(pNo);
}catch(Exception e){
p=1;
}
oj_UserDao ud=new oj_UserDaoImpl();
int pageSize=10;
int totalCount=ud.totalCount2(po);
int pageCount=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
if(p>=pageCount){///当输入的数字大于总页数时
p=pageCount;
}
List list=ud.getUserList2(po,p, pageSize);
request.setAttribute("pNo", pNo);
request.setAttribute("totalCount", totalCount);
request.setAttribute("pageCount" ,pageCount);
request.setAttribute("userList", list);
request.setAttribute("power",power);
request.getRequestDispatcher("tab/UserList.jsp").forward(request, response);
}
大家看到上面的两句request.getRequestDispatcher("").forward(request, response);了吧,就是这两个语句冲突造成的异常,解决办法就是在第一个句子执行完之后,在其后面
加上return语句,让其不在往下执行!!!!!!这样就OK了!!!