使用JSP中的RequestDispatcher包含静态内容在GAE Java SDK上不起作用
我有一个web应用程序运行在app Engine Java SDK 1.7.2上。除了提供静态内容和JSP的默认设置外,该应用程序没有过滤器和servlet 在JSP文件中,我有一行内容如下:使用JSP中的RequestDispatcher包含静态内容在GAE Java SDK上不起作用,java,google-app-engine,jsp,Java,Google App Engine,Jsp,我有一个web应用程序运行在app Engine Java SDK 1.7.2上。除了提供静态内容和JSP的默认设置外,该应用程序没有过滤器和servlet 在JSP文件中,我有一行内容如下: <% request.getRequestDispatcher( "a.html" ).include( request, response ); %> 这会引发java.lang.IllegalStateException:“getOutputStream已被调用” 如果我将“a.ht
<% request.getRequestDispatcher( "a.html" ).include( request, response ); %>
这会引发java.lang.IllegalStateException:“getOutputStream已被调用”
如果我将“a.html”更改为像“a.jsp”这样的动态内容,那么一切都可以正常工作。文档中说RequestDispatcher应该适用于动态和静态内容
OBS:我仍在学习servlet和所有相关的东西,但我知道还有其他方法可以实现我在这里所做的事情——这只是一个示例,而不是真实世界的场景。我只是想知道这是否是预期的行为以及原因。或者这只是一个bug?为什么要在JSP中添加scriplets,这是一种可怕的方式,会让JSP的维护成为噩梦。无论如何,在您调用此方法之前,您的请求似乎已经被发送。在谷歌搜索之后,我了解到此错误已经存在很长时间了。看看
虽然看起来很奇怪,但下面的方法很有效
<%@page buffer="none"%>
<%
request.getRequestDispatcher("a.html").include(request,response);
%>
Wow!你是对的。我在我的开发系统上确认了它。我认为这是一个错误。希望GAE的人能对此有所启发。我做了更多的测试。这不是因为GAE。我在一个独立的Tomcat中也遇到了同样的例外。这不是一个真正的应用程序,我不关心这个问题中的良好设计原则,但我感谢你的强化:)关于已经发送的响应-这是一个单行JSP,即使在这种情况下,我也不确定它在包含“a.JSP”而不是“a.html”。感谢您所做的进一步调查。我也倾向于相信这确实是一个bug。我已在此处提交了一份问题报告:。