安装

JSTL 是 Java EE API 的一部分,包含在 Java EE 应用程序服务器(如 WildFlyTomEEGlassFish)中 ,但不包含在 TomcatJetty等准系统 servlet 容器中 。JSTL 是从 http://java.sun.com/jsp/jstl/*名称空间导入的 taglib。不能将 JSTL 与“ 自定义 JSP 标记库 ”(其中你自己定义 .tld 文件 ) 混淆。JSTL 也不能与第三方框架的 taglib 混淆,例如 JSF,Spring MVC,Struts,Displaytag 等。JSTL 也不能与表达语言(EL)混淆 (这是那些东西)。

  1. 只有当你的 servletcontainer 没有内置 JSTL(例如 Tomcat 和 Jetty)时,才将 jstl-1.2.jar 直接放在 webapp 的/WEB-INF/lib 文件夹中(默认的 webapp 的类路径覆盖,所以在有点聪明的 IDE 中你不要不需要做任何事情)。首先,请不要在 IDE 项目的 Build Path 设置中乱搞。这是错的。

    如果你正在使用 Maven,是坐标:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    

    这就是 JSTL API 与 Apache 的 JSTL 实现绑定在一起的 JAR 风格。这并没有要求 standard.jar(它是 JSTL 1.1 只)。请注意,还有一个 jstl:jstl 依赖项,但它是完全相同的文件,只有错误的组 ID。此外还有一个 javax.servlet.jsp.jstl:jstl 依赖,但它是空的。

  2. 使用正确的 TLD URI 在 JSP 文件中声明 taglib。你可以在此处找到适用于 JSTL 1.1 和 JSTL 1.2 的 TLD 文档。单击感兴趣的 taglib 以获取声明示例。例如 JSTL 核心 taglib

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    如果你使用的是 Facelets 或 JSPX 而不是 JSP,则应将其声明为 XML 命名空间

    <anyxmlelement xmlns:c="http://java.sun.com/jsp/jstl/core">
    

你只需确保在类路径中没有重复的旧 JSTL 版本(包括 JDK / JRE 的/lib 和服务器的/lib)以避免冲突。如果你对服务器具有完全的管理员级别控制权,那么你也可以将 JAR 文件放在服务器的/lib 而不是 webapp 的/WEB-INF/lib 中,以便它们应用于所有已部署的 Web 应用程序。至少不要解压 JAR 文件(S)和杂乱的类路径及其内容(松散的 TLD 文件)和/或声明的标记库 Web 应用程序的 web.xml 为一些贫困的在线教程建议。