错误500:WAS 7中的java.lang.StackOverflowError

时间:2012-01-25 18:53:58

标签: jsf java-ee websphere websphere-7

我正在尝试在Websphere服务器上运行世界上最简单的JSF应用程序。该应用程序包含两个xhtml文件和web.xml文件。该应用程序编译,构建和安装没有任何问题。当我尝试在浏览器中查看页面时,我得到:

错误500:java.lang.StackOverflowError

页面和日志中都没有显示任何内容。我一直在谷歌搜索几个小时但找不到解决方案。

这是我的web.xml文件:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

这是JSF页面:

<f:view>
<h:form>
    <h:panelGrid columns="1">
        <h:outputLabel value="Carrier" />

        <h:outputLabel value="Item Number: " />

        <h:outputLabel value="Postal Code: " />

        <h:outputLabel value="Quantity: " />

    </h:panelGrid>  

</h:form>
</f:view>

这是一个如此简单的应用程序,我无法想象为什么它不会运行。非常感谢任何帮助。

哦,让我添加应用程序在Glassfish和Webspere CE上完美运行,而不是在Websphere Express v7上运行。当然我需要它在Websphere Express v7上运行。

2 个答案:

答案 0 :(得分:2)

显然,实际视图文件没有.jspx扩展名,而是.xhtml扩展名。因此FacesServlet将在每次调用自身的无限循环中运行,最终导致内存堆栈溢出。

要解决此问题,您需要从web.xml 删除此条目:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jspx</param-value>
</context-param>

默认为.xhtml

我还建议删除此映射:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

坚持在http://localhost:8080/context/page.xhtml这样的网址中使用.xhtml扩展名。


更新:我的错误。 WAS 7根本不支持支持JSF 2.0。它仅支持JSF 1.2。另请参阅WAS documentation。您需要JSP文件而不是Facelets(XHTML)文件。您也无法利用JSF 2.0的优势。

要使JSF 2.0在WAS 7中运行,您需要自己将其捆绑在webapp的/WEB-INF/lib中并配置WAS类加载器策略。另请参阅this link

  

即使Websphere 7没有正式支持JSF 2.0,您也可以让它在降级模式下工作。按照以下步骤使其适用于您的Websphere 7版本。

     
      
  • 升级至至少版本7.0.0.13
  •   
  • 将Mojarra JAR文件发送到WEB-INF / lib目录
  •   
  • 将WAR类加载器设置为PARENT_LAST
  •   
  • 将EAR类加载器设置为PARENT_LAST和APPLICATION
  •   
     

请注意,降级模式意味着您无法使用@Resource或任何JPA注释。如果您认为需要支持,请与IBM代表联系。

     

请注意,它将处理@PostConstruct和@PreDestroy。

答案 1 :(得分:1)

如果由于某种原因,您需要使用 JSF 1.2 而不是 2.0

您可以尝试将Facelets库添加到项目中。

并将以下内容添加到 faces-config.xml

<faces-config>
    .
    .
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>
    .
    .
</faces-config>

现在,您可以在JSF 1.2下使用 .xhtml 代替 .jsp