错误信息:java.lang.IllegalStateException: getOutputStream() has already been called

风中云 2011-12-20 09:41:40
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:607)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:196)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:171)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:116)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:76)
at org.apache.jsp.jspx.temp_jsp._jspService(temp_jsp.java:75)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:594)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:505)
at org.apache.struts.chain.commands.servlet.PerformForward.handleAsInclude(PerformForward.java:127)
at org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:78)
at org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:51)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
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:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.mdao.emap.webapp.filter.WebFilter.doFilter(WebFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
...全文
20421 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
LT_1029 2014-07-04
  • 打赏
  • 举报
回复
response.getOutputStream()获取的out对象和out.clear();中的out根本不是同一个对象啊,如何获取后面的out对象?
人生设计师 2014-04-01
  • 打赏
  • 举报
回复
11楼是正解
  • 打赏
  • 举报
回复
这个异常是由于冲突导致的,在使用完response.getOutputStream()的后面加上两句:

out.clear();
out = pageContext.pushBody();
就OK了
诺浅 2013-11-20
  • 打赏
  • 举报
回复
引用 7 楼 duisir 的回复:
[Quote=引用 6 楼 kouyisc 的回复:] 这种问题一般都是 上传下载时遇到。。页面response和上传response响应对象冲突引起的。。 解决: 1. 后台使用前清掉页面response。。 2. 使用同一个response。。 网上方案很多。。 [/Quote] 我试了下,页面没有问题了,文件可以下载了,但是后台仍然报这个错,怎么清掉页面response啊???
问下楼主,我和你的问题是一样的,你的问题现在解决了吗?求解决方案
Ai2015WER 2012-04-07
  • 打赏
  • 举报
回复
out.clear():out=pageContext.pushBody();
yu111 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lollipop409 的回复:]
PrintWriter pw = response.getWriter(); 直接在方法前面获取好了,传给其他处理方法不行么,我一直这么做的
[/Quote]
这个最直接。
风中云 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kouyisc 的回复:]
这种问题一般都是 上传下载时遇到。。页面response和上传response响应对象冲突引起的。。

解决:
1. 后台使用前清掉页面response。。
2. 使用同一个response。。

网上方案很多。。
[/Quote]
我试了下,页面没有问题了,文件可以下载了,但是后台仍然报这个错,怎么清掉页面response啊???
kouyiSC 2011-12-20
  • 打赏
  • 举报
回复
这种问题一般都是 上传下载时遇到。。页面response和上传response响应对象冲突引起的。。

解决:
1. 后台使用前清掉页面response。。
2. 使用同一个response。。

网上方案很多。。
风中云 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lollipop409 的回复:]
PrintWriter pw = response.getWriter(); 直接在方法前面获取好了,传给其他处理方法不行么,我一直这么做的
[/Quote]
不懂,没用过这个
lollipop409 2011-12-20
  • 打赏
  • 举报
回复
PrintWriter pw = response.getWriter(); 直接在方法前面获取好了,传给其他处理方法不行么,我一直这么做的
风中云 2011-12-20
  • 打赏
  • 举报
回复

