springboot多模塊maven項目jsp問題

問題1:筆者在啓動一個多模塊的maven項目時,每個模塊都是一個maven項目,通過pom文件設置依賴關係,本次要討論的問題爲通過模塊module1裏面寫的一個controller方法返回module2裏面的一個jsp頁面,在idea裏面設置工作目錄爲模塊路徑(否則也可能找不到jsp頁面),在module2的application.xml配置了jsp的路徑爲"WEB-INF/jsp",後綴爲“.jsp”,然後啓動運行沒有問題,然而當我將這幾個模塊打成一個jar包時,在cmd裏面通過java -jar運行,通過瀏覽器訪問的時候一直提示找不到jsp頁面,在網上找了好久才發現問題的原因,是由於我使用的springboot版本爲1.5.2,貌似從1.4.2版本之後就不太支持jsp了。所以用高於1.4.2版本的springboot打包工具打的包裏面會少一部分內容,這才導致找不到jsp頁面的錯。
解決方法:
1.在pom文件中設置打成war包;
然後打成了war包,這時候筆者又將生成的war包的後綴改爲.jar,再次通過java -jar 運行,還是報錯。這時候已經搞了一天了,真的很煩;這次出錯的原因估計又是打包的問題,所以筆者放棄了改成jar包這種方式,沿用之前生成的war包,這時候又遇到了第二個問題,就是springboot裏面配置了內嵌的tomcat,但是war包又只能通過自己電腦上裝的tomcat跑起來,於是又遇到了第二個問題。
問題2:怎麼設置springboot內置的tomcat不生效。
解決方法:
1.找到pom配置springboot的地方,這個地方有兩種方案如下:
第一種方案如下,在spring-boot-starter-web下加了排除的設置,這樣在加載springboot模塊的時候就會排除tomcat模塊的加載,筆者使用的是第一種方案。
在這裏插入圖片描述
第二種方案
因爲SpringBootServletInitializer需要依賴 javax.servlet,而tomcat-embed-jasper下面的tomcat-embed-core中就有這個javax.servlet,如果沒用provided,最終打好的war裏面會有servlet-api這個jar,這樣就會跟tomcat本身的衝突了
在這裏插入圖片描述
配置好了之後,在這裏需要在之前啓動類的同一目錄下添加SpringBootStartApplication文件類如下:
public class SpringBootStartApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}

這裏的Application即爲之前的啓動類,到這裏筆者以爲問題解決了沒想到又遇到了另一個問題,這個問題可能對一部分人來說是沒有的,下面先闡述一下問題。由於筆者的項目裏面的js、css包括jsp對於路徑有要求,在通過瀏覽器訪問時必須只能通過ip+端口才能
正確的跑起整個項目,於是筆者在自己的tomcat配置文件conf目錄下面的server.xml配置了通過localhost:8080訪問項目,具體配置如下:
在這裏插入圖片描述
配置完之後,通過startup.bat啓動項目,發現我的程序在tomcat容器裏運行了兩次導致報錯,看了網上的資料之後才知道tomcat在啓動後首先會加載一次Host裏面appBase目錄下的內容,此時我的項目就在webapps目錄下,然後我配置了一個Context,tomcat又會加載一次,所以導致項目啓動兩次。
解決方法:
1.將要部署的項目放在另一個目錄下,例如筆者在webapps同級目錄下創建了一個webroot目錄,把我們的項目放在這下面,上面的配置也改成了如下:
在這裏插入圖片描述
再次啓動tomcat,我天,終於搞定了,真是不容易啊,在這裏把問題記錄一下,可能說的不是很清楚,具體的大家可以再自行百度詳細一點,這裏只是說了個大概的思路,也希望如果有遇到同樣的問題的人能給你們一點參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章