Tomcat三大部署方式之配置分析

前言:记录一下在部署JavaWeb项目时详细了解了Tomcat的几大部署方式,根据配置方式分析一下配置参数,加深对这些参数意义的理解。

目录

一、webapps目录部署

操作过程:

示例:

分析:

二、通过Context配置文件部署

操作过程:

示例:

2.1相对路径:

2.2绝对路径:

分析:

Tomcat配置域名访问项目

三、在conf/Catalina目录下配置

操作过程:

示例:

分析:

总结一下涉及到的参数:

Host标签:

Context标签:


一、webapps目录部署

操作过程:

把项目复制到Tomcat安装目录下的webapps目录,启动Tomcat,访问【http://localhost:8080/1/】即可。


示例:

复制项目名为1的项目到webapps目录下

项目名为1文件夹下的文件

访问该URL结果:


分析:

可以这样部署的原因是什么呢?分析一下默认的配置文件,打开Tomcat安装目录下的conf/server.xml,看到Host标签部分如下:

<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" />
</Host>

appBase:指定了webapps目录下的项目将被部署为应用;

unpackWars:为true时表示该目录下放入的war包会自动解压为项目文件

autoDeploy:为true时表示自动部署,Tomcat在运行时定期检查新的Web应用或Web应用的更新

完整描述一下过程:Tomcat启动后,当我们把项目复制到webapps中如果复制的是war包,那么Tomcat会把它解压成项目文件(直接复制项目文件Tomcat还省一步解压过程,但一般部署到Linux服务器上需要打成war包上传的),然后自动部署。。。当地址栏输入【http://localhost:8080/1/】时,先由这个域名(本机域名映射到127.0.0.1)找到本机处理,再由8080端口找到Tomcat处理,Tomcat中再找到默认的webapps目录下项目名为1的项目,最后就将index.jsp显示出来啦。当然地址栏输入【http://localhost:8080/1/index.jsp】也是一样可以访问到里面的index.jsp的噢。

注意:在webapps下存在的都是文件夹(项目)形式,若以文件存在,那么通过Tomcat是访问不到的。


二、通过Context配置文件部署

操作过程:

在tomcat安装目录中打开conf/server.xml配置文件,并在<host>和</host>之间插入如下语句。

<Context path="/XXX" docBase="/usr/local/tomcat/webapps/XXX" debug="0" privileged="true"> </Context>

之后通过【IP地址:8080/XXX】就可以访问项目啦。

示例:

docBase处有两种方式,一个相对路径,一个绝对路径。


2.1相对路径:

我把项目就不放在webapps中了,放在webapps同级的data目录下(其实任何地方都可以)

在Host标签中间插入下面这个代码

<!-- 配置相对路径,若项目名为2.1relative的项目位于tomcat安装目录下的data中,即webapps同级目录下的data文件夹下 -->
<Context path="relative" docBase="../data/2.1relative" debug="0" reloadable="false" crossContext="true"/>

访问【http://localhost1:8080/relative/


2.2绝对路径:

在Host标签中间插入下面这个代码

<!-- 配置绝对路径,我的项目名为absolute的项目位于tomcat安装目录下的data文件夹下,不同路径配置相应变化 -->
<Context path="absolute" docBase="G:\JavaWeb\tool\apache-tomcat-8.5.37\data\2.2absolute" debug="0" reloadable="false" crossContext="true"/>

访问【http://localhost:8080/absolute/


分析:

path:指定项目访问URL,即Tomcat会通过这个路径知道你想访问哪个项目,为空则不加路径就能访问,默认访问appBase下ROOT中的内容;

docBase:设置项目所在位置,Tomcat通过path知道了需要访问某个项目,那么这个项目位于Tomcat的什么位置呢?这个就由docBase来确定。这个路径可以是计算机中的绝对路径如:【G:\data\XXX(windows下);/data/XXX(Linux下)】;也可以是相对路径,这个相对是相对于host标签中的appBase中确定的位置,如果appBase为【/data】而该项目是位于/data目录下的XXX,那么docBase写成【XXX】即可。

完整描述一下过程:当我们把项目放在某个文件夹后,若不在appBase下,那需要重启一下Tomcat,因为Host标签中指定的在appBase下的文件夹才会自动部署,不是这个文件夹就需要重启一下才能部署成功。。。当地址栏输入【http://localhost:8080/XXX/】时,先由这个域名(本机域名映射到127.0.0.1)找到本机处理,再由8080端口找到Tomcat处理,Tomcat中再找到Host标签中name为localhost的域名下面的项目名为XXX的项目,再由docBase指定的位置找到这个项目在计算机中的具体位置,最后就将项目中的index.jsp显示出来啦。


