如何导入JSTL库?导入后Tomcat运行出现URI解析异常求解决
这种问题我碰到过好多次,大概率是jar包的存放位置不对或者版本兼容问题,给你几个排查和解决的步骤:
1. 检查jar包的放置路径
Tomcat需要JSTL的jar包放在WEB-INF/lib目录下,而不是只添加到Eclipse的构建路径里。很多人容易犯这个错:只在Build Path里添加了jar,但没把实际的jar文件复制到项目的WEB-INF/lib文件夹中。
- 操作步骤:
- 找到你的项目根目录,进入
WEB-INF文件夹,没有lib目录就新建一个。 - 把
jstl-1.2.jar和javax.servlet.jsp.jstl-api-1.2.1.jar复制到这个lib目录里。 - 刷新Eclipse项目,重新部署到Tomcat。
- 找到你的项目根目录,进入
2. 确认jar包版本兼容性
Tomcat 7及以上版本,推荐使用JSTL 1.2版本,注意不要混用不同版本的JSTL jar包。你现在用的jstl-1.2.jar和javax.servlet.jsp.jstl-api-1.2.1.jar是兼容的,但要确保项目里没有其他旧版本的JSTL jar(比如jstl-1.1.jar),否则会引发版本冲突。
3. 检查web.xml的版本
如果你的项目web.xml还是使用Servlet 2.3及以下的旧版本,可能会影响JSTL的识别。建议把web.xml的根元素更新到Servlet 3.0及以上版本,示例代码如下:
<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">
Servlet 3.0及以上支持注解,也不需要在web.xml里额外配置JSTL的taglib,能避免不少兼容性问题。
4. 验证taglib导入是否正确
确保你的JSP页面里的taglib导入语句没有拼写错误:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
这个URI是JSTL 1.2的标准URI,别写成旧版本的http://java.sun.com/jstl/core(少了/jsp部分)。
如果按上面的步骤操作后还是有问题,可以尝试清理Tomcat的工作目录(Tomcat安装目录/work/Catalina/localhost/你的项目名),然后重启Tomcat,有时候缓存会导致这类奇怪的问题。
内容的提问来源于stack exchange,提问作者hal




