你的位置:首页 > Java教程

[Java教程]多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.

2.2 War包项目引用

首先修改pom.

 

<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='http://www.cnblogs.com//static/javascript/framework/jquery.min.js'></script>

<script type="text/javascript"  src='http://www.cnblogs.com//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部署,将静态文件部署到全国各地的机房,用户能够自动访问就近的服务器,能提供更高的访问速度。

不过,这个方案就完全是部署的问题了,项目有需要且公司有钱的可以去尝试。