解讀maven項目中Tomcat10與JSTL的問題匯總(Debug親身經(jīng)歷)
maven項目中Tomcat10與JSTL的問題匯總
如果你在學(xué)習(xí) web
項目過程中遇到以下三種錯誤,那么本篇可能會對你有所幫助:
1 無法在web.xml或使用此應(yīng)用程序部署的jar文件中解析絕對uri:[http://java.sun.com/jsp/jstl/core]
2 java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibraryValidator
3 java.lang.NoClassDefFoundError:jakarta/servlet/jsp/jstl/core/LoopTag
問題描述與解決方法
這里先總結(jié)出解決方法
問題1
無法在web.xml或使用此應(yīng)用程序部署的jar文件中解析絕對uri:[http://java.sun.com/jsp/jstl/core]
如果你的web
服務(wù)器是10.0及以上,那么你可以在pom.xml
中導(dǎo)入jstl
依賴
<dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency>
并且你需要將jakarta.servlet.jsp.jstl-2.0.0.jar
解壓,并從其META-INF文件夾中取出你需要的.tld
文件,(一般c.tld
就夠用了)
并把這個文件導(dǎo)入到你項目的WEB-INF,這樣啟動的時候Tomcat服務(wù)器就可以編譯到這個文件。
然后一定記得(假設(shè)你用的是idea
,因為其它的我沒用過)對maven
項目做這些:
clean->validate->compile->install, 然后rebuild你的module,接著重啟tomcat,正常情況下問題是可以解決的。關(guān)于問題分析可以翻到下一節(jié)
如果你的web服務(wù)器是9.0及以下,那么你可以在pom.xml中引入jstl
依賴
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
引用格式可以參考JSTL的官網(wǎng):http://tomcat.apache.org/taglibs/standard/
或者從官網(wǎng)下載一份jstl-1.2.jar
拷貝到WEB-INF/lib中,并且解壓jstl-1.2.jar
將其中的META-INF
中的tld
文件拷貝到你的WEB-INF文件夾下,當(dāng)然一定記得(假設(shè)你用的是idea
,因為其它的我沒用過)對maven
項目做這些:
clean->validate->compile->install, 然后
rebuild
你的module
,接著重啟tomcat,正常情況下問題是可以解決的。關(guān)于問題分析可以翻到下一節(jié)
問題2
java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibrary Validator
假設(shè)你使用的Tomcat服務(wù)器是10.0及以上,那么大概率是在WEB-INF文件夾下,導(dǎo)入了x.tld文件,解決方法可以通過以上引入依賴的方式,也可以將jakarta.servlet.jsp.jstl-2.0.0.jar
和jakarta.servlet.jsp.jstl-api-2.0.0.jar
兩個jar包手動導(dǎo)入到WEB-INF/lib
下,并且一定記得(假設(shè)你用的是idea
,因為其它的我沒用過)對maven
項目做這些:
clean->validate->compile->install, 然后rebuild你的module,接著重啟tomcat,正常情況下問題是可以解決的。關(guān)于問題分析可以翻到下一節(jié)
也可以通過官網(wǎng)下載:https://jakarta.ee/zh/specifications/tags/2.0/
問題3
java.lang.NoClassDefFoundError:jakarta/servlet/jsp/jstl/core/ LoopTag
假設(shè)你使用的Tomcat
服務(wù)器是10.0及以上,解決方法可以通過以上引入依賴的方式,也可以將jakarta.servlet.jsp.jstl-api-2.0.0.jar
這個jar
包手動導(dǎo)入到WEB-INF/lib
下,并且一定記得(假設(shè)你用的是idea
,因為其它的我沒用過)對maven
項目做這些:
clean->validate->compile->install, 然后rebuild你的module,接著重啟tomcat,正常情況下問題是可以解決的。關(guān)于問題分析可以翻到下一節(jié)
問題原因分析
問題一分析
無法在web.xml
或使用此應(yīng)用程序部署的jar
文件中解析絕對uri:[http://java.sun.com/jsp/jstl/core]
針對于這個問題,網(wǎng)上給出的大部分解決方法都是下載:jstl-1.2.jar
和standard-1.1.2.jar
這兩個jar
包,然后解壓取出其中的~文件放到WEB-INF
文件夾下,但是這只能解決Tomcat9
及以下的服務(wù)器。
關(guān)于為什么需要解壓出tld文件?
因為某些版本的Tomcat
在啟動中會掃描jar包,但并不會掃描jar包中包含的tld
文件,比如c.tld
文件等,在tomcat
編譯過程中被忽略了。
通過查閱我才知道下面這件事
眾所周知,由于Tomcat10使用的是JakartaEE9的標(biāo)準(zhǔn),Servlet的標(biāo)準(zhǔn)包不再由Apache支持維護(hù),轉(zhuǎn)交給Jakarta管理,對應(yīng)的最新JSTL只能在Jakarta.ee官網(wǎng)下載。
所以,對于Tomcat10
原來的jstl-1.2.jar
,已經(jīng)不能滿足了,換成了jakarta.servlet.jsp.jstl-2.0.0.jar
和jakarta.servlet.jsp.jstl-api-2.0.0.jar
問題二分析
java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibraryValidator
我遇到這個錯誤,是我將jstl-1.2.jar
已經(jīng)導(dǎo)入到項目中,并且我還將c.tld
文件導(dǎo)入了WEB-INF
中,說明還是少類文件(但是我并沒有找到這個類文件。。。)。
然后我新增了pom.xml
中jstl-2.0
的依賴,問題就解決了
問題三分析
java.lang.NoClassDefFoundError:jakarta/servlet/jsp/jstl/core/LoopTag
也就是編譯時找不到LoopTag類,我遇到這個情況是:
我已經(jīng)將jakarta.servlet.jsp.jstl-2.0.0.jar
導(dǎo)入了,但是少了另一個包,后來我終于在jstl-api文件下發(fā)現(xiàn)了它
總結(jié)
debug
的過程中,少不了要去看別人的經(jīng)歷,但是有時候耶穌救不了你,還得根據(jù)報什么錯,自己發(fā)現(xiàn)問題,最好是重新建一個工程,通過對比,發(fā)現(xiàn)問題。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot根據(jù)注解動態(tài)執(zhí)行類中的方法實現(xiàn)
本文主要介紹了SpringBoot根據(jù)注解動態(tài)執(zhí)行類中的方法實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08SpringSecurity獲取當(dāng)前登錄用戶的信息的幾種方法實現(xiàn)
本文主要介紹了SpringSecurity中獲取當(dāng)前登錄用戶信息的多種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03如何利用JAVA正則表達(dá)式輕松替換JSON中的大字段
這篇文章主要給大家介紹了關(guān)于如何利用JAVA正則表達(dá)式輕松替換JSON中大字段的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java編程實現(xiàn)統(tǒng)計數(shù)組中各元素出現(xiàn)次數(shù)的方法
這篇文章主要介紹了Java編程實現(xiàn)統(tǒng)計數(shù)組中各元素出現(xiàn)次數(shù)的方法,涉及java針對數(shù)組的遍歷、比較、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-07-07Spring MVC之WebApplicationContext_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Spring MVC之WebApplicationContext的相關(guān)資料,需要的朋友可以參考下2017-08-08