最近在學習Spring實戰第四版,學習到第5章,搭建SpringMVC時碰到了一個大問題。在這裏我記錄一下自己遇到的問題及解決辦法。
首先,先描述一下自己在IDEA中搭建基於Java配置的SpringMVC的過程。過程如下:
(1)新建一個基本的Java項目,如下
確定好命名,點Finish。
構建出的空項目,目錄結構如下:
(2)新建目錄:lib、web等。具體可以參考我的結構。(注意:項目沒添加web模塊之前,web文件夾圖標上不會出現小藍點,而且web.xml文件也是不存在的。後面會介紹如何添加web模塊)
(3)將所需的jar包拷入lib文件夾下。 注意一下jstl-1.2這個包,我的問題就是這個包引起的。
(4) 點擊File--》ProjectStructure,打開下面的窗口,照箭頭方向將jar包正式引入到項目中:需要引入的主要有兩項:一項是剛纔拷入lib文件夾下jar包,可以點擊“+”----》JARs or directories... 在打開的窗口中直接選中項目下的lib文件夾即可。
第二項是Tomcat所依賴的包,選擇Library,如果你的IDEA已經配置好自己的Tomcat,則會出現相對應版本的libraries,選擇之後,添加即可。
注意:一定要引入Tomcat的libraries庫!!!!避免在項目中出現servlet-api、jasper包和jsp-api包等,這些包都包含在Tomcat本身的lib裏,不然會衝突!!!!
(5)給項目添加Web模塊:選中ProjectStructure中的Facets選項,點擊“+”號,選擇Web選項。選擇之後記得看一眼WebResourceDiretory這個設置。這裏是你web資源(jsp頁面、css等靜態資源)的根目錄,如果和你的文件目錄不一樣記得修改一下。
(6)添加完Web模塊之後,選擇Artifacts選項,看看右邊所圈的內容是否有波浪線出現(WEB-INF下),如果有,底部會有提示,點擊Fix,然後點擊Apply就行。
(7)在編寫完代碼之後,將其部署到Tomcat上,設置可以參考下面我的設置
(8)部署完成之後,運行即可。
簡單介紹完流程之後,講一下我遇到的問題。一個是404問題,這個問題困擾我好久,我最後也沒解決,然後就按照上面的流程重新構建,接着就出現了我接下來的問題java.lang.ClassNotFoundException:org.apache.jsp.WEB_002dINF.views.home.jsp。網上說的多是servlet-api和jasper還有一個jsp-api的jar包與tomcat自帶的衝突。但是除了第一個jar包,後兩個我根本就沒引用,然後我將servlet-api換成和tomcat內置的servlet-api一致的版本,還是不行。最後我開始去查日誌,一查就找到問題了。
看我圈出來的地方,至此,我明白了是jstl的問題,然後一查才發現,我之前的引用的是jstl-1.2-sources.jar,這下找到問題了。於是用jstl-1.2.jar替換,果然,問題解決。我查看的這個日誌位於:C盤.IntelliJIdea2019.1\system\tomcat\(項目部署到tomcat時的名字,在部署時控制檯可以查看到)\logs下一個名字爲localhost