前言

最近在 tomcat 配置和部署应用时,踩了一些坑,主要是关于在 ${CATALINA_HOME}/conf/server.xml 配置文件里的 Host 节点属性 appBase,及 Host 节点子节点 Context>的属性 docBase。

我是将项目打成 App1.war 包,然后把 war 包上传到 tomcat 的相关目录,启动部署。

部署方案

1. 默认配置,不修改 conf/server.xml 文件

把 war 包直接传到 ${CATALINA_HOME}/webapps/ 目录,启动 tomcat 后,tomcat 会自动解压这个 webapps 目录下的 war,并且部署。

例如,把 App1.war 放到 webapps 目录后,tomcat 会将 App1.war 解压为 webapps/App1 目录,然后部署。

这是默认配置,没新增 Context 子节点,让 tomcat 来解压 war 包,非常方便。

2. 修改 conf/server.xml 文件,新增 Context 节点,并设置 docBase=“App1”(错误示例)

把 App1.war 包传到 ${CATALINA_HOME}/webapps/ 目录, 并修改 conf/server.xml 文件,增加 Context 节点,并指定 Context 节点属性 docBase=“App1”

由方案1可知,App1.war 会自动解压到 App1 目录,那么把 docBase 设置为 App1 似乎是很自然的事情。

可这会有一个坑,Host 节点指定的 appBase=“webapps”, 而 App1 就在 webapps 目录,所以 tomcat 会根据 appBase 加载一次 App1;

另 Context 子节点又设置了 docBase=“App1",这时 tomcat 又会根据 docBase 加载一次 App1,相当于 App1 被加载了两次。

这会引起很多莫名其妙的问题,如:某一个定时任务,会在同一时刻被执行两次;日志可能会打到前一天的文件等。

3.配置 conf/server.xml 文件,增加 Context 节点,并指定 docBase 为非 webapps 的子目录(推荐)
  1. 新建 ${CATALINA_HOME}/mybapps/App1 目录;
  2. 修改 conf/server.xml 文件,配置 Context 节点,指定 docBase=“${CATALINA_HOME}/myapps/App1”;这里的 ${CATALINA_HOME} 为 tomcat 安装路径,使用时需替换为绝对路径;
  3. 将 App1.war 放到 ${CATALINA_HOME}/mybapps/App1/ 目录下;
  4. 通过命令 jar xvf App1.war 解压 war 包到当前目录;
  5. 启动 tomcat;
  6. 后续 war 包有更新时,重复步骤3、4,不需要再执行第5步,tomcat 会自动重新部署。

注意:docBase 需要设置为绝对路径

方案3配置示例

conf/server.xml 文件中的 Host 节点:

<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">......<Context path="/" docBase="/Users/xxx/soft/apache-tomcat-8.5.39/myapps/App1"  debug="0" reloadable="true"></Context></Host>

总结

conf/server.xml 的 Host 节点的 appBase 指定的目录表示,

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

而 docBase 只是指向你某个应用的目录,可以和 appBase 没有任何关系。特别注意,如果 docBase 指向的是 webapps 下面的目录,会导致应用被加载两次,引起奇怪问题。

