严重: Servlet.service() for servlet default threw exception java.lang.IllegalStateException

整合SSH做的web文件下载;当用户点击下载按钮的时候,后台产生一个压缩文件,然后返回给客户端;这个压缩文件可以正常返回,但返回之后抛出如下异常,求解,分数不是问题,只要... 整合SSH做的web文件下载;当用户点击下载按钮的时候,后台产生一个压缩文件,然后返回给客户端;这个压缩文件可以正常返回,但返回之后抛出如下异常,求解,分数不是问题,只要能告诉我怎么解决,谢谢!

2009-8-11 14:19:31 org.apache.catalina.core.StandardWrapperValve invoke
严重: 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.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:127)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:184)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)

......

百度不给我输太长...无奈...
当然不是啦,我完全没用到那个方法

百度限制字数,代码核心部分都粘不全,不是jsp/form/JDBC的问题...
增加一个空行???什么意思?

ServletOutputStream so = response.getOutputStream();
你所指的out是不是我这里的so??是的话,它好像没有clear这个方法啊
我想问一下,那个out哪里来的??没定义啊??

再次说明一下,我这个是在类里获取的response,与JSP页面无关!!!那些随便拷贝的东西,我也找得到,不用辛苦你们拷贝过来

说真的,我是不懂Servlet的原理,所以我还想问一下,PrintWriter out = response.getWriter();这个out怎么没有你所说的clear()方法?
展开
 我来答
godcomexxx
2009-08-11 · TA获得超过1205个赞
知道小有建树答主
回答量:651
采纳率:0%
帮助的人:580万
展开全部
可以把你的代码发一部分吗?
看错误有时候是看不出来的
另外你在struts的配置文件中设置了上传、下载文件的大小了吗?

看了看资料,发现你可能是这里出了问题
1.servlet或jsp中,重复调用response的 getOutputStream(),response.getWriter()方法
2.form表单里没有 method="post" action=""参数
3.看JDBC操纵数据库的代码,仔细看,例如调用的对象的属性为null。
Connection conn=null; 之后之就调用了conn.??的方法

另外从网上找了找解决方法,希望能帮助你的忙
如果产生了这个类org.apache.catalina.core.StandardWrapperValve提示错误的话,可能是因为你添加了一些包文件

最简单的办法是:把tomcat关于此工程的文档删除,之后呢,重新启动工程server即可搞定啦
狠心拒绝
2009-08-11 · TA获得超过371个赞
知道小有建树答主
回答量:374
采纳率:0%
帮助的人:320万
展开全部
是不是在response.sendRedirect()方法没写return?如果没写的话会出现这个问题。

如:
response.sendRedirect("index.jsp");
return;

-----------------
如果没用 以上的东西的话。 我猜你是把文件读成字节流写到客户端去的。。

代码是不是类似这样的?

FileInputStream f =new FileInputStream (new File("d:\\mydiv.rar"));
byte[] fb;
try {
fb = new byte[f.available()];
f.read(fb);
response.setHeader("Content-disposition","attachment; filename=mydiv.rar");
ByteArrayInputStream bais = new ByteArrayInputStream(fb);
int b;
while ((b = bais.read()) != -1) {
response.getOutputStream().write(b);
}
response.getOutputStream().flush();

out.clear();//注意加这个
out = pageContext.pushBody();//注意加这个
} catch (IOException e) {
e.printStackTrace();
}
因为在编译成字节码文件后代码里调用了response.getWriter().而这个方法是和
response.getOutputStream()是相冲突的!

加上out.clear();
out = pageContext.pushBody();
后就可以解决这个问题。

---------------- I 服了 you
ServletOutputStream so = response.getOutputStream(); 你如果用了这个,那么 out会出问题。 你没用out不代表servlet不会去用out.所以你先获取out PrintWriter out = response.getWriter();

然后out.clear();out = pageContext.pushBody();

居然不知道out是什么东西。。 额。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jrj2330345
2009-08-11 · TA获得超过253个赞
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:87.9万
展开全部
这是web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突.
即Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了response.getOutputStream,又用了out变量,故出现以上错误。
解决方案:

out.clear();
out = pageContext.pushBody();
就可以了;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Foxcoming
2009-08-11 · TA获得超过692个赞
知道小有建树答主
回答量:718
采纳率:0%
帮助的人:819万
展开全部
其实没什么事情,只是你的压缩文件写入response后,又重新向流里写入了其他数据。这是流已关闭,会出现IlleagalState错误,懒得该的话就不改。
改法要看你的代码,比如多了一个空行之类的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
B小新仔呀T
2012-11-08
知道答主
回答量:4
采纳率:0%
帮助的人:5971
展开全部
给遇到这个问题的朋友提供一点思绪,有可能是sql语句错误导致持久化失败造成的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式