升级到Tomcat 7后,JSP / JSF文档无法正确呈现

时间:2013-08-22 14:56:20

标签: jsp jsf tomcat tomcat7

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

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

我已经解决了此处和其他地方报告的许多类似问题,包括与BalusC在this post的评论中相关的问题。这些都没有帮助解决问题。 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上运行并运行该批次?

2 个答案:

答案 0 :(得分: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的要求。

答案 1 :(得分: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&amp; T上推出它,我们会看到。

如果我对Tomcat,Catalina,Jasper和JSF代码的每一行都有五块钱,我必须通过调试才能找到这个,我能够举办一场精彩的派对。

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