1.情景展示
springboot項目整合jsp后,只要是訪問跳轉頁面的請求,全部都報404。
2.具體分析
2022年2月25日11:43:38
最簡單的測試方式:
將項目打成war包,放到tomcat的webapps目錄下,啟動tomcat,通過瀏覽器訪問相關頁面或請求;
如果能夠正常訪問,說明不是項目的問題而是idea的問題;
如果不能正常訪問,說明是項目的問題。
以下是老的排查流程,如果你覺得將項目放到tomcat下太麻煩,也可以按照下面流程進行排查或者直接按照解決方案來。
我的項目目錄結構如下:
頁面直接放在了webapp目錄下,由於我並沒有把它放在WEB-INF目錄下,所以,在沒有添加攔截器的情況下,是可以直接訪問到jsp頁面的。
如果你的頁面在WEB-INF下,是無法直接訪問頁面的,所以,為了測試,你可以先找一個簡單的頁面直接放到webapp目錄下。
這樣,在正常情況下,我們可以不通過控制層就能訪問到頁面。
404.jsp的訪問路徑為:jsp/404.jsp
如果到這一步,你能正常訪問得到的話,就說明你之前頁面的項目路徑存在問題;
其實,不僅僅是jsp無法訪問,html文件也無法訪問得到:
只要是存放在webapp目錄下的所有文件,都無法訪問得到。
這說明:不是項目的問題,而是idea開發工具的問題!
3.解決方案
出現這個問題,往往是多模塊項目。
通過idea創建多個module的項目,配置啟動的application需要將module指向其所在的工作目錄。(如果指定的是父目錄,默認加載第一個module的配置)
點擊springboot的啟動類,選擇“Edit Configurations...”;
展開“Environment”,找到“Working directory”,點擊右側的文件夾目錄;
由於我的springboot啟動類在bill-web下,所以將其工作目錄設置成它;
insert-->Apply-->OK。
重啟項目就能正常訪問啦。
4.效果展示
現在,控制層請求可以正常轉發到頁面上啦。
單獨訪問jsp頁面。
再來看看這個
看路徑有什么區別?
webapp這個目錄,可有可無,不管你加不加,都能正常訪問得到,這是為啥?
我們知道:純正的javaWebMaven項目,在最終打包的時候,會把webapp目錄給去掉,這也就是:為什么我們訪問的時候不需要加/webapp/這一層的原因(與本文無關)。
真正的原因是:idea自動將web資源的目錄完成了映射。
那為啥webapp目錄也能訪問?
因為springboot內置tomcat啟動的,可能對於內置tomcat而言,它就是一個普通的文件夾目錄吧(猜的)。