Tomcat的appBase,docBase,path关系

1. 结论在最前面

结论:

  • 默认情况下(appBase=webapps,无Context标签),会把webapps目录下的war包解压到webapps目录,要带包名访问
  • appBase指定目录下的war包都会被自动解压为对应的包,例如demo.war会被解压到demo目录下。
  • war包位置,是根据appBase + docBase来确定的
  • war包解压的目录,是根据appBase + path来确定的,path为/则默认会解压到ROOT目录,path="/a",则会解压在a目录。
    • ROOT或a目录所在的目录,是appBase来确定的。如果appBase="",则在tomcat根目录;如果appBase=“webapps”,则目录生成在webapps目录下。

在看例子前,要特别注意的是,如果webapps="",则默认tomcat根目录会被发布出来,可以通过http://localhost:8080/conf/context.xml直接拿到context.xml内容,如果恰好我们是使用JNDI数据源,则可能泄露DB的账号密码!

举例:(war包里接收/sample的请求)

  • appBase=“webapps”,没有Context标签。只会默认解压webapps目录下的war包。
  • appBase=“webapps”,docBase="/demo" path="/",war包在webapps/demo.war。这时会启动2遍。第一遍是默认解压webapps目录下的war包;第二遍是根据appBase+docBase(即webapps/demo.war)找到war包,解压到appBase+path(即webapps/ROOT)目录下。
    • 最终在webapps目录下有2个文件件:ROOT和demo
    • 可以通过http://localhost:8080/sample或http://localhost:8080/demo/sample访问
  • appBase=“webapps”,docBase="/demo" path="/a",war包在webapps/demo.war。这时会启动2遍。第一遍是默认解压webapps目录下的war包;第二遍是根据appBase+docBase(即webapps/demo.war)找到war包,解压到appBase+path(即webapps/a)目录下。
    • 最终在webapps目录下有2个文件件:a和demo
    • 可以通过http://localhost:8080/demo/sample或http://localhost:8080/a/sample访问
  • appBase="",docBase="/demo" path="/",war包在tomcat根目录下demo.war。这时会启动2遍。第一遍是默认解压tomcat根目录下的war包;第二遍是根据appBase+docBase(即tomcat根目录下找demo.war)找到war包,解压到解压到appBase+path(即tomcat根目录下的ROOT)目录下。
    • 最终在tomcat根目录下有2个文件件:ROOT和demo
    • 可以通过http://localhost:8080/sample或http://localhost:8080/demo/sample访问
  • appBase="",docBase="/demo" path="/a",war包在tomcat根目录下demo.war。这时会启动2遍。第一遍是默认解压tomcat根目录下的war包;第二遍是根据appBase+docBase(即tomcat根目录下找demo.war)找到war包,解压到解压到appBase+path(即tomcat根目录下的a)目录下。
    • 最终在tomcat根目录下有2个文件件:a和demo
    • 可以通过http://localhost:8080/demo/sample或http://localhost:8080/a/sample访问

2. server.xml关于appbase和context配置

2.1. war包在webapps目录下;appbase=“webapps”;无context配置


启动后:

访问:
http://localhost:8080/demo/sample
demo是包名,要加
结论:

  • webapps目录下的war包会自动解压
  • 访问的时候需要带上包的名字(这里是demo)

2.2. war包在webapps目录下;appbase="";有context配置


启动后:

访问:
http://localhost:8080/sample

结论:

  • webapps目录下的war包会自动解压到tomcat根目录的ROOT文件夹下
  • 由于server.xml中的<Context>标签中path是\,访问的时候不用带包名

2.3. war包在webapps目录下;appbase=“webapps”;有context配置(相对路径)


启动后:
启动会报错,查看日志如下

结论:

  • 去找war包,docBase的目录如果是相对路径,那么就是相对appBase来看的。这里appBase是webapps,那么加上docBase,就是要去找webapps\webapps\demo。
  • 如果这里docBase配置为"/demo",就可以自动解压在webapps目录下,并且通过http://localhost:8080/sample或者http://localhost:8080/demo/sample都可以访问,因为:

此时,如果在webapps目录下再建一个webapps目录,把war包放进去:

启动(war包会解压到tomcat/webapps/ROOT目录下):

访问:
http://localhost:8080/sample

结论:

  • war包的位置是根据appBase + docBase来定的
  • war包会默认解压到webapps目录的ROOT下(看起来ROOT总是在war包的上一层目录)

2.4. war包在webapps目录下;appbase=“webapps”;有context配置(绝对路径)


启动后(在webapps目录下会生成ROOT目录,war包解压到这里):

访问:
http://localhost:8080/sample

结论:

  • 如果docBase是绝对目录,就不再参考appBase,直接去找war包
  • 找到的war包,会自动解压到webapps的ROOT目录下

2.5. war包在tomcat根目录下;appbase="";有context配置(/demo)


启动后,会自动解压demo.war,并且在tomcat根目录下生成ROOT文件夹,同时也会启动2遍

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值