Tomcat映射虚拟目录的三种方式(2021版)

Posted 于大圣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat映射虚拟目录的三种方式(2021版)相关的知识,希望对你有一定的参考价值。

前言:首先要弄明白什么是TOMCAT的虚拟目录:当WEB应用开发完毕后,如果想要对外发布就需要部署到服务器上面,服务器的主要功能就是需要监听端口、接收和解析访问请求并转发给相应的WEB应用进行处理。比如用户访问A应用(https://host:port/A)时,那么服务器就需要找到应用名A和WEB应用的映射关系,以便服务器能够正确地转发客户访问请求到WEB应用,这个应用名A就是一个虚拟目录,这个虚拟目录映射到WEB应用所在的目录;我们把将虚拟目录与WEB应用所在目录的映射过程称为虚拟目录的映射。

一、TOMCAT服务器的自动映射

TOMCAT有个webapps目录且会自动管理该目录下的所有web应用,并把它映射成虚拟目录。换句话说只要你把WEB应用项目放到这个webapps目录下,启动服务器后外界可以直接访问。日常开发中,我们需要把WEB应用打包成war包后放到这个webapps目录下,启动服务器后会自动解压缩到当前目录中。比如我们把JavaWebDemo.war放置到webapps目录下,启动服务器后,会解压成JavaWebDemo目录并映射成一个同名虚拟目录"/JavaWebDemo",然后就可以通过https://host:port/JavaWebDemo访问了。

二、在server.xml中的Host元素进行配置Context

首先看下面这个配置,特别是Context元素。可以简单的理解为一个WEB应用对应一个Context元素。

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
	<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" />
	<Context path="/JavaWebDemo" docBase="C:/Users/Administrator/Desktop/JavaWebDemo" />
</Host>

Context元素的作用就是虚拟目录的映射,该元素有两个属性:path和docBase

  • path:用来配置虚拟目录名称,必须以"/"开头;
  • docBase:WEB应用所在的物理路径;

以后访问"/JavaWebDemo/index.jsp"时,根据虚拟目录的映射,相当于访问"C:/Users/Administrator/Desktop/JavaWebDemo/index.jsp"。

注意:这种方式虽然可行,但Tomcat官方以不推荐,原因如下,大家了解下即可:

  1. 在server.xml中配置的任何元素和属性,在重启服务器后server.xml才会被重新加载配置才可以生效;
  2. 这种配置方式容易被默认的Context元素重写;

三、基于$CATALINA_BASE/conf/[enginename]/[hostname]的虚拟目录映射

这里首先需要首先借助下面的图来理解下什么是CATALINA_HOME和CATALINA_BASE。一个服务器可以配置多个WEB应用,可以简单理解为CATALINA_HOME就是服务器安装目录,一个WEB应用对应一个CATALINA_BASE(TOMCAT实例),由于此次不涉及多实例多应用,那么也可以把CATALINA_BASE理解为服务器安装目录。

接下来看一下enginename和hostname,可以借助server.xml中的Engine元素中的配置理解下;那么$CATALINA_BASE/conf/[enginename]/[hostname] -> tomcat安装目录/conf/Catalina/localhost

<Engine name="Catalina" defaultHost="localhost">
	<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
		<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" />
		<Context path="/upload/images" docBase="C:/Users/Administrator/Desktop/a" />
	</Host>
</Engine>

好的,了解完以上常识,下面进入该映射配置正题:

简单来说就是要在$CATALINA_BASE/conf/[enginename]/[hostname](tomcat安装目录/conf/Catalina/localhost)下新建一个JavaWebDemo.xml,内容如下:

<Context docBase="C:/Users/Administrator/Desktop/JavaWebDemo" />

虚拟目录的映射中path取自为文件名,即JavaWebDemo.xml -> JavaWebDemo。"docBase"取自文件中的docBase配置的属性值;

总结:

  1. TOMCAT服务器映射虚拟目录需要两个必要信息来建立映射:虚拟路径名称、WEB应用所在目录;
  2. 以上三种方式无非通过不同的方式来告诉TOMCAT服务器必要信息来映射虚拟目录;
  3. 以上三种方式各有利弊,具体问题具体分析即可;

以上,完了!

以上是关于Tomcat映射虚拟目录的三种方式(2021版)的主要内容,如果未能解决你的问题,请参考以下文章

IDEA中引入和启动TOMCAT的本质

部署webapp到web容器的三种方式(这里的web容器Tomcat)

tomcat发布资源的三种方式

tomcat下jndi的三种配置方式

tomcat部署web项目的三种方式

cache-主存的三种映射方式