我已经将其包含在JSP页面的最上面:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
我已经将JSTL文件放置在WEB-INF/lib
目录中。但是,JSP仍然不能解析taglib。我得到以下错误:
找不到“http://java.sun.com/jsp/jstl/core”的标记库描述符
我使用的是Eclipse,项目结构如下所示:
发布于 2012-11-09 12:02:27
找不到“http://java.sun.com/jsp/jstl/core””的标记库描述符
基于你之前的一个问题,您正在使用Tomcat 7,在这种情况下,您需要JSTL1.2。但是,您有一个jstl.jar
文件,而JSTL1.2显然包含了类似于jstl-1.2.jar
的版本号。唯一的文件名jstl.jar
是JSTL1.0和1.1的典型文件名。此版本要求在standard.jar
中附带一个/WEB-INF/lib
,其中包含必要的TLD文件。但是,在您的特殊情况下,standard.jar
显然在/WEB-INF/lib
中缺失,这正是无法解决标签库URI的原因。
要解决这个问题,您必须删除错误的JAR文件,下载jstl-1.2.jar并将其全部放到/WEB-INF/lib
中。就这样。您不需要提取它,也不需要篡改项目的构建路径。
不要忘记删除这个松散的c.tld
文件。它绝对不属于那里。这确实是在互联网其他地方的一些拙劣的教程或答案中得到的指示。这是一个由重大误解和错误配置引起的神话。在类路径中从来不需要有一个松散的JSTL文件,在以前的JSTL版本中也是如此。
如果您使用的是Maven,请使用以下坐标:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
您还应该确保您的web.xml
声明至少符合Servlet2.4,因此不是Servlet2.3或更高版本。否则,JSTL标记中的EL表达式就会失败。选择与目标容器匹配的最高版本,并确保在<!DOCTYPE>
中任何地方都没有web.xml
。下面是一个Servlet3.0 (Tomcat 7)兼容的示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Config here. -->
</web-app>
###See还:
发布于 2017-04-18 19:05:57
我也有同样的问题,尽管有jstl
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
我还得加上“标准”:
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
此外,如前一篇文章所述:
发布于 2012-11-08 09:13:46
URI取决于您正在使用的JSTL版本。对于1.0版,请使用:
http://java.sun.com/jstl/core
对于1.1 (及以后的版本),您需要使用:
http://java.sun.com/jsp/jstl/core
https://stackoverflow.com/questions/13285826
复制相似问题