maven 工程 springMVC 使用 jstl 失敗

問題描述:
在使用springMVC時,Maven 添加 Jstl 依賴,在 .jsp 文件中使用 jstl 表達式失敗。報The absolute uri: http://java.sun.com/jstl/core cannot be resolvedhtml

生產環境:
tomcat 8
jdk 1.8
dynamic web module 3.0
jstl 1.2 java

緣由分析:
先來看下個人Maven jstl的依賴是怎麼寫的web

<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 便可。
通過修改後,代碼親測有效。如:spring

<dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>runtime</scope>
</dependency>

這裏不得不說maven 中 runtime 和 compile 的範圍。tomcat

runtime:只在運行時,提供支持。
compile:編譯時和打包成war都有效。app

那麼好,jsp是由動態編譯產生的,所以,scope寫成runtime 與 compile 都有效。jsp

固然,還有多是其餘錯誤。例如 dynamic web module 版本 與 tomcat 版本不符合
下面 給出 dynamic web module 與 tomcat 對應的版本maven

dynamic web module 2.4 對應於Tomcat 5.5
dynamic web module 2.5 對應於Tomcat 6.0
dynamic web module 3.0 對應於Tomcat 7.0ide

dynamic web module的版本 對應的就是 web.xml 中的 version.net

<?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...

相關文章
相關標籤/搜索