问题发生背景

由于公司的web环境大都是tomcat,所以在项目发布出现小问题为了快速解决时常会需要手动增加或修改war包解压后的内容。但是在修改时有的webapps下除了war包解压后的包文件,还会多出一个ROOT文件夹,而且开发通常都会告诉我:别忘了修改ROOT里面的内容。

为什么呢,为什么还要修改ROOT下的内容?

下面先讲解tomcat下webapps中ROOT的作用

tomcat下webapps中ROOT目录的作用:

在初学tomcat时当部署完tomcat,我们输入IP:8080默认端口时通常会出现一个tomcat的欢迎界面,而这个欢迎界面就在webapps的ROOT中。

一般tomcat的访问是"IP:端口/包名"形式的

但ROOT的作用则是省去了包名使得访问tomcat的war包项目只需要"IP:端口"就可以,这可以简化反代的配置。不需要反向代理时写死包名,使得更换项目时不必再对反向代理进行修改。在一定程度上减少了运维人员的工作量。

ROOT目录是怎么出现的呢

刚开始由于对tomcat一无所知,因此对ROOT的出现很是困惑,为什么每次发布前我都把ROOT删掉,在发布后ROOT总是再度出现。之前需要对发布后的项目进行小范围改动时,不知道为什么还要对ROOT进行修改。直到现在才明白对发布后的项目修改时为什么一定要修改ROOT

ROOT的意义在前面已经说到了,它可以简化访问的url,同时在项目包名变更时不必对反向代理进行额外的修改。

ROOT的出现与conf/server.xml配置文件有关

在server.xml文件中有项额外的配置是

1
<Context path="" reloadable="true" docBase="/deploy/to/war" />

docBase可以是war包的路径也可以是war包解压后的文件夹名的路径

 xxx.war形式

    <Context path="" reloadable="true" docBase="/opt/xxx.war" />

例如xxx.war在/opt下,docBase可以写成docBase="/opt/xxx.war",此时启动tomcat,在engine的默认webapps下会生成一个名为ROOT的文件夹,该文件夹内就是xxx.war解压后的内容。

通过查看日志可以发现一则信息

1
DEBUG [localhost-startStop-1] - Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT]

该信息大意:将ServletContext中的定义的包解压后的内容发布到ROOT文件夹下。

xxx文件夹形式

    <Context path="" reloadable="true" docBase="xxx" />

    注:docBase有绝对路径跟相对路径之分,相对路径是相对于engine引擎定义的webapps

如果docBase指定的路径为xxx.war包解压后文件夹的形式,则需要将xxx.war放在webapps下,其过程大致为:tomcat先将xxx.war解压为xxx文件,之后将xxx文件夹复制为以ROOT为名字的新文件夹

总结:

tomcat访问IP:端口的方式访问war包项目的方式是比较方便的,我也建议这么做。不过发布时记得删除ROOT文件夹,否则在你发布后你会发现你这次发布的没有任何变化,若发布后出现小问题需要快速解决,记得是要对ROOT下的内容进行修改而不是解压的war包内容。

现在我才知道开发通知告诉我的其实只有一半是正确的,那就是修改ROOT!。

我所写的不一定全对,不过经过实验验证,目前没发现错误,如果有哪里说的有误欢迎指正。

本文转自 紫色的茶碗 51CTO博客,原文链接:http://blog.51cto.com/chawan/1947201,如需转载请自行联系原作者

