首页 >> 知识 >> tomcat部署应用时设置应用上下文路径content path

tomcat部署应用时设置应用上下文路径content path

问题解决的配置定位

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

 Tomcat里appBase和docBase的区别 

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

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

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

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

总结:

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

示例1

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

你可以通过

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

示例2

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

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

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

这两个域名都能走!!!

 

 的webapps目录下ROOT目录和其他应用目录

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

在配置中包含如下信息:

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

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

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

说明:当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。

当webapps路径下存在ROOT目录

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

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

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

 

 

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

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

也就是说

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

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

 

网站地图