java.lang.IllegalStateException,跪求解决方法!

micheall 2006-03-24 01:02:49
有限的几个用户使用时,没有出现;如果用户很多,比如几十个用户,才出现的。websphere输出的日志信息是:java.lang.IllegalStateException: Cannot forward. Response already committed.
Servlet的源代码如下:
private void getItemDetail(HttpServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
BasicDB db = new BasicDB();
String applyid = req.getParameter("oid");
long acceptid=-1;
String type = req.getParameter("type");

ItemModel item = new ItemModel();
DataModel dm_detail = new DataModel();
Connection conn = db.getConnection();
ItemAdjust itemAdjust = new ItemAdjust(conn);
AcceptJobADO aj = new AcceptJobADO();

try {
if (userid != null && !"".equals(userid)) {
UserManageFactory umFactory = UserManageFactory.newInstance();
umFactory.setConnection(conn);
UserAccount uai = umFactory.getUserAccount();
UserModel um = uai.getUser(uai.getUserID(userid));
request.getSession().setAttribute(Constant.USER_LOGIN_SESSION,
um);
}
aj.setConnection(conn);
if(applyid!=null&&(!applyid.equals(""))){
acceptid = aj.getAcceptIdByApplyId(Long.parseLong(applyid));
}
conn.commit();

item = itemAdjust.getItemDetail(acceptid+"");
SupplySleepDAO sd = new SupplySleepDAO(db);
HashMap jobs = sd.getJobSupplyInfo(acceptid);
SupplyItemModel sim = sd.getItemModelByProcessId(acceptid);
req.setAttribute("jobs", jobs);
req.setAttribute("supplymodel",sim);
conn.commit();
db.release();
}
catch (Exception e) {
try {
conn.rollback();
db.release();
}
catch (Exception e1) {}
this.logger.error("查询详情出错!,原因是:" + e.getMessage());
throw new javax.servlet.ServletException("查询详情出错!,原因是:" +
e.getMessage());
}
finally {
if (db != null) {
try {
db.release();
}
catch (Exception e) {
this.logger.error("关闭数据库连接出错!");
}
}
}

req.setAttribute("item", item);
req.setAttribute("type", type);
String url = "/eosp_admin/modules/supplySleep/itemDetail.jsp";
this.callNextPage(url);
}

其中:callNextPage封装的是用 <jsp:forward >方法。
...全文
766 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
micheall 2006-05-28
  • 打赏
  • 举报
回复
怎样处理:有些对象是公共的而且没有同步这种问题呢。从技术角度怎么实现呢?
micheall 2006-04-24
  • 打赏
  • 举报
回复
谢谢楼上,我找找原因
powerman_lyj 2006-04-16
  • 打赏
  • 举报
回复
可能是你编写的代码没有支持并发操作(有些对象是公共的而且没有同步)
micheall 2006-04-10
  • 打赏
  • 举报
回复
httprequest对象是从service方法中传的
zuoyangguang 2006-04-10
  • 打赏
  • 举报
回复
init()方法是一个共有方法
你是在servlet中调用吗?
httprequest对象哪里来的,怎么传进去?
init()方法是servlet被加载时初始化的。。。。。
micheall 2006-03-30
  • 打赏
  • 举报
回复
谢谢楼上的回复,我试试。
MagicianLiu 2006-03-29
  • 打赏
  • 举报
回复
可能是异步问题。。在方法上加 synchronized


private synchronized void getItemDetail(HttpServletRequest req) throws
javax.servlet.ServletException, java.io.IOException
micheall 2006-03-27
  • 打赏
  • 举报
回复
谢谢回复!
micheall 2006-03-27
  • 打赏
  • 举报
回复
是在它所属的Servlet类中自定义的一个Init方法中调用的。例如
private void Init(String action){
if(action.equals("query")){
getItemDetail(req);
}else{

}

}
wuyg719 2006-03-25
  • 打赏
  • 举报
回复
你的getItemDetail是怎样被调用的呢?
micheall 2006-03-24
  • 打赏
  • 举报
回复
可是在callNextPage之前,Response没有输出东西啊?
minisun2000 2006-03-24
  • 打赏
  • 举报
回复
Cannot forward. Response already committed
不是很清楚吗,转向不能在Response已经输出东西以后进行!
micheall 2006-03-24
  • 打赏
  • 举报
回复
小弟在线等待!谢谢大家的关注!!

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