zoukankan      html  css  js  c++  java
  • 多War项目中静态文件的共享方案

    【原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源】

    在互联网产品中,一般会有多个项目(Jar、WAR)组成一个产品线。这些WAR项目,因为使用相同的前端架构(jQuery、easyui等),在各个项目中都会存在这些组件的代码,以及其他各个项目中都要用到的公共资源文件。

    传统的做法,在每个War项目中拷贝一份这些文件,分别打包到各个War中。如果这些组件非常稳定,很少升级,也几乎不存在BUG需要修改,这么做问题也不大。但如果是相反的情况,前端人员就要忙疯了,因为他要在各个项目中进行修改调试,而且还要记住哪些项目修改了,哪些还没修改。

    针对这一类问题,有什么比较好的处理方法吗?

    1 静态文件从War包中独立

    不管后续采用哪种方案,这都是必须要做的一个步骤。区别在于独立出来的这些静态文件,采用哪种方法组成一个独立的module。

    我们项目中典型的static目录内容如下,其他项目基本类似。

    可以看到,其中包括jqueryeasyui的代码将会在各个项目中重复出现。

    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部署,将静态文件部署到全国各地的机房,用户能够自动访问就近的服务器,能提供更高的访问速度。

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

  • 相关阅读:
    第七节:Asp.Net Core内置日志、将EF生成的SQL输出到控制台
    自学Zabbix3.6.2-触发器triggers severity严重程度
    自学Zabbix3.6.1-触发器triggers创建
    自学Zabbix3.5.7-监控项item-Applications
    自学Zabbix3.5.6-监控项item-Value mapping值映射
    自学Zabbix3.5.5-监控项item-User parameters(自定义key)
    自学Zabbix3.5.4-监控项item-History and trends
    自学Zabbix3.5.3-监控项item-zabbix agent 类型所有key
    自学Zabbix3.5.2-监控项item-types监控类型
    自学Zabbix3.5.1-监控项item-key介绍
  • 原文地址:https://www.cnblogs.com/codestory/p/5707637.html
Copyright © 2011-2022 走看看