首页 文章

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

提问于
浏览
114

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

8 回答

  • 196

    你有几个选择:

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

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

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>
    

    第一个更容易,但更多的kludgy . 第二个可能是更优雅的方式 .

  • -1

    在tomcat v.7(香草安装)

    在您的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!

  • 1

    在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> 部分

  • 9

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

    • 主应用程序从root用户提供

    • 维护通过Web界面部署war文件 .

    • 主应用程序将在端口80上运行,而只有管理员可以访问管理文件夹(我意识到* nix系统需要超级用户绑定到80,但在Windows上这不是问题) .

    这意味着您只需重新启动一次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"> 的docbase更改为例如 <Context path="/" docBase="ICR"> .

  • 4

    删除 $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

    最快的方式 .

    • 确保没有部署ROOT应用程序,如果有,则取消部署

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

  • 12

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

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

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

  • 30

    在我的服务器中我使用这个和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>
    

相关问题