tomcat 配置文件 conf/server.xml 中的 appBase和docBase相关推荐

  1. Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页

    QUESTION:Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页 ANSWER: 简单直接的有效方法:重装tomcat服务器.

  2. 修改tomcat的conf/server.xml解决网页乱码

    --后台 转码 str= new String(str.getBytes("iso8859-1"),"gb2312"); str= new String(str ...

  3. [转]/tomcat/conf/server.xml配置文件的源码解析

    备注: 在把Java项目直接放到/tomcat/webapps目录下时,server.xml的代码是不变的,端口为8080 你可以通过修改这个8080端口进行配置,以及配置<host>里面 ...

  4. tomcat中conf/server.xml配置线程池不生效的问题注意添加线程池节点executor后要在connector中增加executor属性

    优化连接数,主要是在conf/server.xml配置文件中进行修改. 优化线程数 找到Connector port="8080" protocol="HTTP/1.1& ...

  5. Docker Centos 7.X部署Tomcat 并且修改Server.xml配置文件方案 并设置时区 只要十一步

    我用的是腾讯云 Centos 7.3版本,使用Docker最好使用7.x以上版本 1.拉取镜像 docker pull tomcat:8 2.创建容器并且挂载webapps的目录(我这里将本地端口映射 ...

  6. Tomcat在server.xml中配置虚拟目录

    首先,在D盘中新建文件chapter02,然后,在chapter02目录下,新建文件welcome.xml 此时,直接访问是访问不到的 启动Tomcat服务器,在浏览器地址栏中输入 http://lo ...

  7. tomcat优化之server.xml

    #vim $TOMCAT_HOME/conf/server.xml <?xml version='1.0' encoding='utf-8'?> <Server port=" ...

  8. Spring中,applicationContext.xml 配置文件在web.xml中的配置详解

    Spring中,applicationContext.xml 配置文件在web.xml中的配置详解 2016年10月04日 15:22:26 阅读数:7936 转自http://www.cnblogs ...

  9. server.xml中也能获取Tomcat相对路径

    场景 在Tomcat的目录下的conf目录下有一个server.xml文件 我们可以打开这个文件进行Tomcat虚拟路径与物理路径的映射. 比如: 在conf下的server.xml文件里找到Host ...

  10. Tomcat启动分析server.xml

    2019独角兽企业重金招聘Python工程师标准>>> Tomcat Server的结构图 该文件描述了如何启动Tomcat Server <Server> <Li ...

最新文章

  1. 地图区域划分转换成数学模型解决问题
  2. template模板的使用方法
  3. sublime python3中读取和写入文件时如何解决编码问题
  4. 四十六、微信小程序快速开发入门
  5. 《看聊天记录都学不会C语言?太菜了吧》(5)打了一把游戏我学会了一个编程知识?
  6. Silverlight 写了一个2D仿3D的柱状图表
  7. python turtle画房子详细解释_[宜配屋]听图阁
  8. 惊艳!28岁就任副教授,“最美女教授”年纪轻轻已是博导、院长
  9. Linux按照行数、大小切分文件
  10. 【报告分享】2020年中国5G经济报告--助力新时代高质量发展.pdf(附下载链接)...
  11. SpringBoot--实战开发--整合SSL
  12. 【Linux】10个帮助你调试的命令
  13. 计算机基础知识集体备课,计算机基础知识集体备课.doc
  14. 解决:应用程序无法启动,因为应用程序的并行配置不正确
  15. 深入浅出Spring Cloud整合dubbo
  16. PythonStock(33)特别的巧,发现一个使用 vue 开发的股票系统应用,具备了一些基础的功能,可以拿过来直接跑起来。使用dockerfile进行构建,并跑起来
  17. 手把手教你搭建明星脸相似度分析系统
  18. 我的世界神秘时代安卓java版_我的世界神秘时代MOD
  19. 【数据结构】4中基本逻辑结构和存储结构
  20. Arduino案例实操 -- 智能巡防小车(三)Arduino IDE巡线小车编程

热门文章

  1. 木门锁孔合页综合加工机器
  2. The server encountered an internal error that prevented it from fulfilling this request.
  3. 微信 小程序 APP 渗透测试方案
  4. 【机器学习】【决策树】ID3算法,Python代码实现生成决策树的系统
  5. Viddy VS SocialCam 谁是视频中的Instagram
  6. uCOS事件相关函数代码理解
  7. 魔兽世界3.35+mysql_最新魔兽世界3.35兔子王版本商业一键启动服务端+启动教程
  8. [HDU 5956] The Elder (斜率DP + 可持久化单调队列)
  9. 智算时代里,浪潮存储的使命与担当
  10. 30 行代码实现蚂蚁森林自动收能量