java.lang.IllegalStateException: Cannot forward after response has been committed
Posted 零度
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.IllegalStateException: Cannot forward after response has been committed相关的知识,希望对你有一定的参考价值。
改成单例模式:
package com.gzzy.rmm.common.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.gzzy.af.pojo.EmployeeInfo;
public abstract class BaseServlet extends HttpServlet{
private static final Logger log = Logger.getLogger(BaseServlet.class.getName());
protected EmployeeInfo ei = null;
protected HttpServletRequest request = null;
protected HttpServletResponse response = null;
protected PrintWriter pw = null;
public void init() throws ServletException {
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
/**
* 1:设置 此类的全局request、response属性
* 2:此方法调用 initPage 方法,继承此类实现此方法 的业务方法
*/
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
/*制单人、制单日期、归属部门 start*/
EmployeeInfo ei=new EmployeeInfo();
String t = req.getParameter("tt");
if("aa".equals(t)) {
for(int i = 0; i< 10; i++) {
if(i == 0 || i == 5 || i == 9) {
ei.setEmployeeName("杨大");
ei.setId("JCT000820160324125900009431");
}
System.out.println(Thread.currentThread() + " == " + ei.getEmployeeName());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if("bb".equals(t)) {
for(int i = 0; i< 10; i++) {
if(i == 0) {
ei.setEmployeeName("kk");
ei.setId("JCT000820160324125900009431");
}
System.out.println(Thread.currentThread() + " == " + ei.getEmployeeName());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// ei.setEmployeeName("韩江");
// ei.setId("JCT000820160324125900001451");
// ei.setEmployeeName("古琼");
// ei.setId("JCT000820160324125900001463");
// ei.setEmployeeName("龚运丽");
// ei.setId("JCT000820160324125900001465");
// ei.setEmployeeName("陈娅");
// ei.setId("JCT000820160324125900001547");
ei.setBelongorg("计划核算科");
ei.setOrgCode("JCT000320160324121800000117");
req.getSession().setAttribute("employee", ei);
/*制单人、制单日期、归属部门 end*/
try {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html");
request=req;
response=resp;
//.debug("登录用户信息");
ei=(EmployeeInfo)request.getSession().getAttribute("employee");
log.debug("登录用户信息=》"+ei.getId()+ei.getEmployeeName());
initPage(req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}
public abstract void initPage(HttpServletRequest request, HttpServletResponse response) throws Exception;
/**
* 写数据到jsp前台页面去
* response内容相应类型为UTF-8
*/
protected void write(String result) {
PrintWriter pw = null;
try {
response.setContentType("text/html;charset=UTF-8");
pw = response.getWriter();
pw.write(result);
} catch (IOException e) {
log.error("向页面输出结果失败:"+e);
e.printStackTrace();
} finally {
pw.flush();
pw.close();
pw=null;
}
}
/**
* 获取取request里面的值,
* null、"" 的值都返回 ""
*/
protected String getParameter(String sourceStr){
String str=request.getParameter(sourceStr);
if(str!=null&&str.trim().length()>0){
return str;
}else{
return "";
}
}
/**
* 不能共享request里面的数据
* URL重新定向:可以是任意的URL
* 一般用于用户注销登录时返回主页面和跳转到其它的网站等等
*/
public void sendRedirect(String url) {
try {
response.sendRedirect(url);
} catch (Exception e) {
e.printStackTrace();
log.error("servlet跳转页面异常:",e);
}
}
/**
* 浏览器地址栏不变
* 转发页面和转发到的页面可以共性request里面的数据
* 页面的转发:只能是同一个Web应用程序的其他Web组件
* 一般用于用户登录的时候根据角色转发到相应的模块等等
* request.setAttribute("user", user);===jsp==>${user}/request.getAttribute("user")
* jsp=name=post===>servlet=request.getParameter("name");
*/
public void forword(String url) {
try {
request.getRequestDispatcher(url).forward(request,response);
} catch (Exception e) {
e.printStackTrace();
log.error("servlet跳转页面异常:url="+url+",request="+request,e);
}
}
public void destroy() {
super.destroy();
}
}
以上是关于java.lang.IllegalStateException: Cannot forward after response has been committed的主要内容,如果未能解决你的问题,请参考以下文章