【原創申明:文章爲原創,歡迎非盈利性轉載,但轉載必須註明來源】javascript
在互聯網產品中,通常會有多個項目(Jar、WAR)組成一個產品線。這些WAR項目,由於使用相同的前端架構(jQuery、easyui等),在各個項目中都會存在這些組件的代碼,以及其餘各個項目中都要用到的公共資源文件。前端
傳統的作法,在每一個War項目中拷貝一份這些文件,分別打包到各個War中。若是這些組件很是穩定,不多升級,也幾乎不存在BUG須要修改,這麼作問題也不大。但若是是相反的狀況,前端人員就要忙瘋了,由於他要在各個項目中進行修改調試,並且還要記住哪些項目修改了,哪些還沒修改。java
針對這一類問題,有什麼比較好的處理方法嗎?jquery
無論後續採用哪一種方案,這都是必需要作的一個步驟。區別在於獨立出來的這些靜態文件,採用哪一種方法組成一個獨立的module。nginx
咱們項目中典型的static目錄內容以下,其餘項目基本相似。web
能夠看到,其中包括jquery\easyui的代碼將會在各個項目中重複出現。spring
將資源文件獨立出來後,使用一個獨立的jar包進行開發;其餘war項目依賴這個jar包。服務器
在項目的src/main/resources目錄中建立static目錄,並將公共靜態文件複製到該目錄中。架構
修改pom.xml文件,配置私有maven庫的地址和用戶信息,這樣mvn deploy能夠自動將jar發佈到maven庫,供其它war項目使用。mvc
首先修改pom.xml,添加dependency。
<dependency> <groupId>cn.codestory.research</groupId> <artifactId>common-static</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> |
而後修改spring配置文件中的mvc:resources部分爲
<mvc:resources mapping="/static/**" location="classpath:/static/" /> |
頁面引用靜態文件時,直接使用代碼
<script type="text/javascript" src='/static/javascript/framework/jquery.min.js'></script> <script type="text/javascript" src='/static/javascript/framework/jquery.easyui.min.js'></script> |
這樣就能正常訪問jar包中的靜態文件。
若是war包中須要添加本項目特有的靜態文件,或者是對jar中的部分靜態文件作修改適應本項目的須要,能夠保存在war項目的目錄中/src/main/resources/static中,其餘代碼都不須要修改。
若是原war中的靜態文件保存在src/main/webapp/static目錄中而且不想移動這些文件,修改spring配置文件中的mvc:resources內容爲
<mvc:resources mapping="/static/**" location="classpath:/static/,/static/" /> |
這種修改方法,不修改項目的部署方式就能實現靜態文件的共享。只是它須要構建一個私有Maven倉庫,在項目之間共享才比較方便。
前端修改代碼時,只須要在common-static.jar項目中修改便可。固然,由於涉及到更多的項目,修改也必定要慎重。這能夠經過升級jar版本號的方法來實現各個war項目的逐漸升級。
在生產環境,將靜態文件獨立部署到一臺服務器,採用Tomcat或Http Server。有兩種方案能夠實現static文件的轉發。
這種方式對項目的修改比較少,也不須要增長新的域名,下圖中可設置轉發規則:
一、uri是/static/**,則一概轉發到static server
二、host是app1.codestory.cn,轉發到app server 1
三、host是app2.codestory.cn,轉發到app server 2
部署方案跟前面相似,區別在於轉發規則的設置。同時,在war包中的script引用路徑必須包括host的完整URL。
<script type="text/javascript" src='http://static.codestory.cn/static/javascript/framework/jquery.min.js'></script> |
更進一步的解決方案,是使用CDN部署,將靜態文件部署到全國各地的機房,用戶可以自動訪問就近的服務器,能提供更高的訪問速度。
不過,這個方案就徹底是部署的問題了,項目有須要且公司有錢的能夠去嘗試。