剛入職一家公司,項目時新搭建的,main目錄下只有java和resource目錄,沒有webapp目錄。emmm,沒有webapp目錄tomcat怎麼監測頁面的變動,怎麼熱加載嗎????
技術負責人告訴我寫完代碼重啓。這操作簡直喪盡天良,改一段代碼想看效果就要重啓???覺得996不夠要007嗎?作爲一個優秀的程序猿(hhh,老臉一紅),我們要避免做重複的和毫無意義的工作,不僅提高開發效率,提高公司項目的推進速度,也是節約自己的時間。(問君能幾何)。
本人就開始了一番大刀闊斧的包結構調整,遇到的問題不少,還好,八小時解決了。
1.建立webapp目錄
鼠標單擊main目錄,使用快捷鍵alt+insert選擇Directory,
在如下輸入框裏輸入webapp再按Enter鍵,文件夾創建完成。
2.將webapp目錄設置爲項目的web Module及web Resource Directory
(1)打開file-project structure
(2)在彈出的project Structure對話框中選擇 Modules,進行web模塊的添加操作(如果項目中已有web模塊可以跳過此步操作)
(3)指定Module和Resource的路徑
其中web.xml可以從其他項目裏複製一個
我的web.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
</web-app>
配置好後點擊確定,webapp 模塊配置就完成了
3.遷移你的web資源到webapp目錄下
這步比較簡單了,在IDE裏移動文件夾即可,有Refactor的資源IDE會自動加測出來幫你修改路徑。
4.修改配置文件
項目中使用的頁面配置映射地址方式爲spring.thymeleaf,如果是springmvc項目可以自行搜索頁面資源映射路徑配置。
我項目中的頁面目前放在這裏
配置文件路徑映射修改爲如下
spring.thymeleaf:
prefix: file:./src/main/webapp/templates/
suffix: .html
mode: HTML5
encoding: UTF-8
#熱部署文件,頁面不產生緩存,及時更新, 在開發階段設置爲false
cache: false
5.修改WebMvcConfigurer類,添加資源頭和映射關係
(1)找到你項目中WebMvcConfigurer的實現類
(2)在此類中找到重寫的addResourceHandlers方法,在其中添加靜態資源路徑(這裏添加後通過瀏覽器就能直接訪問tomcat下對應目錄的文件,如果不添加的話,瀏覽器訪問會被tomcat識別爲web請求,去尋找後臺接口了)
(3)找到重寫的addInterceptors方法(過濾器,就是spring的安全策略,允許瀏覽器直接訪問這些資源),把需要能直接訪問的文件夾或文件類型添加進去,它的起始目錄是第二步中配置好的ResourceLocations。
OK 現在試試啓動項目訪問文件吧,應該可以了,如果發現頁面上有不能訪問的靜態資源,可能是你頁面裏寫的資源路徑有誤。批量替換一下根目錄即可。
如果你使用的部署方式是war包構建,那麼文章看到這裏就足夠了。如果使用的部署方式是jar包,那麼請繼續看下去。
我項目中構建工具是Gradle,不是maven。。。
由於項目需要打成jar包部署爲docker鏡像再運行,所以打jar包就有嚴格的要求了。修改完webapp目錄後必須進行構建配置才能使webapp目錄下的文件打包到jar包內。配置方式如下:
(1)打開你項目中的build.gradle文件
(2)在jar一項中添加如下構建
from('src/main/webapp/static'){
into 'static'
}
from('src/main/webapp/templates'){
into 'templates'
}
tip:我項目中 src/main/webapp/static 目錄下放的是所有的js和css ,src/main/webapp/templates下放的是所有html頁面。
(3)作爲一個適配多環境的項目必然有多版本配置文件
除了local配置文件外,其他配置文件中將之前的spring.thymeleaf:配置項改回
好了,測試一下項目部署情況吧》