在Tomcat的根目录部署我的应用程序

时间:2011-03-16 16:36:16

标签: java tomcat

我有我的应用程序的war文件。我需要在根级别部署它。当前网址为http://localhost:8080/war_name/application_name

10 个答案:

答案 0 :(得分:199)

您有几个选择:

  1. 从tomcat中删除开箱即用的ROOT/目录,并在部署之前将war文件重命名为ROOT.war

  2. 部署您的战争(来自您的示例)war_name.war并配置conf/server.xml中的context root以使用您的战争文件:

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>
    
  3. 第一个更容易,但更多的kludgy。第二个可能是更优雅的方式。

答案 1 :(得分:31)

on tomcat v.7(vanilla installation)

在您的conf / server.xml中

在文件末尾添加以下位,就在</Host>结束标记之前:

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

请注意 docBase 属性。这是重要的一点。您可以确保在更改根Web应用程序之前部署了app_name,或者只是将解压缩的webapp(app_name)复制到tomcat的webapps文件夹中。启动,访问root,在那里看到你的app_name!

答案 2 :(得分:13)

在tomcat 7中进行了这些更改,我可以在/ ROOT / ROOT

访问myAPP
<Context path="" docBase="myAPP">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

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

答案 3 :(得分:9)

我知道我的答案与其他答案有些重叠,但这是一个有一些优点的完整解决方案。这适用于Tomcat 8:

  1. 主要应用程序是从根
  2. 提供的
  3. 维护通过Web界面部署war文件。
  4. 主应用程序将在端口80上运行,而只有管理员可以访问管理文件夹(我意识到* nix系统需要超级用户绑定到80,但在Windows上这不是问题)。
  5. 这意味着您只需重新启动一次tomcat,并且可以在没有问题的情况下部署更新的war文件。

    第1步: 在server.xml文件中,找到连接器条目并将其替换为:

    <Connector 
        port="8080"
        protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />
    
    <Connector
        port="80"
        protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />
    

    第2步: 在<Host ...>标记中定义上下文:

    <Context path="/" docBase="CAS">
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>
    <Context path="/ROOT" docBase="ROOT">
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>
    <Context path="/manager" docBase="manager" privileged="true">
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>
    <Context path="/host-manager" docBase="host-manager" privileged="true">
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>
    

    请注意,我解决了webapp文件夹中的所有应用。第一个有效地从根位置切换根和主应用程序。 ROOT现在位于http://example.com/ROOT,主应用程序位于http://example.com/。受密码保护的Web应用程序需要privileged="true"属性。

    当您部署与根目录匹配的CAS.war文件时(<Context path="/" docBase="CAS">,您必须在管理面板中重新加载该文件,因为它不会随部署一起刷新。

    不要在您的上下文中包含<Context path="/CAS" docBase="CAS">,因为它会禁用部署war文件的manager选项。这意味着您可以通过两种方式访问​​该应用:http://example.com/http://example.com/APP/

    第3步: 为了防止对root和manager文件夹进行不必要的访问,请向这些上下文标记添加valve,如下所示:

    <Context path="/manager" docBase="manager" privileged="true">
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <Valve className="org.apache.catalina.valves.RemoteAddrValve"
            addConnectorPort="true"
            allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
    </Context>
    

    这实际上限制了管理员web应用程序文件夹对我们自己的域(虚假IP地址)和localhost的访问权限,当他们使用默认端口8080并保持通过Web界面动态部署war文件时。

    如果要将此用于使用不同IP地址的多个应用,可以将IP地址添加到连接器(address="143.21.2.1")。

    如果要从根运行多个Web应用程序,可以复制Service标记(对于第二个使用不同的名称),并将<Context path="/" docBase="CAS">的文档库更改为例如<Context path="/" docBase="ICR">

答案 4 :(得分:5)

删除$CATALINA_HOME/webapps/ROOT。更新$CATALINA_HOME/conf/server.xml,确保Host元素如下所示:

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="" docBase="myApp"></Context>

它适用于Tomcat 8. autoDeploy和deployOnStartup需要设置为false以防止tomcat部署myApp两次。

答案 5 :(得分:4)

最快的方式。

  1. 确保您没有部署ROOT应用,如果您有部署则取消部署

  2. 将您的战争重命名为ROOT.war,部署,全部,无需更改配置

答案 6 :(得分:1)

添加到@Rob Hruska的sol,server.xml里面的这个设置工作:

<Context path="" docBase="gateway" reloadable="true" override="true"> </Context>

注意:在某些情况下可能需要override =“true”。

答案 7 :(得分:1)

添加到@Dima的答案中,如果您使用maven构建软件包,则可以告诉它在{{1}中将WAR文件名设置为ROOT }:

pom.xml

默认情况下,<build> <finalName>ROOT</finalName> </build> 会将tomcat Web应用程序部署到根上下文(ROOT.war)中。

答案 8 :(得分:0)

打开tomact管理器网址:-http://localhost:8080/manager/html/
然后在应用程序中,您会看到已部署路径为“ /”的应用程序
只需取消部署。
enter image description here 重命名您应用程序的war文件为 ROOT.war ,然后将其放置在路径:-
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
启动Tomcat不需要额外的配置。
现在,我们可以在http://localhost:8080

看到我们的应用程序主页或配置的URL。

答案 9 :(得分:-1)

在我的服务器中,我正在使用它,root autodeploy正常工作:

   <Host name="mysite" autoDeploy="true" appBase="webapps" unpackWARs="true" deployOnStartup="true">
        <Alias>www.mysite.com</Alias>
        <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mysite_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
        <Context path="/mysite" docBase="mysite" reloadable="true"/>
    </Host>