问题描述:
在使用springMVC时,Maven 添加 Jstl 依赖,在 .jsp 文件中使用 jstl 表达式失败。报The absolute uri: http://java.sun.com/jstl/core cannot be resolved
生产环境:
tomcat 8
jdk 1.8
dynamic web module 3.0
jstl 1.2
原因分析:
先来看下我的Maven jstl的依赖是怎么写的
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
在maven中, scope provided 意味着,该jar只在编译时提供支持,在运行时,由web容器提供支持。在tomcat 7(包含7) 以上版本不再提供对jstl的支持。所以,当你使用tomcat7(包含7)以上版本时,会报说 XXXX cannot be resolved。而tomca7 以下版本,在运行时会提供对 jstl 的支持。
也就是说,只要将 scope 范围改成 runtime 或者 compile 即可。
经过修改后,代码亲测有效。如:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
这里不得不说maven 中 runtime 和 compile 的范围。
runtime:只在运行时,提供支持。
compile:编译时和打包成war都有效。
那么好,jsp是由动态编译产生的,因此,scope写成runtime 与 compile 都有效。
当然,还有可能是其他错误。例如 dynamic web module 版本 与 tomcat 版本不符合
下面 给出 dynamic web module 与 tomcat 对应的版本
dynamic web module 2.4 对应于Tomcat 5.5
dynamic web module 2.5 对应于Tomcat 6.0
dynamic web module 3.0 对应于Tomcat 7.0
dynamic web module的版本 对应的就是 web.xml 中的 version
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
参考:
maven范围
http://acooly.iteye.com/blog/...
jstl错误分析
http://blog.csdn.net/hyz301/a...
http://blog.csdn.net/lemo_t/a...
dynamic web module 与 tomcat 版本对应
http://blog.sina.com.cn/s/blo...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。