做毕设的时候,文件能够正常下载但是后台报错,于是查阅了下,发现以下的解决方法。
现象:
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:483)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at filters.TomcatFormFilter_UTF8.doFilter(TomcatFormFilter_UTF8.java:79)
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:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)
原因:
JSP文件或struts action(纯servlet应用中没发现此问题)中采用了,如下代码:
public void print2Screen(HttpServletResponse resp,String encodeString,String[] htmlCommands) throws IOException{ resp.setCharacterEncoding(encodeString); ServletOutputStream httpOutput= resp.getOutputStream(); for(String temp:htmlCommands) httpOutput.write(temp.getBytes()); }
|
深层原理
1.Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException.
2.servlet代码中有out.write(””),这个和JSP中缺省调用的response.getOutputStream()产生冲突.
因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了 response.getOutputStream,又用了out变量,故出现以上错误。
解决:
法一:在JSP文件中,加入下面两句
<% out.clear(); out = pageContext.pushBody(); %>
|
此法的缺陷:
很多开发项目并不是JSP前端,如freemarker,velocity等
造成问题的"response.getOutputStream()"并未被写在JSP里,而是写在servlet/action里
法二: 在action中,不要return 回具体的result文件,而是return null
//return SUCCESS; return null;
|
很好的解决了问题,同时也明白了相应的原理。
分享到:
相关推荐
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
1. java.lang.IllegalStateException: No wrapped connection. 2.java.lang.IllegalStateException: Adapter is detached. 原因: 1.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会...
标题 "java.lang.IllegalStateException: OutputStream already obtain" 涉及到的是Java编程中的一个常见错误,特别是当处理I/O流时。这个异常通常在尝试获取已经存在的OutputStream实例时抛出,表明该输出流已经被...
异常:Caused by: java.lang.IllegalStateException: Method has too many Body parameters Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract ...
标题中的"The full error is: java.lang.IllegalStateException"是一个典型的Java编程错误,通常表示在不合法或不适当的状态下调用了某个方法。这个错误通常暗示程序试图执行一个不能在这个特定时刻执行的操作。让...
Java是一种高级编程语言,通常用于开发...然而,需要注意的是,JNI的使用增加了程序的复杂性,因为需要管理Java和本地代码之间的交互,而且错误调试可能更困难。因此,只有在确实需要调用底层功能时,才应考虑使用JNI。
2. 在类中定义一些关键方法,如`@OnOpen`、`@OnClose`、`@OnMessage`和`@OnError`,分别用于处理连接打开、关闭、接收到消息和错误的情况。 3. `onOpen`方法接收客户端连接并存储相关信息,例如用户名和会话对象。 4...
这个错误信息出现在`java.lang.IllegalStateException`中,具体是在`ContainerBase.addChildInternal`方法抛出的,这表明在尝试添加或启动Spring Boot的web应用(war包)作为Tomcat的一个子容器时发生了问题。...
- **Error体系**:描述的是Java运行时系统内部的错误以及资源耗尽的情况,通常是由JVM抛出的。 - **Exception体系**: - **RuntimeException体系**:包括类型转换错误、数组越界访问等,通常认为是程序员的错误。 ...
3. **错误处理**:如果无法成功连接到 Excel,则会弹出提示框告知用户没有安装 Excel 或者 Excel 连接失败,并返回错误码 `-1`。 4. **选择 Excel 文件**:使用 `GetFileOpenName` 函数打开文件选择对话框,让用户...
java dubbo admin 2.5.3 + jdk 1.7 亲试 好用 ... java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
错误信息"无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:"指出在部署Web服务时遇到了异常情况。这个错误代码MASM0001通常与WebLogic的模块组装(Module Assembly)过程有关,该过程是将应用组件...
- **路径配置错误**:根据错误提示,“Could not load com.mysql.jdbc.Messages Could not load java.net.BindException”,这通常意味着Tomcat在启动时未能找到所需的MySQL JDBC驱动。 - **驱动未正确放置**:MySQL...
如果在响应已提交的情况下尝试创建会话,容器可能会抛出`IllegalStateException`。 1. `HttpServletRequest.getSession(true)`:这个调用等同于`HttpServletRequest.getSession()`。它表示如果当前请求中没有会话,...
14. **java.lang.IllegalStateException: getAttribute: Session** 在非活动的Session上尝试获取属性。确保在调用getAttribute()方法前,Session处于活动状态。 处理这些异常时,关键在于理解异常信息、定位问题...
01-16 22:18:39.222:E/AndroidHttpClient(26745): java.lang.IllegalStateException: AndroidHttpClient created and never closed ``` **原因分析**: 此错误表明`AndroidHttpClient`对象创建后未曾被正确关闭。`...
* 不能在 response.sendRedirect() 之前使用 out.flush(),否则将抛出 java.lang.IllegalStateException 异常。 * 跳转后,浏览器地址栏将发生变化。 * 如果跳转到不同主机下,response.sendRedirect() 之后的语句将...
如果遇到“java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode”的错误,这意味着在使用Hibernate的HQL查询时,忘记为表名添加别名。正确的做法是在查询语句中明确...