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

我有我的应用程序的战争档案。 我需要在根级部署这个。 当前的URL是http://localhost:8080/war_name/application_name

你有几个选择:

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

  2. 部署你的战争(从你的例子) war_name.war并配置上下文根在conf/server.xml中使用你的战争文件:

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

第一个更容易,但更多一点。 第二个可能是更优雅的方式来做到这一点。

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

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

  1. 主应用程序是从根服务
  2. 维护通过Web界面部署战争文件。
  3. 主应用程序将运行在端口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"属性。

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

请勿在<Context path="/CAS" docBase="CAS">包含<Context path="/CAS" docBase="CAS"> ,因为它会禁用管理器选项来部署war文件。 这意味着您可以通过两种方式访问​​应用程序: http://example.com/ : http://example.com/http://example.com/APP/

第3步:为了防止不必要的访问根和管理器文件夹,添加一个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地址)和本地主机,当他们使用默认端口8080,并保持动态部署通过Web界面的战争文件的能力。

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

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

最快的方法。

  1. 确保你没有部署ROOT应用程序,如果你有一个,就取消部署

  2. 将你的战争重命名为ROOT.war,部署,即所有,不需要更改配置

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

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

注意:在某些情况下可能需要override =“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和deployOnStartup需要设置为false,以防止Tomcat部署myApp两次。

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