如何更改ROOT应用程序?


130

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

Answers:


129

有三种方法:

  • 首先从其bin目录(sh shutdown.sh)关闭Tomcat 。然后删除Tomcat webapps文件夹(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属性。不应设置path元素- .xml在这种情况下,它是从文件名派生的ROOT.xml。有关详细信息,请参见Context容器文档

参考


4
我尝试了第一种方法,它有效!宝马-您不需要删除所有内容。我只是删除了ROOT文件夹,并将war重命名为ROOT.war,它的工作原理很像。
hostnik 2011年

我知道它不是真的遵循sof规则,但是搞砸了.....谢谢!我希望我可以不止一次投票。超级有帮助。顺便说一句,我必须重新启动tomcat才能起作用,@ hostnik。
讨厌的馅饼,2012年

@ danny-london的第三个方法在Tomcat 7中对我不起作用,但是如果将ROOT.xml文件放在$CATALINA_BASE/conf/[enginename]/[hostname]目录中(对于我的基本设置是$CATALINA_HOME/conf/Catalina/localhost),它确实起作用。请参阅上下文容器文档
Michael Scheper 2012年

现代替代启动Tomcat:sudo systemctl start tomcatx其中x代表的版本号
EarthMind

24

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

如果使用path=""空,则可以使用URL 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>

Tomcat 7也是如此吗?
马西·萨顿

4
根据文档:对于Tomcat 6,与Tomcat 4.x不同,不建议将<Context>元素直接放置在server.xml文件中。这是因为,由于不重新启动Tomcat无法重新加载主conf / server.xml文件,因此修改Context配置更具侵入性。

让我们通知这种方法有副作用!myStrutsbook将部署两次,一次是localhost:8080,一次是localhost:8080 / myStrutsbook!并可能导致数据库连接错误和更多资源使用
Ali.Mojtehedy 2014年

24

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

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

将以上内容添加到<Host>server.xml中的部分


只是我一直在寻找的解决方案!感谢一百万,Sudheer!对我来说就像一个魅力。嘿!我有另一个问题。当我确实通过访问ROOT /ROOT并尝试使用正确的凭据登录到Manager页面时,被拒绝访问。您知道如何解决此问题吗?
土星

@Sudheer Palyam我也一样。我更改了server.xml文件,然后启动了服务器。但是,当我加载/访问localhost:8080时,它显示了404状态错误。如果我从server.xml中删除这些行,则它将加载以上端口。
Sachin Kumar

16

ROOT默认应用程序通常是Tomcat Manager-这很有用,因此我想保留它。

所以,这样我做我的应用程序根并保持TCmgr是这样。

将ROOT重命名为其他名称

mv ROOT TCmgr

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

ln -s <your app> ROOT

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


@Vic,您是对的,但Windows确实具有符号链接,在XP及更高版本中,我认为您可以使用mklink。请注意,我还没有这样做,还有其他不使用符号链接的原因。
MichaelStoner 2015年


12

您可以通过以下方式来做到这一点:

  1. 停止Tomcat
  2. 将ROOT.war移到一边,然后将rm -rf webapps / ROOT
  3. 将您想要的Webapp复制到webapps / ROOT.war
  4. 启动Tomcat

2
丑陋或令人讨厌,但hacky可能是错误的术语,因为这似乎是官方/受支持的方法。
Brian Knoblauch 2014年

3

一种替代解决方案是创建一个Servlet,该Servlet将重定向发送到所需的默认Web应用程序,并将该Servlet映射到ROOT Web应用程序中的所有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,而无需修改源。

我不确定这样做是否会带来负面影响,但我确实对此进行了测试,并且看来确实可行。


2

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

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

另一个非常简单的解决方案是将index.jsp放到ROOT中,这样可以重定向到我的应用程序:response.sendRedirect(“ / MyApplicationXy”);

最好的问候,一月



1

更改tomcat根应用程序的最终方法。在Tomcat 7和Tomcat 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。

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是不可行的解决方案?


1
不幸的是,将war文件更改为ROOT.war对我来说不是一个选择。雅克

有点晚了,但是...对我来说,我无法更改它,因为我使用的是由第三方创建的系统,该第三方似乎已将某些位置硬编码为jar文件....因此将其移至ROOT.war造成一个问题,因为原始应用程序在[originalapp.war]中的目录下寻找其自己的jar
mur

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


-4

在Tomcat 7(在Windows服务器下)中,我没有向任何配置文件添加或编辑任何内容。我只是将ROOT文件夹重命名为其他名称,并将我的应用程序文件夹重命名为ROOT,并且工作正常。


1
这可能是一个很好的解决方法,但是Jaques的问题是关于如何更改默认应用程序的问题。可能由于某些原因,他无法更改ROOT文件夹的内容。
JVMATL 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.