【问题标题】:Tomcat: Difference Between "webapps/" folder and "webapps/ROOT/" folderTomcat:“webapps/”文件夹和“webapps/ROOT/”文件夹之间的区别
【发布时间】:2019-08-11 18:19:13
【问题描述】:

我注意到这些文件夹具有非常不同的属性。我最近在 webapps 文件夹下部署了一个 .war 文件。我注意到,一旦部署了 .war 文件,就会将项目的未压缩版本添加到目录中。当我尝试修改未压缩版本中的任何文件时,Tomcat 服务器不会更改我的应用程序的行为(通过 Web 浏览器运行我的应用程序时我看不到更改)。但是,如果我将同一个项目放在 webapps/ROOT 下,我的应用程序的更改将导致我的应用程序行为的瞬时更改(可以通过浏览器看到)。

这是另一个例子。我目前在某些应用程序上遇到 HTTP 415 错误。当我使用文件夹 webapps 下的 .war 文件部署它时,我得到了那个错误。但是,如果我将应用程序的未压缩版本放在 webapps/ROOT 下,错误就会消失并且我的应用程序可以正常运行。

这让我想到了我的问题。这两个文件夹有何不同?什么可以解释这些文件夹之间的这些差异?

【问题讨论】:

  • webapps 是部署 Web 应用程序的位置。 ROOT 是未命名的根 Web 应用程序的特殊名称。例如。具有上下文/Foo 的Web 应用程序位于webapps/Foo.war 和/或webapps/Foo/ 文件夹中。具有上下文 / 的 Web 应用程序位于 webapps/ROOT.war 和/或 webapps/ROOT/ 文件夹中。
  • 我不知道,谢谢。这如何解释 webapps/ROOT/ 文件夹会在我更改代码后立即更新,而直接位于 webapps/ 文件夹下的 Web 应用程序不会更改的事实?

标签: java tomcat path reload


【解决方案1】:

在尝试了不同的东西之后,我发现了这个:

我意识到文件夹 webapps 是定义为服务器的“appBase”的文件夹。 (这个变量可以在 server.xml 文件中配置,位于 conf 文件夹中,从你的 apache tomcat 的根文件中可以看到) 换句话说,它是 Tomcat 搜索应用程序的直接位置。

然而,没有被告知的是 Tomcat 不会进入文件夹;这就是为什么我的 web 应用程序可以在 webapps 下更新并收到错误,但在 ROOT 下却不行。我知道这一点,因为我将“appBase”变量直接更改为我的应用程序所在的位置,突然它们显示来自 tomcat 的错误。

如果在“appBase”定义的路径下对 Web 应用程序进行了更改,则需要以特定方式重新加载它们。一种是使用 Tomcat 管理器功能,另一种是删除工作文件夹中的文件(从 Apache Tomcat 主文件夹中找到。继续单击工作文件夹中的文件夹,直到进入 Web 应用程序的主文件夹)。 Tomcat 管理器功能实现起来可能是一项更繁琐的任务,因为需要知道如何为 tomcat 配置用户(在 conf 文件夹下的 tomcat-users.xml 中),并且相关文档有限。第二种解决方案是删除您在工作文件夹下找到的 Web 应用程序,可以在 Tomcat 运行时完成,并且会立即实施您的更改。

更多详情请参见另一个 Stack Overflow 帖子:How to force tomcat to reload recently compiled class/war files

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多