135

我正在尝试将 Tomcat 6 网络服务器的默认应用程序更改为与“ROOT”不同的应用程序(在 webapps 文件夹内)。做这个的最好方式是什么?

4

13 回答 13

132

有以下三种方法:

  • 首先从其bin目录 ( sh shutdown.sh) 中关闭您的 Tomcat。然后删除 Tomcatwebapps文件夹 ( rm -fr *) 的所有内容。然后将 WAR 文件重命名为ROOT.war,最后从bin目录 ( sh startup.sh) 启动 Tomcat。

  • 将您的战争文件保留$CATALINA_BASE/webapps在其原始名称下。在文件的 Host 元素中关闭 autoDeploydeployOnStartupserver.xml。在 中显式定义所有应用程序上下文server.xml,同时指定pathdocBase属性。您必须这样做,因为您已禁用所有 Tomcat 自动部署机制,并且 Tomcat 将不再部署您的应用程序,除非它在server.xml​​.

    第二种方法:为了对任何应用程序进行任何更改,您必须停止并重新启动 Tomcat。

  • 将您的 WAR 文件放在外面$CATALINA_BASE/webapps(它必须在外面以防止双重部署)。放置一个名为ROOT.xml. $CATALINA_BASE/conf/此上下文文件中的单个元素必须具有 指向 WAR 文件位置的docBase属性。不应设置路径元素 -.xml在这种情况下,它是从文件名派生的ROOT.xml。有关详细信息,请参阅Context 容器的文档

参考

于 2011-05-23T06:37:15.897 回答
26

在具有这些更改的 Tomcat 7 中,我可以访问myAPPat/ROOTat/ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

将上面添加到<Host>server.xml 中的部分

于 2013-08-14T08:22:56.840 回答
25

在 Tomcat 6 的标签中添加<Context>标签将解决该问题。<Host>server.xml

如果您使用path=""空的,您可以使用类似http://localhost/first.do.

在上下文标签中设置属性docBase="E:\struts-ITRCbook\myStrutsbook"reloadable="true",然后结束上下文标签。

它应该看起来像这样:

<Host name="localhost"  appBase="webapps" 
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
    </Context>
</Host>
于 2010-03-03T08:11:14.847 回答
17

ROOT 默认应用程序通常是 Tomcat 管理器——它很有用,所以我想保留它。

所以我让我的应用程序 ROOT 并保持 TCmgr 的方式是这样的。

将 ROOT 重命名为别的东西

mv ROOT TCmgr

然后创建了一个符号链接,ROOT 指向我要设为默认的应用程序。

ln -s <your app> ROOT

为我工作,似乎是最简单的方法。

于 2011-11-03T17:07:57.073 回答
12

根据 Apache Tomcat 文档,您可以通过创建 ROOT.xml 文件来更改应用程序。有关更多信息,请参见:

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

“可以使用名为 ROOT.xml 的文件定义默认 Web 应用程序。”

于 2009-04-03T20:09:42.227 回答
12

您可以通过以下方式以稍微 hack-y 的方式执行此操作:

  1. 停止 Tomcat
  2. 将 ROOT.war 移到一边,然后 rm -rf webapps/ROOT
  3. 将你想要的 webapp 复制到 webapps/ROOT.war
  4. 启动Tomcat
于 2009-04-03T21:09:11.930 回答
3

另一种解决方案是创建一个 servlet,将重定向发送到所需的默认 webapp,并将该 servlet 映射到 ROOT webapp 中的所有 url。

package com.example.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.sendRedirect("/myRootWebapp");
  }
}

将上述类添加到
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet.
并将以下内容添加到
CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml

  <servlet>
    <display-name>Redirect</display-name>
    <servlet-name>Redirect</servlet-name>
    <servlet-class>com.example.servlet.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

如果需要,您可以轻松地修改 RedirectServlet 以接受 init 参数,从而允许您设置默认 webapp 而无需修改源。

我不确定这样做是否会产生任何负面影响,但我确实对此进行了测试,它似乎确实有效。

于 2011-07-11T18:02:45.993 回答
2

context.xml 配置对我不起作用。Tomcat 6.0.29 抱怨 docBase 在 appBase 内:...对于 Tomcat 5,这确实有效。

因此,一种解决方案是将应用程序放在 ROOT 文件夹中。

另一个非常简单的解决方案是将 index.jsp 放入 ROOT 以重定向到我的应用程序,如下所示: response.sendRedirect("/MyApplicationXy");

最好的问候,扬

于 2011-01-11T16:38:57.173 回答
1

配置 Tomcatserver.xml并添加 Context 元素时出现问题。他只是不想使用我的配置: http ://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html

如果您在Unix-like系统中:

  1. mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
  2. ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT

完毕。

为我工作。

于 2011-11-24T16:24:35.170 回答
1

更改 tomcat 根应用程序的终极方法。在 Tomcat 7 和 8 上测试。

  1. 移动到 tomcat webapps 目录:

    我的机器上的示例:~/stack/apache-tomcat/webapps

  2. 重命名、替换或删除 ROOT 文件夹。我的建议是重命名或创建备份副本。示例将 ROOT 重命名为 RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. 将您的应用程序的war文件移动到tomcat webapps目录(它是旧ROOT文件夹的目录,在我的机器上:~/stack/apache-tomcat/webapps)

War 文件必须有一个名称ROOT.war。如果需要,重命名您的应用程序:yourApplicationName.war -> ROOT.war

  1. 重启tomcat。重新启动后,您的应用程序将成为 root。
于 2018-04-26T09:44:21.487 回答
0

我会看看我的文档;有一种方法可以指定配置来更改根 Web 应用程序的路径远离 ROOT(或 ROOT.war),但它似乎在 Tomcat 5 和 6 之间发生了变化。

发现这个:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html

因此,似乎可以更改根路径(在 ROOT.xml 中),但有点损坏——您需要将 WAR 移到自动部署目录之外。介意我问为什么只是将文件重命名为 ROOT.war 不是一个可行的解决方案?

于 2009-04-03T20:10:29.293 回答
0

这不是一个很好的解决方案,但一种方法是从 ROOT 应用程序重定向到 YourWebApp。为此,您需要修改 ROOT index.html。

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

或者

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
        <meta http-equiv="refresh" content="0;url=YourWebApp" />
    </head>
    <body>
    </body>
</html>

参考:http ://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

于 2013-06-10T15:56:16.737 回答
-4

在 Tomcat 7(在 Windows 服务器下)中,我没有向任何配置文件添加或编辑任何内容。我刚刚将 ROOT 文件夹重命名为其他文件夹,并将我的应用程序文件夹重命名为 ROOT,它运行良好。

于 2014-01-17T15:36:11.117 回答