最近在練手一個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的組態檔里如果配置了跳過tld掃描會導致專案無法加載.tld檔案的問題,我恍然大悟!
原來是昨天運行專案的時候,tomcat出現了一個警告,

解決方式是:Tomcat安裝目錄下apache-tomcat\conf\catalina.properties檔案中看到有以下一串代碼,代表的是在啟動Tomcat需要跳過檢查的jar包,

修改為 tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar 就不會出現警告了,突然明白,原來修改后tomcat就不會加載jar包中的.tld檔案,所以導致報500錯誤,于是我重新修改為原來的代碼,然后去掉專案中META-INF\taglib檔案夾,運行后,成功了!
這下,終于真相大白了,
總結:
我看網上很多說法,說是tomcat添加tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar后會提高tomcat的啟動速度,也會解決因為掃描.tld檔案而導致卡在啟動專案十幾分鐘的問題,但是帶來的弊端就是jsp頁面taglib標簽500錯誤,所以這個問題的兩種解決方式,大家根據自己情況自行選擇:
- 第一種:在專案的WEB-INF下添加jstl中所有tld檔案,這樣會導致專案結構看起來很亂,好處是不使用JSP作為視圖層時,tomcat啟動速度增加,
- 第二種:就是修改tomcat中catalina.properties檔案配置為
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\,優缺點與第一種相反,
如果有更好的解決方式,可以評論交流,
文章參考:
https://blog.csdn.net/sinat_34104446/article/details/82846585?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/144562.html
標籤:Java
上一篇:【HDFS篇12】HA高可用 --- HDFS-HA集群配置
下一篇:c語言陣列長度
