1. 程式人生 > 實用技巧 >Jsp頁面使用taglib標籤報錯500的問題

Jsp頁面使用taglib標籤報錯500的問題

文章摘自https://www.cnblogs.com/tioxy/p/13291574.html

最近在練手一個SSM的基於AdminLET框架模板的後臺管理系統,使用的環境是tomcat9,使用Maven構建並通過新增Web模板框架的專案,在新增完所有的配置檔案後啟動tomcat執行,出現了一個錯誤:無法在web.xml或使用此應用程式部署的jar檔案中解析絕對uri:[http://java.sun.com/jsp/jstl/core]。如果想直接看此問題的解決方式,可以直接翻閱文章最後的總結。

花了大量時間查閱大量資料後解決了,下面我說一下我解決問題的整個經過。

出現問題後我查閱資料,大部分給出的原因是沒有新增avax.servlet.jstl的依賴,或者是專案打包輸出的構建檔案lib中不包含這個包的依賴,我仔細檢查後發現,我本地專案確實存在。

繼續查閱資料說,少一個standard包的依賴,我繼續嘗試,在專案中新增standard包的依賴,並在tomcat的lib目錄裡也添加了jstl及standard包,繼續執行,發現還是報錯。

然後繼續查閱資料,原因因為專案jsp頁面引用的taglib標籤所使用的tld檔案沒有從jstl包中加載出來,導致報錯,解決方式是在專案的WEB-INF下新增jstl中所有tld檔案。於是乎,我在本地專案的WEB-INF下建立了一個taglib資料夾,把jstl包解壓後,把裡面jar包的META-INF\中 .tld全部拷貝出後放在新建的資料夾中。

解決方式是暴力了點,還是先解決問題再說,於是乎再次執行。

前一個問題解決了,但出現了一個新的:無法在web.xml或使用此應用程式部署的jar檔案中解析絕對uri:[http://www.springframework.org/security/tags]。心想,這不同理嘛,找到對應包的 .tld檔案,然後也新增到WEB-INF下的taglib資料夾中不就行了,於是,我解壓spring-security-taglibs-5.1.2.RELEASE,取出security.tld,執行確實成功了。

原本這裡就結束了,但是我不甘心,這麼解決太暴力了,而且影響專案結構,看起來很亂,於是乎繼續翻閱資料。偶然發現了一篇部落格,說是tomcat的catalina.properties配置檔案裡如果配置了跳過tld掃描會導致專案無法載入.tld檔案的問題,所以解決辦法是把catalina.properties配置檔案中的tomcat.util.scan.StandardJarScanFilter.jarsToSkip欄位修改為\

總結:

我看網上很多說法,說是tomcat新增tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar後會提高tomcat的啟動速度,也會解決因為掃描.tld檔案而導致卡在啟動專案十幾分鐘的問題,但是帶來的弊端就是jsp頁面taglib標籤500錯誤,所以這個問題的兩種解決方式,大家根據自己情況自行選擇:

  1. 第一種:在專案的WEB-INF下新增jstl中所有tld檔案,這樣會導致專案結構看起來很亂,好處是不使用JSP作為檢視層時,tomcat啟動速度增加。
  2. 第二種:就是修改tomcat中catalina.properties檔案配置為tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\,優缺點與第一種相反。

如果有更好的解決方式,可以評論交流。