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

iam*_*der 123 java tomcat

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

Rob*_*ska 204

你有几个选择:

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

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

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 将其称为ROOT.war +1.根据Tomcat文档,在指定"path"以避免双重部署时需要非常小心:"即使在server.xml中静态定义Context,也不能设置此属性,除非docBase不在Host的下面appBase或者deployOnStartup和autoDeploy都是false.如果不遵循此规则,可能会导致双重部署." - 来自http://tomcat.apache.org/tomcat-8.0-doc/config/context.html (5认同)
  • 这个答案推荐了一种技术,在文档中明确提到它是一种糟糕的形式.这里详细介绍了正确的技术:http://stackoverflow.com/questions/41263245/how-to-deploy-apps-in-tomcat-server/41284328#41284328 (4认同)
  • 如果将Tomcat设置为自动部署,则不必担心选项2. (3认同)
  • @Dejel - 技术上没什么.我自己做了很多; 它完成了工作.只是觉得有点难以将自己的war文件重命名为容器的实现细节. (3认同)
  • 根据您提供的链接**不建议将<Context>元素直接放在server.xml文件中** (3认同)

Pet*_*háč 31

在tomcat v.7(香草安装)

在您的conf/server.xml中,在</Host>结束标记之前向文件末尾添加以下位:

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Run Code Online (Sandbox Code Playgroud)

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


Sud*_*yam 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>
Run Code Online (Sandbox Code Playgroud)

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

  • 上下文路径必须是空字符串或以'/'开头.路径[ROOT]不符合这些标准,并已更改为[/ ROOT] (3认同)

Kim*_*nde 10

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

  1. 主要应用程序从根目录提供
  2. 通过Web界面部署war文件得以维护.
  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" />
Run Code Online (Sandbox Code Playgroud)

第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>
Run Code Online (Sandbox Code Playgroud)

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

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

不要<Context path="/CAS" docBase="CAS">在您的上下文中包含它,因为它禁用了管理器选项来部署war文件.这意味着您可以通过两种方式访问​​应用程序: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>
Run Code Online (Sandbox Code Playgroud)

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

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

如果你想从根本上运行多个网络应用程序,您可以复制的服务标签(使用不同的名称为秒),并更改文档库中的<Context path="/" docBase="CAS">为例子<Context path="/" docBase="ICR">.


Jin*_*Yao 6

删除$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>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

最快的方法。

  1. 确保您尚未部署ROOT应用,如果已部署,请取消部署

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