我有一个我试图在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上运行并运行该批次?
答案 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