我试图使用以下命令在jsp页面中包含来自servlet的响应:
<li><jsp:include page="/icr/TasksServlet.html"/></li>
servlet返回一个词:
try (PrintWriter out = response.getWriter()) {
out.println("OOps");
out.flush();
out.close();
}
结果是我的页面在&#34; OOps&#34;
之后被直接截断 <ul class="navList">
<li>ICR Open Tasks</li>
<li>
<ul>
<li>OOps
tomcat抛出此错误:
org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet
[validateUser] in context with path [/CAS] threw exception
[java.lang.IllegalStateException: Exception occurred when flushing data]
with root cause
java.io.IOException: Stream closed
我试图添加和删除out.flush();和out.close();以及添加flush =&#34; true&#34;到jsp:include标记。
我运行tomcat 8.0.24;具有春季MVC的Netbeans。
编辑:它有点类似于reported bug,但是在tomcat版本8.0.18之后修复了一个。我明天将在glassfish服务器上运行代码,看看它是否是服务器问题。
答案 0 :(得分:1)
关闭servlet中的HttpServletResponse会阻止JSP页面写入响应。 try with resources块也将在完成时关闭HttpServletResponse。
使用普通的try语句,不要关闭响应。