public static List<EmapSmMtSend> getSMSList(FormFile file,MdaoSysAccount account,List<EmapSmMtSend> errorlist){
String name=file.getFileName().toLowerCase();
List<EmapSmMtSend> list=new ArrayList<EmapSmMtSend>();
CountUtil cumobiles=new CountUtil();
//errorlist=new ArrayList<EmapSmMtSend>();
if( name.endsWith(".txt") ){
try{
BufferedReader reader=new BufferedReader(new InputStreamReader(file.getInputStream()));
while(reader.ready()){
try{
String line=reader.readLine();
String mobile=line.substring(0,11);
boolean checkmobile=mobile.matches("^[0-9]\\d*$");
String conten=line.substring(12);
EmapSmMtSend e=new EmapSmMtSend();
if(checkmobile && !"".equals(conten)){
e.setDesttermid(mobile);
e.setMsgcontent(conten);
e.setPriority(4);
e.setExtno(account.getUserappend());
e.setSysaccountid("" + account.getSerialno().intValue());
e.setRequesttime(new Date());
list.add(e);
}else{
e.setDesttermid(mobile);
e.setMsgcontent(conten);
errorlist.add(e);
}
}catch(Exception e){
logger.error(e.getMessage(),e);
}
}
}catch(Exception e){
logger.error(e.getMessage(),e);
}
}else if( name.endsWith(".xls") ){
try{
POIFSFileSystem fis=new POIFSFileSystem(file.getInputStream());
HSSFWorkbook workbook=new HSSFWorkbook(fis);
HSSFSheet sheet=workbook.getSheetAt(0);
int lastline=sheet.getLastRowNum();
int firsline=sheet.getFirstRowNum();
for( int rownum=firsline + 1 ; rownum <= lastline ; rownum++ ){
EmapSmMtSend e=new EmapSmMtSend();
Row row=sheet.getRow(rownum);
if( row != null ){
Cell cell1=row.getCell(0);
Cell cell2=row.getCell(1);
String mobile=getStringByCell(cell1);
int ml=mobile.length();
String conten=getStringByCell(cell2);
if(ml==11 && !"".equals(conten)){
e.setDesttermid(mobile);
e.setMsgcontent(conten);
e.setPriority(4);
e.setExtno(account.getUserappend());
e.setSysaccountid("" + account.getSerialno().intValue());
e.setRequesttime(new Date());
list.add(e);
}else{
e.setDesttermid(mobile);
e.setMsgcontent(conten);
errorlist.add(e);
}
}
}
}catch(Exception e){
logger.error(e.getMessage(),e);
}
}else if( name.endsWith(".xlsx") ){
try{
XSSFWorkbook workbook=new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet=workbook.getSheetAt(0);
int lastline=sheet.getLastRowNum();
int firsline=sheet.getFirstRowNum();
for( int rownum=firsline + 1 ; rownum <= lastline ; rownum++ ){
EmapSmMtSend e=new EmapSmMtSend();
Row row=sheet.getRow(rownum);
if( row != null ){
Cell cell1=row.getCell(0);
Cell cell2=row.getCell(1);
String mobile=getStringByCell(cell1);
int ml=mobile.length();
String conten=getStringByCell(cell2);
if(ml==11 && !"".equals(conten)){
e.setDesttermid(mobile);
e.setMsgcontent(conten);
e.setPriority(4);
e.setExtno(account.getUserappend());
e.setSysaccountid("" + account.getSerialno().intValue());
e.setRequesttime(new Date());
list.add(e);
}else{
e.setDesttermid(mobile);
e.setMsgcontent(conten);
errorlist.add(e);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
cumobiles.setErrorlist(errorlist);
return list;
}



public ActionForward exportsms(HttpServletRequest request,HttpServletResponse response,List<EmapSmMtSend> successlist,List<EmapSmMtSend> errorlist) throws Exception{
try{
OutputStream out = response.getOutputStream();
out.close();
ExcelUtil.exportSmsFile(out, successlist, 1, errorlist);
out.flush();
out.close();
}catch(IOException e){}
return null;
}



public static void exportSmsFile(OutputStream out,
List<EmapSmMtSend> successlist, int kind,List<EmapSmMtSend> errorlist) {
//if (kind == 1 || kind == 2) {
try {
HSSFWorkbook book = new HSSFWorkbook();
CreationHelper ass = book.getCreationHelper();
// create a new sheet
HSSFSheet sheet = book.createSheet("导入成功");
HSSFRow row = null;
CellStyle cs = book.createCellStyle();
CellStyle cs2 = book.createCellStyle();
CellStyle cs3 = book.createCellStyle();

DataFormat df = book.createDataFormat();
// create 2 fonts objects
Font f = book.createFont();
Font f2 = book.createFont();
Font f3 = book.createFont();
// Set font 1 to 12 point type, blue and bold
f.setFontHeightInPoints((short) 12);
f.setColor(IndexedColors.RED.getIndex());
f.setBoldweight(Font.BOLDWEIGHT_BOLD);
// Set font 2 to 10 point type, red and bold
f2.setFontHeightInPoints((short) 10);
f2.setColor(IndexedColors.RED.getIndex());
f2.setBoldweight(Font.BOLDWEIGHT_BOLD);
f3.setColor(HSSFColor.RED.index);
// Set cell style and formatting
cs.setFont(f);
cs.setDataFormat(df.getFormat("#,##0.0"));
// Set the other cell style and formatting
cs2.setBorderBottom(cs2.BORDER_THIN);
cs2.setDataFormat(df.getFormat("text"));
cs2.setFont(f2);
// Define a few rows
cs3.setFont(f3);
row = sheet.createRow(0);
row.createCell(0).setCellValue(ass.createRichTextString("手机号"));
row.createCell(1).setCellValue(ass.createRichTextString("内容"));
HSSFPatriarch p = sheet.createDrawingPatriarch();
String markField = "";

// 在文件中设置 值
for (int rownum = 1; rownum < successlist.size() + 1; rownum++) {
EmapSmMtSend mo = successlist.get(rownum - 1);
row = sheet.createRow(rownum);
HSSFCell cell = null;
cell = row.createCell(0);
cell.setCellValue(ass.createRichTextString(mo.getDesttermid()));
HSSFCell cell1 = row.createCell(1);
cell1.setCellValue(ass.createRichTextString(mo.getMsgcontent()));
}

HSSFSheet sheet1 = book.createSheet("导入失败");
row = sheet1.createRow(0);
row.createCell(0).setCellValue(ass.createRichTextString("手机号"));
row.createCell(1).setCellValue(ass.createRichTextString("内容"));
row.createCell(2).setCellValue(ass.createRichTextString("失败原因"));
// 在文件中设置 值
for (int rownum = 1; rownum < errorlist.size() + 1; rownum++) {
EmapSmMtSend mo = errorlist.get(rownum - 1);
row = sheet1.createRow(rownum);
HSSFCell cell = null;
markField = mo.getDesttermid();
cell = row.createCell(0);
cell.setCellValue(ass.createRichTextString(mo.getDesttermid()));
HSSFCell cell1 = row.createCell(1);
cell1.setCellValue(ass.createRichTextString(mo.getMsgcontent()));
cell = row.createCell(2);
cell.setCellValue("请检查手机号 是否正确 或是否在通讯录中 检查 定时时间是否不对");
}

FileOutputStream fos = new FileOutputStream("d:\\d.xls");

book.write(fos);

book.write(out);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这是我的事件流程,上网搜了一下说什么response.getWriter(),因为这个方法是和
response.getOutputStream()相冲突的!可是我找不到这个方法啊,然后是要调用out.clear();可是我的out根本就没有clear()这个方法可调啊,有知道的帮下忙,谢谢了、在线等、、、、
风中云 2011-12-20
  • 打赏
  • 举报
回复
public ActionForward getCount(ActionMapping mapping,ActionForm iform,HttpServletRequest request,HttpServletResponse response) throws Exception{
EmapSmMtSendForm form = (EmapSmMtSendForm)iform;
MdaoSysAccount account = getUser(request);
EmapSmMtSendManager manager = (EmapSmMtSendManager)getBean("emapSmMtSendManager");
CountUtil cu=new CountUtil();
List<EmapSmMtSend> errorlist=new ArrayList<EmapSmMtSend>();
form.setImportSMSFile(form.getImportSMSFile());
int count=0;
String smstype=request.getParameter("smstype");
FormFile file = form.getImportSMSFile();
if( file == null ){
request.setAttribute("error","文件上载失败,请重新上载!");
}else{
String name = file.getFileName();
List<EmapSmMtSend> os = new ArrayList<EmapSmMtSend>();
if( file.getFileSize() > 1024 * 1024 * 10 ){
request.setAttribute("error","文件超过10M,不处理");
}else{
name = name.toLowerCase();
if( name.endsWith(".txt") || name.endsWith(".xls") || name.endsWith(".xlsx") ){
if("imsms".equals(smstype)){
os = ExcelUtil.getSMSList(file,account,errorlist);
cu.setCountsms(os.size());
count=cu.getCountsms();
}else if("immobile".equals(smstype)){
List<String> mobiles = ExcelUtil.getSMSListFromMobile(file);
cu.setCountsms(mobiles.size());
count=cu.getCountsms();
}
}
}
//OutputStream out = response.getOutputStream();
this.exportsms(request, response, os, errorlist);
//exportsms(os, 1, errorlist,out);
// out.flush();
// out.close();

}
request.setAttribute("count", count);
return mapping.findForward("temp");
}





土土 2011-12-20
  • 打赏
  • 举报
回复
哥们 你在干啥 出这个错误啊

81,090

社区成员

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

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