1

我有一个试图在 Tomcat 7 上运行的 JSF1.0 应用程序。它目前在 Tomcat 6 上运行正常。

问题是在 Tomcat 7 上加载页面会呈现 XML(包含 JSF 标记的 JSP 文档的),而不是解析所有标记的优点并发出所需的 HTML。

我已经解决了这里和其他地方报告的许多类似问题,包括 BalusC 在这篇文章的评论中链接到的问题。这些都没有帮助解决问题。Faces servlet 配置正确,应用程序在 Tomcat 6 上运行没有问题。

我知道 Tomcat 7 发布了新版本的 Servlet、JSP 和 EL 规范,但我找不到 (a) 任何证据表明这是问题的一部分或 (b) Tomcat 7 所需的新配置的任何指导让我的应用程序正常工作。该应用程序还使用旧的 Struts Tiles 1,但我再次没有证据表明这是问题所在。

这是一些代码。

这是 JSP 文档。这(不包括 XML 和 jsp:root 标记)是呈现给浏览器的内容。

<?xml version="1.0" encoding="UTF-8"?>
<jsp:root 
xmlns:jsp="http://java.sun.com/JSP/Page" 
xmlns:x="uri://uri/of/x"
version="1.2">  

<jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>  
  <x:view> 
    <html> 
... etc (lots more tags from the app's taglib x)
    </html>  
  </x:view> 
</jsp:root>

这是 Faces servlet 映射

  <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>*.faces</url-pattern>
  </servlet-mapping>

我如何在 Tomcat 7 上启动并运行这个批次?

4

2 回答 2

3

TLD 文件不应放在 WEB-INF/lib 中

请参阅 JSP 规范的 JSP.7.3.1 部分(Tomcat 6 为 2.1、Tomcat 7 为 2.2 或 Tomcat 8 为 2.3)。我没有回去检查早期的规格。

Tomcat 6 允许您摆脱这种情况。Tomcat 7 及更高版本不是因为在 Tomcat 6 和 Tomcat 7 之间发生的 TLD 处理重构的结果。在这次重构中 TLD 处理有各种改进。其他更改之一是遵循 JSP.7.3.1 的要求。

于 2013-08-30T08:20:20.973 回答
0

好的,想通了。

问题是 Tomcat 7 没有找到我们的自定义标签库。由于所有内容(在登录页面上)都是自定义标签,因此它只是在没有解析的情况下呈现源代码。

将以下内容放入 web.xml 修复它。我认为这是 JSP 2.0 语法。出于某种原因,我们的 JSP 1.2 依赖它只是在 WEB-INF/lib 中查找 .tld 不再有效。

<taglib>
    <taglib-uri>uri://uri/of/x</taglib-uri>
    <taglib-location>/WEB-INF/lib/custom_tag_lib.tld</taglib-location>
</taglib>
... repeat for every custom taglib

在那之后,一切似乎都奏效了。下周我会在 DB&T 上推出它,我们拭目以待。

如果我必须为 Tomcat、Catalina、Jasper 和 JSF 代码的每一行代码花费 5 美元,我必须通过调试才能找到它,我就能举办一个非常棒的派对。

也许有一天这会帮助别人。如果有人愿意看,有罪的代码在 org.apache.jasper.compiler.TldLocationsCache

于 2013-08-29T15:31:25.383 回答