idea webapp目录404问题,war包方式运行
????????springboot項目下的resources下的template的資源訪問默認是要走servlet跳轉,這里我們將靜態資源放到webapp下,以便直接訪問。
????????目錄結構:(目標是運行后能直接訪問webapp目錄下資源)
????????這樣設置好后,ide單獨打開此工程運行完全正常,但是項目是多模塊的,在idea中作為子模塊運行會出現webapp目錄資源404問題。
一:問題分析
? ?1.查看springboot啟動tomcat源碼的類
? ? ? ? 切換到類org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory,找到獲取資源方法。
查看getCommonDocumentRoot方法的邏輯發現是使用絕對路徑。
?2:問題分析
? ? ? ? windows版本下的jdk8獲取絕對路徑使用了user.dir這個系統變量。debug一下System.getProperty("user.dir") 發現變量是輸出了根工程的路徑,這就解釋了為啥單獨打開模塊能正常運行,作為子模塊運行出現404了。
?二:問題修復:
? ? ?1:直接在idea中設置模塊工作目錄
? ? 2:使用外部tomcat運行?
????????2.1、修改Spring Boot啟動類?
????????啟動類繼承 SpringBootServletInitializer類,并覆蓋 configure方法。
@SpringBootApplication public class DemoApplication extends SpringBootServletInitializer { @Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(DemoApplication.class);}public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);Logger.getGlobal().info("application start");} }? ? ? ? ?2.2、修改jar為war包形式:
2.3、去除Spring Boot內置Tomcat(修改自帶tomcat依賴范圍為provided,防止與外部tomcat發生沖突)
2.4、添加war包打包插件:
如果你用的是繼承spring-boot-starter-parent的形式使用Spring Boot,那可以跳過,因為它已經幫你配置好了。如果你使用的依賴spring-boot-dependencies形式,你需要添加以下插件:
接著配置本地tomcat運行:
運行效果:
總結
以上是生活随笔為你收集整理的idea webapp目录404问题,war包方式运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot参数检验,Asser
- 下一篇: Base64编码运用与基本原理