Tomcat配置域名访问项目

有了前面的铺垫这里说得稍微再说深入一些,顺便说下通过Tomcat配置域名访问。

Host标签:定义了虚拟主机,一个Tomcat中可以定义多个虚拟主机,一个虚拟主机可以包含一个或多个web应用。这个虚拟主机的名字实际上可以理解为访问的域名,localhost是本机域名,windows在【C:\Windows\System32\drivers\etc\host】Linux在【/etc/hosts】中可以修改IP和域名的映射关系,,localhost域名映射到127.0.0.1本地回环IP,当需要定义多个Host时这多个Host的name不能相同。

举个栗子:

1.增加一个Host标签,并指定名字为domain.test

<!--指定Host的name为domain.test,让它访问data中的domain项目 -->
<Host name="domain.test" appBase="data" unpackWARs="true" auoDeploy="true">
        <Context path="" docBase="domain" debug="0" reloadable="false" crossContext="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" />
</Host>

2.修改【C:\Windows\System32\drivers\etc\host】host文件,让domain.test域名映射到本地回环IP

3.通过刚刚指定的域名访问

另外,在公网服务器上部署项目通过Tomcat配置域名也就是用这个方法。


三、在conf/Catalina目录下配置

操作过程:

在conf/Catalina目录下可以看到localhost文件夹,在localhost文件夹下新建一个confTest.xml文件,文件内容如下:

<Context path="" docBase="G:\JavaWeb\tool\apache-tomcat-8.5.37\data\confTest" 

debug="0" privileged="true"> </Context>

启动Tomcat之后,地址栏输入【http://localhost:8080/confTest/】就可以访问到confTest项目啦。注意这儿path指定的没有作用,这个xml文件名取代了path的作用。

示例:

配置xml文件

访问【http://localhost:8080/confTest/

分析:

在conf/Catalina目录下可以看到localhost文件夹是因为conf/Catalina目录下的文件夹名字是conf/server.xml中配置Host的name值,默认是localhost。如果在server.xml中配置的多个Host,那么在conf/Catalina目录下可以看到多个Host指定的name那些文件夹。这儿的每个文件夹相当于是Tomcat中的各个虚拟主机。这种配置方式相比在server.xml中添加Context更加方便快捷,当该Host指定了自动部署属性为true,这种方式也是一样有热部署效果的,不需要部署某项目直接把那个项目的xml文件删了即可,非常方便。

总结一下涉及到的参数:

Host标签:

定义了虚拟主机,一个Tomcat中可以定义多个虚拟主机,一个虚拟主机可以包含一个或多个web应用。另外Host标签至少有一个,且其中一个的name必须与Engine组件中的defaultHost属性相匹配。

重要属性:

name:通常是虚拟主机的网络名称,注册在你的域名服务器上。无论指定的主机名称是什么样的,Tomcat 在内部都会将其转换为小写。嵌套在 Engine 内部的 Host ,其中必须有一个 Host 的名称匹配 Engine 的默认 Host 设置,当需要定义多个Host时这多个Host的name不能相同。

appBase:虚拟主机的目录,下面的子目录将被部署为应用可以用绝对目录的形式或者相对于<CATALINA_HOME>的目录,默认是<CATALINA_HOME>/webapps。

unpackWARs:appBase目录下的 WAR-file 是否应该被解压。默认为true,对于 unpackWARs=”false“,Tomcat 将会直接从 WAR-file 运行应用,而不解压,这可能导致应用运行变慢。

autoDeploy:是否自动部署放到appBase目录下的应用。默认autoDeploy为true,Tomcat在运行时定期检查新的Web应用或Web应用的更新;

Context标签:

Host的子元素,含义是一个虚拟主机目录下的一个应用程序,一个Host中可以有多个Context标签,可以没有,没有默认访问appBase下的ROOT。

重要属性:

path:指定项目访问URL,即Tomcat会通过这个路径知道你想访问哪个项目,为空则不加路径(直接通过域名和端口访问)就能访问,默认访问appBase下ROOT中的内容,可指定相对路径或者绝对路径;

docBase:设置项目所在位置(本机位置),可指定相对路径或者绝对路径,Tomcat通过path知道了需要访问某个项目,那么这个项目位于Tomcat的什么位置呢?这个就由docBase来确定。这个路径可以是计算机中的绝对路径如:【G:\data\XXX(windows下);/data/XXX(Linux下)】;也可以是相对路径,这个相对是相对于host标签中的appBase中确定的位置,如果appBase为【/data】而该项目是位于/data目录下的XXX,那么docBase写成【XXX】即可。另外,docBase不在appBase目录中,才需要指定;如果docBase指定的WAR包或应用目录就在appBase中,则不需要指定。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值