omct问题之-webapps下多出的ROOT目录相关推荐

  1. web项目部署到webapps下与部署在ROOT目录下

    1.如何部署到tomcat下    将完成的项目打成war包,放到tomcat下的webapps目录下 2.启动tomcat自动生成项目文件    bin目录下的   startup.sh  用于启动 ...

  2. Eclipse自动部署项目到Tomcat的webapps下的有效方法

    Eclipse自动部署项目到Tomcat的webapps下的有效方法 开发JavaEE项目,常用的工具有MyEclipse,Eclipse,netBeans等,个人比较喜欢用Eclipse,因为它My ...

  3. tomcat启动后webapps下的项目不可以访问

    tomcat的版本是apache-tomcat-8.5.31,tomcat可以正常启动,但是webapps下的项目访问时报404,在网上搜了有很多答案,但都没有适合我这个问题的,后来想到是不是tomc ...

  4. java 打印一棵树_java编程题之从上往下打印出二叉树

    本文实例为大家分享了java从上往下打印出二叉树的具体代码,供大家参考,具体内容如下 import java.util.ArrayList; import java.util.Stack; /** * ...

  5. 从上往下打印出二叉树的每个节点,同层节点从左至右打印。

    从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印. 分析:借助一个队列,先将根结点的指针入队列,出来时访问它,然后将它的左右孩子带到队 ...

  6. 《剑指Offer》 从上往下打印出二叉树

    题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 其实就是层序遍历,设置一个TreeNode*类型的队列s,用来保存二叉树层序遍历的节点,因为队列是先进先出,所以很好地控制了 ...

  7. 版本控制之svn命令行下检出、提交、更新

    2019独角兽企业重金招聘Python工程师标准>>> 4 使用命令行模式访问SVN服务器  4.1 检出  ①首先进入自己的工作目录,例如:D:\DevWorkSpace\SVNS ...

  8. ajax弹出提示框,Ajax环境下弹出提示框

    在普通的ASP.NET环境中,我们要想在WEB窗体上弹出一个对话框,经常用到的是如下代码: Response.Write(""); 然而在Ajax的环境中却不能使用上述的代码,否则 ...

  9. 基于jQuery向下弹出遮罩图片相册

    今天给大家分享一款基于jQuery向下弹出遮罩图片相册.单击相册图片时,一个遮罩层从上到下动画出现.然后弹出显示图片.这款插件适用浏览器:IE8.360.FireFox.Chrome.Safari.O ...

最新文章

  1. MySQL查询进阶之多表查询
  2. NLP文本标注工具与平台(数据标注公司)
  3. 在线作图丨数据降维方法⑤——t-SNE(t-Distributed Stochastic Neighbor Embedding)
  4. python goto 用法
  5. Go版本升级后编译出错:Load redeclared in this block
  6. redis提高查询速度_面试小点-MySQL 的两种索引方法如何提高查询速度
  7. 搬家后第一次缴电费,查询客户编号的解决办法
  8. fileinputstream_从Java中的FileInputStream读取字节
  9. ajax-》post
  10. linux service和chkconfig命令区别
  11. 2022年茶艺师(初级)考试试卷及茶艺师(初级)模拟试题
  12. 剑指chatGPT,马斯克:你们暂停一下,我追赶追赶
  13. ImageBox网页图片批量下载器
  14. 经营性网站必须要办理ICP增值电信业务经营许可证吗?
  15. 淘宝收藏加购对流量分配有影响吗?
  16. Windows battery report
  17. 云计算大会发言:接地气 高大上 科技感
  18. JDK有BUG!!!
  19. 这7个稀奇古怪的小网站,让我摸了一天的鱼!太上瘾啦!
  20. python获取ftp服务器文件列表_使用Python列出FTP中所有子目录中的所有文件

热门文章

  1. SpringBoot加itext实现PDF导出
  2. 快速入门在Vue中使用滑动插件Swiper
  3. 使用Cordova打包Vue项目为IOS并使用XCode提交到AppStore
  4. 二分法(折半查找)的运用之java实现猜数字游戏
  5. 敏捷项目向组合级看齐
  6. oracle+挂载dbf,dbf导入oracle工具下载|OracleToDbf(dbf导入oracle工具) v1.2官方版 附教程_星星软件园...
  7. 多帧点云数据拼接合并_多工作簿数据合并,还在手动复制粘贴就out了,用批处理一键搞定...
  8. Java编写抓取用户信息代码_[代码全屏查看]-一个基于JAVA的知乎爬虫,抓取知乎用户基本信息...
  9. 自定义SpringBoot项目的Maven原型
  10. Libvirsh 问题:GLib-WARNING **: gmem.c:483: custom memory allocation vtable not supported