在 Tomcat 的 root 部署我的应用程序

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

194566 次浏览

你有两个选择:

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

  2. 将 war 部署为(根据示例) war_name.war并在 conf/server.xml中配置 上下文根以使用 war 文件:

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

The first one is easier, but a little more kludgy. The second one is probably the more elegant way to do it.

关于 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!

在 tomcat 7中,通过这些更改,我能够访问/处的 myAPP 和/ROOT 处的 ROOT

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

最快的方法。

  1. 确保没有部署 ROOT 应用程序,如果有的话取消部署

  2. 将 war 重命名为 ROOT.war,部署,仅此而已,不需要更改配置

在我的服务器上,我正在使用这个,root 自动部署工作得很好:

   <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>

添加到@Rob Hruska 的 sol 中,在小节中的 server.xml 中的这个设置可以工作:

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

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

删除 $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 和 loyOnStartup 需要设置为 false,以防止 Tomcat 两次部署 myApp

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

  1. 主应用程序从根服务
  2. 维护通过 Web 界面部署 war 文件。
  3. 主应用程序将在端口80上运行,而只有管理员可以访问管理文件夹(我知道 * nix 系统需要超级用户才能绑定到80,但是在 windows 上这不是问题)。

这意味着您只需要重新启动 tomcat 一次,在更新的 war 文件部署之后就没有问题了。

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

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


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

第二步: 在 <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/上。受密码保护的 webapps 需要 privileged="true"属性。

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

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

第三步: 为了防止不必要的访问根和管理器文件夹,向这些上下文标记添加一个 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>

这实质上限制了访问管理网络应用程序文件夹的人从我自己的域(假 IP 地址)和本地主机时,他们使用默认端口8080和维护的能力,通过网络界面动态部署的 war 文件。

如果您希望对使用不同 IP 地址的多个应用程序使用此方法,可以将 IP 地址添加到连接器(address="143.21.2.1")。

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

打开 Tomact 管理器网址:-http://localhost:8080/manager/html/
然后在应用程序中,您会看到一个路径为“/”的应用程序被部署 < br > 简单地取消部署。 < br > enter image description here 将应用程序的 war 文件重命名为 根源之战,并将其放在 path:-< br > C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
启动 Tomcat 不需要额外的配置。
现在我们可以在 < a href = “ http://localhost: 8080”rel = “ nofollow norefrer”> http://localhost:8080看到我们的应用程序主页或配置的 url

对于 @ Dima的回答,如果您使用 maven来构建包,您可以告诉它将您的 WAR 文件名设置为 pom.xml中的 ROOT:

<build>
<finalName>ROOT</finalName>
</build>

默认情况下,tomcat将把 ROOT.war webapp 部署到根上下文(/)中。