Jetty中的Jasper在getOutputStream上抛出IllegalStateException但在Tomcat上抛出IllegalStateException

时间:2009-03-03 21:45:32

标签: jsp tomcat jetty

我有一个当前在Tomcat 5.5.25下运行的Web应用程序。我正在尝试将它移植到Jetty 6,以利用jsp和UI更改的快速刷新时间。

由于我的JSP文件符合JSP 2.0,因此我使用maven jetty插件网站上建议的配置在maven下运行jetty。此配置加载apache的jasper JSP编译器版本5.5.15。 (在maven资源库中也可以使用5.5.23,但结果相同。)

在jetty下,我的主页(使用磁贴配置)在ServletResponseWrapperInclude.getOutputStream()中出现IllegalStateException。显然在Tomcat下它不会这样做。

我很难理解我们的瓷砖是什么,包括这会导致碧玉在码头而不是在Tomcat中抱怨。

2 个答案:

答案 0 :(得分:1)

这可能不是一个很好的答案,但我们发现当Tiles包含空的磁贴时会发生此错误。

通过浏览我们的主磁贴JSP并删除对空磁贴的引用,我们就会解决这个问题。

答案 1 :(得分:0)

哇 - 很好找!我偶然发现的另一个解决方案是将tile include定义为空字符串而不是空/ null定义。

换句话说,如果我按如下方式定义了一个tile,我会点击你描述的IllegalStateException:

<definition name="login" extends="main.layout">
    <put name="title" value="Login" type="definition" />
    <put name="headinclude" value="" type="definition" />
    <put name="body" value="/WEB-INF/tiles/login.jsp" type="page" />
</definition>

另一方面,如果我按如下方式定义磁贴,则异常消失:

<definition name="login" extends="main.layout">
    <put name="title" value="Login" type="definition" />
    <put name="headinclude" value="" type="string" />
    <put name="body" value="/WEB-INF/tiles/login.jsp" type="page" />
</definition>

奇怪的错误,奇怪的解决方案,但它对我有用!