程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 多War項目中靜態文件的共享方案,war項目靜態共享

多War項目中靜態文件的共享方案,war項目靜態共享

編輯:JAVA綜合教程

多War項目中靜態文件的共享方案,war項目靜態共享


【原創申明:文章為原創,歡迎非盈利性轉載,但轉載必須注明來源】

 

在互聯網產品中,一般會有多個項目(Jar、WAR)組成一個產品線。這些WAR項目,因為使用相同的前端架構(jQuery、easyui等),在各個項目中都會存在這些組件的代碼,以及其他各個項目中都要用到的公共資源文件。

傳統的做法,在每個War項目中拷貝一份這些文件,分別打包到各個War中。如果這些組件非常穩定,很少升級,也幾乎不存在BUG需要修改,這麼做問題也不大。但如果是相反的情況,前端人員就要忙瘋了,因為他要在各個項目中進行修改調試,而且還要記住哪些項目修改了,哪些還沒修改。

針對這一類問題,有什麼比較好的處理方法嗎?

1 靜態文件從War包中獨立

不管後續采用哪種方案,這都是必須要做的一個步驟。區別在於獨立出來的這些靜態文件,采用哪種方法組成一個獨立的module。

我們項目中典型的static目錄內容如下,其他項目基本類似。

可以看到,其中包括jquery\easyui的代碼將會在各個項目中重復出現。

2 將靜態文件作為獨立jar包開發

將資源文件獨立出來後,使用一個獨立的jar包進行開發;其他war項目依賴這個jar包。

2.1 靜態文件jar項目

在項目的src/main/resources目錄中創建static目錄,並將公共靜態文件復制到該目錄中。

修改pom.xml文件,配置私有maven庫的地址和用戶信息,這樣mvn deploy可以自動將jar發布到maven庫,供其它war項目使用。

2.2 War包項目引用

首先修改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/"  />

2.3 小結

這種修改方法,不修改項目的部署方式就能實現靜態文件的共享。只是它需要構建一個私有Maven倉庫,在項目之間共享才比較方便。

前端修改代碼時,只需要在common-static.jar項目中修改即可。當然,因為涉及到更多的項目,修改也一定要慎重。這可以通過升級jar版本號的方法來實現各個war項目的逐漸升級。

3 靜態文件作為獨立WAR,依靠部署來實現

在生產環境,將靜態文件獨立部署到一台服務器,采用Tomcat或Http Server。有兩種方案可以實現static文件的轉發。

3.1 nginx根據URI地址進行轉發

這種方式對項目的修改比較少,也不需要增加新的域名,下圖中可設置轉發規則:

1、uri是/static/**,則一律轉發到static server

2、host是app1.codestory.cn,轉發到app server 1

3、host是app2.codestory.cn,轉發到app server 2

3.2 靜態文件服務器申請獨立域名

部署方案跟前面類似,區別在於轉發規則的設置。同時,在war包中的script引用路徑必須包括host的完整URL。

<script type="text/javascript"

      src='http://static.codestory.cn/static/javascript/framework/jquery.min.js'></script>


3.3 應用CDN部署靜態文件項目

更進一步的解決方案,是使用CDN部署,將靜態文件部署到全國各地的機房,用戶能夠自動訪問就近的服務器,能提供更高的訪問速度。

不過,這個方案就完全是部署的問題了,項目有需要且公司有錢的可以去嘗試。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved