SSM框架練習之Jsp頁面使用taglib標簽報錯500的問題


最近在練手一個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錯誤,所以這個問題的兩種解決方式,大家根據自己情況自行選擇:

  1. 第一種:在項目的WEB-INF下添加jstl中所有tld文件,這樣會導致項目結構看起來很亂,好處是不使用JSP作為視圖層時,tomcat啟動速度增加。
  2. 第二種:就是修改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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM