美文网首页Java服务器端编程我爱编程
【后台开发系列-Tomcat】server.xml中访问多个项目

【后台开发系列-Tomcat】server.xml中访问多个项目

作者: BeJack | 来源:发表于2017-10-10 21:30 被阅读140次

    server.xml作为 tomcat 启动时的配置依据,其功能包含了配置访问端口,访问路径等,这里主要针对在同一个 tomcat 中发布多个项目,其中最关键的配置是·<Host>标签下appBase<Context>标签下docBasepath之间的关系,以下也只列出关键性代码

    标签释义

    以下表格应用自 tomcat中server.xml配置详解

    元素名 属性 解释
    host(表示一个虚拟主机) name 指定主机名
    appBase 应用程序基本目录,即存放应用程序的目录
    unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序
    Context(表示一个web应用程序) docBase 应用程序的路径或者是WAR文件存放的路径
    path 表示此web应用程序的url的前缀
    reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序

    域名配置

    以下例子引用自 tomcat部署多项目server.xmll配置

    • 同个域名多个项目
    <Host appBase="webapps" autoDeploy="true" name="www.test.com.cn" unpackWARs="true">
    
        <!--访问路径:www.test.com.cn/test-one-->
        <Context docBase="D:\tomcat\webapps\test-one" path="/test-one" reloadable="true"/> 
     
        <!--访问路径:www.test.com.cn/test-two-->
        <Context docBase="D:\tomcat\webapps\test-two" path="/test-two" reloadable="true"/> 
    </Host>  
    
    • 不同域名多个项目
    <!-- 访问路径:www.test.com.cn  -->  
    <Host name="www.test.com.cn"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="/" docBase="D:\tomcat\webapps\test-three" reloadable="true" />
    </Host>
    
    <!-- 访问路径:www.test2.com.cn  -->
    <Host name="www.test2.com.cn"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="/" docBase="D:\tomcat\webapps\test-four" reloadable="true" />
    </Host>  
    

    解释说明

    1.appBase

    <Host>中的appBase,其作用是指定 tomcat 启动时,第一加载的项目,默认的为 webapps ,它代表的意思是加载 tomcat 根目录下 webapps 文件夹中的项目,也就是 tomcat 的管理页。

    • 将项目作为默认启动项目时,注意:appBase指定路径的项目,需要包含有ROOT的文件夹,但不需要写进XML中,例如
      项目test的原路径:
      E:\WorkProject\TomcatRun\test\WEB-INF
      如果要将该项目设置为默认的启动项目,则文件的存放路径需要改为
      E:\WorkProject\TomcatRun\test\ROOT\WEB-INF

    相应的配置文件为

    <Host name="localhost"  appBase="E:\WorkProject\TomcatRun\test" unpackWARs="true" autoDeploy="true">
    </Host>
    

    并且此项目的API访问路径不需要URL前缀,即http://localhost:8080

    2.docBase

    <Context>中的docBase,其作用是当需要发布多个项目时,可以在这里设置项目路径,值可以是绝对路径,也可以时相对于appBase的路径,这里我们只写绝对路径。
    比如我们有另一个项目test2,存放地址是E:\WorkProject\TomcatRun\test2,则相应的配置可以写为

    <Host name="localhost" unpackWARs="true" autoDeploy="true" appBase="webapps">
      <Context docBase="E:\WorkProject\TomcatRun\test2" path=" " debug="0"  reloadable="true"/>
    </Host> 
    

    这里appBase="webapps",因为我们不去关心默认启动项目,而且我们这里的path=" ",当path=" "时,docBase所指向的项目就是第一加载项目,访问http://localhost:8080时,指向的是docBase所指向的项目(这里不需要存在ROOT文件夹)

    3.path

    这个比较简单,它的作用是URL的访问前缀,和项目本身没有关系,可以是任意值,比如

    <Host name="localhost" unpackWARs="true" autoDeploy="true" appBase="webapps">
      <Context docBase="E:\WorkProject\TomcatRun\test2" path="project1" debug="0"  reloadable="true"/>
    </Host> 
    

    那么要访问test2时,需要访问http://localhost:8080/project1

    采坑

    在设置appBasedocBase有个地方需要注意,当appBase的根路径和docBase的根路径一致时,会导致项目重复加载,比如

    <Host appBase="D:\tomcat\webapps\test-three" autoDeploy="true" name="www.test.com.cn" unpackWARs="true">
    
        <Context docBase="D:\tomcat\webapps\test-one" path="/test-one" reloadable="true"/> 
    
        <Context docBase="D:\tomcat\webapps\test-two" path="/test-two" reloadable="true"/> 
    </Host>  
    

    文件夹webapps下有三个项目文件夹,分别是test-onetest-twotest-three,由于appBase加载的项目和docBase加载的项目处于同一根目录,当启动tomcat的时候,会加载一次test-threetest-onetest-one会分别加载两次,这里给出了解释[Tomcat] server.xml配置appBase与docBase的用法

    相关文章

      网友评论

        本文标题:【后台开发系列-Tomcat】server.xml中访问多个项目

        本文链接:https://www.haomeiwen.com/subject/wacbyxtx.html