struts2报错: getWriter() has already been called for this response
2017-12-20 00:11
519 查看
struts2报错: java.lang.IllegalStateException: getWriter() has already been called for this response
Struts2常报getWriter() has already been called for this response这个异常。我们在操作各种IO流时,也很容易报这个异常,所以io流报错时,可以借鉴本文。
1.异常如下:
java.lang.IllegalStateException: getWriter() has already been called for this response at org.apache.catalina.connector.Response.getOutputStream(Response.java:628) at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:196) at com.wrt.action.order.EndOrderAction.exportInfo(EndOrderAction.java:143) 。。。。。。。。 at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
2.大致代码如下
public void exportInfo(){ try { //web对象 HSSFWorkbook wb = new HSSFWorkbook(); //创建表头等 HSSFSheet sheet = wb.createSheet("test1"); //创建行 HSSFRow row = sheet.createRow(0); //创建列 HSSFCell cell = row.createCell(0); //**************省略excel创建部分.. HttpServletResponse response = ServletActionContext.getResponse(); OutputStream output = getRepsonse().getOutputStream(); response.reset(); response.setHeader("Content-disposition", "attachment; filename=details.xls"); response.setContentType("application/msexcel"); wb.write(output); output.close(); System.out.println("成功创建excel文件"); } catch (Exception e) { e.printStackTrace(); } }
3.解决方案:
将response.reset();放到OutputStream output = getRepsonse().getOutputStream()前面。
HttpServletResponse response= ServletActionContext.getResponse(); response.reset(); OutputStream output= getRepsonse().getOutputStream(); response.setHeader("Content-disposition", "attachment; filename=details.xls"); response.setContentType("application/msexcel");
小结:应避免可能出现未关闭的getWriter(),使用了response.reset();进行刷新,而此时却在未刷新的情况下进行了OutputStream output = getRepsonse().getOutputStream();操作。
4.会出现如下异常的三种可能:
1.通过response.reset(); 刷新可能存在一些未关闭的getWriter().
2.struts2请求方法中返回了success此类会返回数据或者界面的返回值。举例如下:
public String saveSubmitOrder(){ return "success"; } //改成 public String saveSubmitOrder(){ return null; }
3.存在多个getWriter且未关闭状态,或者getWriter与OutputStream同时出现。
总之,一个请求过来只会有一个返回结果,如果存在两个或以上则会出现此异常.
相关文章推荐
- getWriter() has already been called for this response
- getWriter() has already been called for this response 的解决办法
- getWriter() has already been called for this response 的解决办法
- springmvc 监听器getWriter() has already been called for this response问题
- 在Struts2中使用poi进行excel操作下载的时候报getOutputStream() has already been called for this response 错误 [转]
- getWriter() has already been called for this response异常(100%解决)
- struts2:java.lang.IllegalStateException: getOutputStream() has already been called for this response
- struts2 java.lang.IllegalStateException: getWriter() has already been called for this response(异常解决)
- Struts2 getOutputStream() has already been called for this response 错误
- 关于 getWriter() has already been called for this response 的错误解决办法
- getWriter() has already been called for this response的问题
- getWriter() has already been called for this response
- getWriter() has already been called for this response 的解决办法
- 关于 getWriter() has already been called for this response 的错误解决办法
- getWriter() has already been called for this response 的解决办法
- getWriter() has already been called for this response 的解决办法
- 解决getWriter() has already been called for this response异常
- getWriter() has already been called for this response
- struts2中getOutputStream() has already been called for this response异常解决方法
- getWriter() has already been called for this response 的解决办法