struts2文件下载发生java.lang.IllegalStateException

 先说说程序设计的背景,功能就是实现文件下载,思路是先生成一个临时文件,下载后要删除这个临时文件。再这里我用struts2。先想到是直接用普通的配置方式处理问题,也就是不用显示的获得httpServletResponse对象,然后对httpServletResponse进行操作的方式,配置大致如下:

写道
<action name="downLoadAccountCheck" class="downLoadAccountCheckAction">
<result name="errorpage">./downerror.jsp</result>
<result name="success" type="stream">
<param name="contentType">
application/octet-stream;charset=ISO8859-1
</param>
<param name="inputName">inputStream</param>
<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName() -->
<param name="contentDisposition">
attachment;filename="${downloadFileName}"
</param>
<param name="bufferSize">4096</param>
</result>
</action>

 但是这样的方法有一个问题,那就是文件无法删除。那就只好用传统的方法了,也就是上述的先获得httpServletResponse对象,然后对其操作的方法,代码如下

写道
public String spInfo() {
System.out.println("到达了spInfo1111111111"+spName);
try {
// 获取当前登录帐号
String operatorId =ActionUtil.getLoginUserID();
System.out.println("operatorId="+operatorId);
//权限当前取和按sp查询交易记录报表一致
int right = AuthorityUtil.getTopRight(operatorId, "ID_RETRANS_STATBYSP_REPORT");

String district=null;
if(right == AuthorityUtil.LOCAL_DATA_VISIBLE){
String local=ActionUtil.getLocalID(operatorId);
if(local==null||local.equals("")){
this.message = "查询成功!";
success = true;
return SUCCESS;
}

//如果登录用户不是省公司用户或维护人员,需要进行地域限制
if(!local.equals("ALL")&&!local.equals("DW")){
district = local;
}

}
if(right == AuthorityUtil.INVISIBLE){
this.message = "查询成功!";
success = true;
return SUCCESS;
}

list = reTxnLogDAO.queryTradeSp(spName, spState,district, startDate, endDate);
File file=new File(getFileNameForSPinfo(spName, spState, startDate, endDate)+".xls");
//File file=new File("d:/sptemp.xls");
if(file.exists()){
file.delete();
}
file.createNewFile();
System.out.println("file----abs:"+file.getAbsolutePath());
createSPInfoExcel(file, list);
downloadExcel(file, ServletActionContext.getResponse());
delExcel(file);
//message = "查询成功!";
//success = true;
} catch (Exception e) {
message = "查询失败!";
success = false;
e.printStackTrace();
}
return SUCCESS;
}

 但是新的问题又出现,那就是程序抛出了java.lang.IllegalStateException异常,异常信息大致如下

写道
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:742)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:513)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
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:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)

 虽然说出现了上述异常不妨碍程序的使用,但是看起来很别扭,很不爽,经过研究把上述代码中的return SUCCESS 改成return null 问题得到解决!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值