java写的excel导出时抛出的异常
严重:Servlet.service()forservletdefaultthrewexceptionjava.lang.IllegalStateExceptionato...
严重: 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:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
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:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)
我估计是这样的两次跳转,不是action里面的问题:
说下大致流程:首先通过secListAction跳转到一个list页面,然后在这个页面我加了模糊查询和导出excel按钮,在一个form里面,两个按钮分别调用两个JS方法,用的都是window.location.href。
应该就是执行完导出excel的action后又执行secListAction的action,因为我发现点击导出按钮之后,list显示的结果也发生了变化。 可是为什么会执行这个查询呢?
怎样才能让导出excel的同时不刷新页面 展开
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
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:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)
我估计是这样的两次跳转,不是action里面的问题:
说下大致流程:首先通过secListAction跳转到一个list页面,然后在这个页面我加了模糊查询和导出excel按钮,在一个form里面,两个按钮分别调用两个JS方法,用的都是window.location.href。
应该就是执行完导出excel的action后又执行secListAction的action,因为我发现点击导出按钮之后,list显示的结果也发生了变化。 可是为什么会执行这个查询呢?
怎样才能让导出excel的同时不刷新页面 展开
3个回答
展开全部
引用别人的回答:
java.lang.IllegalStateException
org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:423)
经过分析、查看jdk文档终于找到解决的办法,在response.sendRedirect()方法后加return语句即可,如下:
response.sendRedirect("login.jsp");
return null;
原因是:在程序中两次调用了response.sendRedirect()方法。
jdk5.0文档中很清楚地介绍了出现IllegalStateException异常的可能情况:
1)同一个页面中再次调用response.sendRedirect()方法。
2)提交的URL错误,即不是个有效的URL。
java.lang.IllegalStateException
org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:423)
经过分析、查看jdk文档终于找到解决的办法,在response.sendRedirect()方法后加return语句即可,如下:
response.sendRedirect("login.jsp");
return null;
原因是:在程序中两次调用了response.sendRedirect()方法。
jdk5.0文档中很清楚地介绍了出现IllegalStateException异常的可能情况:
1)同一个页面中再次调用response.sendRedirect()方法。
2)提交的URL错误,即不是个有效的URL。
追问
我这个是ResponseFacade.sendError(), 所以应该不是sendRedirect()这个解决办法。
抛出异常是action全部执行完毕之后抛出的。
我的acition跳转是在JS里面直接这样写的:
window.location.href="exptAeCust.action?fileName=XXX“
追答
public void sendError(int sc)
throws IOException
{
if(isCommitted())
{
throw new IllegalStateException();
} else
{
response.setAppCommitted(true);
response.sendError(sc);
return;
}
}
这是ResponseFacade的源码,报错说明你在在action return之前做了跳转处理。
Dispather类中
sendError(request, response, context, 404, e);
sendError(request, response, context, 500, e);
时导致错误的原因:可能是你的地址配置有误。或者因为你有两次跳转,第一次跳转的资源不存在,所以先报404,然后sendErr时,又因为已经提交了响应,所以报
IllegalStateException的异常,你把你的action代码贴出来看看
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询