zoukankan      html  css  js  c++  java
  • tomcat部署应用时设置应用上下文路径content path

    问题解决的配置定位


    主要是配置/data/install/apache-tomcat-x.x.x/conf/server.xml文件里的host属性以及content属性

    <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
            <!-- <Context docBase="cat" path="" reloadable="false" /> -->
            <!-- SingleSignOn valve, share authentication between web applications
                 Documentation at: /docs/config/valve.html -->
            <!--
            <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
            -->
    
            <!-- Access log processes all example.
                 Documentation at: /docs/config/valve.html
                 Note: The pattern used is equivalent to using pattern="common" -->
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    
          </Host>

     

    Tomcat里appBase和docBase的区别


     

    首先明确appBase和docBase都是指定tomcat要部署的应用所在的目录;

    appBase配置的目录(是指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.)表示:

    1. 这个目录下面的子目录将自动被部署为应用。
    2. 这个目录下面的.war文件将被自动解压缩并部署为应用

    docBase只是指向了你某个应用的目录(指定Web应用的文件路径.可以给定绝对路径,也可以给定相对于Host的appBase属性的相对路径)

    总结

    1. 如果你想自己指定路径,那么应该在docBase里面
    2. 如果你想简单,那么直接把他们复制到appBase下面就行了
    3. appBase目录只能包含应用,是应用的父级目录,而不能是一个应用目录;如果不配置Context指定应用docBase和path,则下属应用的docBase就是该应用名称,path就是   “/应用名”;
    4. docBase目录应用所在路径,可以是磁盘绝对路径,也可以是相对appBase路径,如果配置相对路径,则应用部署两次

    示例1

    比如你的应用为myApp, 放在了d:projectmyApp,里面有2个子目录d:projectmyAppimages和d:projectmyAppjs

    你可以通过

    1. 设置 appBase 指向 d:project 来让系统自动部署
    2. 你可以手工指定docBase到 d:projectmyApp
    3. 如果你指定了 appBase到 d:projectmyApp 那么d:projectmyAppimages这个将不再是普通的子目录,而是一个单独的虚拟目录,或者叫应用了。因为其被自动部署;d:projectmyAppjs 也一样的后果

    示例2

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="ture" >
      <Context path="" docBase="aaa" debug="0" reloadable="true"/>
    </Host>

    结果就是项目加载部署了两遍

    第一遍:webapp下所有的文件夹部署(虽然我只有一个aaa文件夹)(访问路径   localhost:8080/aaa/.....)

    第二遍:指定docBase为aaa文件夹又走了一遍,且path为空(l访问路径   localhost:8080/......)

    这两个域名都能走!!!

     <CATALINA_HOME>的webapps目录下ROOT目录和其他应用目录


    在tomcat配置文件目录conf目录下的server.xml中添加<Context>元素,配置如下:

    <Context docBase="app" path="" reloadable="false" />

    在<Context>配置中包含如下信息:

    1. 配置docBase值为:docBase="app"或者docBase="app.war",即项目war包名称或者全名;
    2. path为空,表示app为tomcat默认应用;

    同时,将app.war部署在${CATALINA_HOME}/webapps/路径下。

    实际上,tomcat部署应用程序的顺序是这样的(tomcat启动日志):
    1.最先部署${CATALINA_HOME}/webapps/路径下的ROOT应用,该应用为tomcat的默认应用程序,访问时不用带应用上下文路径,即:http://host:port/xxx。
    2.然后再按照字母顺序升序依次部署其他应用程序,如:appA,appB等等。

    说明:

    1. 当webapps路径下没有ROOT目录

      如果在部署app时删除了${CATALINA_HOME}/webapps/路径下的ROOT目录(即删除tomcat默认应用),

      那么在tomcat启动时,会首先在CATALINA_HOME/webapps/路径下创建名称为ROOT的目录,然后将文件app.war中的内容拷贝到ROOT目录下,开始部署ROOT应用程序。

      接下来才会解压app.war,再部署app应用。

      从tomcat的启动日志可以很容易知道,在这种情况下app应用会被加载2次,一次是部署ROOT时加载的,另一次是部署app本身加载的。

      因此,访问应用可以带应用上下文路径,也可以不用带上下文路径,即:http://host:port/xxx或者http://host:port/app/xxx。

    2. 当webapps路径下存在ROOT目录

      如果在部署app时不删除${CATALINA_HOME}/webapps/路径下的ROOT目录,即已经存在默认应用程序。

      此时在tomcat启动时,会先部署ROOT默认应用(注意:已经存在ROOT应用,不再会拷贝app.war文件内容到ROOT下)。然后解压app.war,部署app应用。显然,app应用只被部署一次!

      因此,在这种情况下,即便配置了<Context>元素的path为空,但是访问app应用时还是必须携带应用上下文路径,即:http://host:port/app/xxx。

    多个应用,指定了多个Context,那就必须都配上path


     

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
      <Context path="aaa" docBase="testa" debug="0" reloadable="true"/>
      <Context path="bbb" docBase="testb" debug="0" reloadable="true"/>
    </Host>

    有多个context,就要配上多个path,这样才能根据不同的项目走不通的路径

    也就是说

    testa应用走的是localhost:8080/aaa/...

    testb应用走的是localost:8080/bbb/...

  • 相关阅读:
    [Objective-C语言教程]继承(25)
    [Objective-C语言教程]类和对象(24)
    [Objective-C语言教程]命令行参数(23)
    [Objective-C语言教程]错误处理(22)
    [Objective-C语言教程]日志处理(21)
    转 路径中 斜杠/和反斜杠 的区别
    转 Oracle 12C 之 CDB/PDB用户的创建与对象管理
    win10怎么启用网络发现,网络发现已关闭怎么办
    转 Oracle12c/11个 Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版
    转 Oracle DBCA高级玩法:从模板选择、脚本调用到多租户
  • 原文地址:https://www.cnblogs.com/wly1-6/p/14587093.html
Copyright © 2011-2022 走看看