Tomcat 7的JspServlet无法编译缺少taglib导入的JSP

时间:2016-05-19 16:59:15

标签: java jsp tomcat

各种JSP页面意外地没有导入他们正在使用的taglib。 例如,JSP正在使用:<c:if>...</c:if> 但是,没有<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

当Tomcat 7编译JSP时,没有错误。 编译的JSP只包含<c:if>而不是替换这些标记。

在这些情况下,有谁知道如何阻止JSP成功编译?

我在web.xml中使用了以下JspServlet配置:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
       <param-name>mappedfile</param-name>
       <param-value>false</param-value>
    </init-param>
    <init-param>
       <param-name>genStringAsCharArray</param-name>
       <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道有什么方法可以做到这一点 - <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>声明告诉tomcat的JSPC遇到<c:.../>标记时该做什么。如果缺少此声明,tomcat不知道如何处理它 - 所以它不会触及它。

如果您依赖此检查,您可能希望在构建过程中使用某些脚本检查,或者使用JSPC在构建期间预编译JSP,并检查生成的servlet是否出现可疑文本/标记。

可能的标记库的数量是无限的,它们的名称也是如此。而且您可能在页面上有更多的处理,而不仅仅是JSP-to-servlet compiter。当剩下一个命名空间的HTML标签时,我从未遇到过触发错误的选项 - 由于这个答案中给出的原因,我从未认为会有一个。