我有我的申请文件。我需要在根级别进行部署。当前URL为http://localhost:8080/war_name/application_name

评论

请问您究竟是什么问题?在tomcat中部署war文件时,将使用URL来访问该应用程序:localhost:8080 / war_name,不带.war扩展名。

是的,您是对的,我需要访问我的应用程序。 “ localhost / application_name”,当我将war文件重命名为“ ROOT.war”时,可以达到此目的,但是由于我的war文件大小约为120MB,它抛出了内存不足异常

@ user661660-看来您有另一个问题-重命名为ROOT.war应该可以。我建议询问有关您的OutOfMemoryException的另一个问题,提供堆栈跟踪和详细信息。您可以通过为JVM配置-Xmx来解决此问题。

.lang.OutOfMemoryError:PermGen空间2011年3月16日上午9:52:52 com.ebay.kernel.logger.Logger日志严重:Perfmon线程java.lang.OutOfMemoryError:PermGen空间错误线程“ CalClient:NotifyThreadDestroyThread-0” “ java.lang.OutOfMemor yError:线程” MetricsSnapshotScheduler“中的PermGen空间异常java.lang.OutOfMemoryError:PermG en space 2011年3月16日上午9:53:36 com.ebay.kernel.logger.Logger日志SeverE:Perfmon错误线程java.lang.OutOfMemoryError:PermGen空间线程“ CalClient:NotifyThreadDestroyThread-0”中的异常java.lang.OutOfMemor yError:PermGen空间

@ user661660-也许这个问题的一些答案可以帮助您。

#1 楼

您有两种选择:


从tomcat中删除现成的ROOT/目录,然后在部署它之前将您的war文件重命名为ROOT.war

将战争部署为(从您的示例中)war_name.war,并在conf/server.xml中配置上下文根以使用您的war文件: ,但有点混乱。第二种可能是更优雅的方法。

评论


如果Tomcat设置为自动部署,则不必担心选项2。

– Buhake Sindi
2011-3-16在16:54

@Dejel-从技术上讲没什么。我自己做了很多。它完成了工作。不得不将自己的war文件重命名为某种类似于容器实现细节的感觉,这有点奇怪。

–Rob Hruska
15年1月15日在18:43

按照您提供的链接,不建议将元素直接放置在server.xml文件中

– Nilesh
16-3-23在7:36



此答案推荐了一种技术,该技术在文档中明确提到为不良形式。此处详细介绍了适当的技术:stackoverflow.com/questions/41263245/…

–克里斯托弗·舒尔茨(Christopher Schultz)
16/12/22在13:33

+1称为ROOT.war。根据Tomcat文档,在指定“路径”时要非常小心,以避免双重部署:“即使在server.xml中静态定义上下文时,也必须设置此属性,除非docBase不在主机的目录下。 appBase或deployOnStartup和autoDeploy均为false。如果不遵循此规则,则可能导致双重部署。” -来自tomcat.apache.org/tomcat-8.0-doc/config/context.html

–安东尼·海沃德(Anthony Hayward)
17年1月10日在17:26

#2 楼

在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属性。这很重要。您可以先确定已部署app_name,然后再更改根Web应用程序,或者只是将解压后的Webapp(app_name)复制到tomcat的webapps文件夹中。启动,访问root,在那里查看您的app_name!

#3 楼

在具有这些更改的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>部分中
/>

评论


上下文路径必须为空字符串或以“ /”开头。路径[ROOT]不符合这些条件,并且已更改为[/ ROOT]

– Nikita Bosik
2015年4月1日,0:59

#4 楼

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


主应用程序是从根目录提供的。
通过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文件的管理器选项。这意味着您可以通过两种方式访问​​应用程序:http://example.com/http://example.com/APP/

步骤3:
为了防止对根目录和管理器文件夹的不必要访问,请在诸如此类的上下文标记中添加一个valve:当他们使用默认端口8080时,这实际上限制了我自己的域(伪IP地址)和本地主机中的人对admin Web应用程序文件夹的访问,并保持了通过Web界面动态部署war文件的功能。

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

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

#5 楼

最快的方法。


确保您尚未部署ROOT应用,如果已部署,请取消部署
将战争重命名为ROOT.war,部署,仅此而已,需要进行配置更改


#6 楼

卸下$CATALINA_HOME/webapps/ROOT。更新$CATALINA_HOME/conf/server.xml,确保Host元素看起来像以下文本: myApp两次。

评论


我尝试上传WAR,但无法正常工作。这仅适用于爆炸的战争吗?

– logixplayer
15年7月15日在8:06

我尝试上传WAR,但根据@Jingguo的示例,它无法正常工作。这仅适用于爆炸的战争吗?编辑:这确实只适用于爆炸战争。为什么是这样?我不仅可以上传WAR并避免此双重步骤吗?我该如何运作?

– logixplayer
15年7月15日在8:14

@logixplayer。我的解决方案适用于WAR。我没有爆炸。我忘了提到$ CATALINA_HOME / webapps / ROOT需要删除。请删除它,然后重试。

–姚景国
15年7月17日在6:16



如您所说,我已删除了ROOT。我部署了WAR(未分解的目录)。我注意到创建了一个新的ROOT目录,其中包含我的东西。 WEB-INF。该站点正在运行。这是应该工作的方式吗?

– logixplayer
15年7月20日在6:25



我也尝试过这种方法,当我尝试在浏览器中打开页面时,它只会一直在等待服务器。 catalina.out仅表示服务器已启动。

–阿苏
15年7月23日在10:39

#7 楼

添加到@Rob Hruska的sol上,server.xml内部部分中的此设置可以正常工作:

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


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

评论


您没有提到要放在哪里。 @Sudheer Palyam的回答很有帮助。

– Kannan Ramamoorthy
17年7月5日在12:31

#8 楼

添加到@Dima的答案中,如果您使用maven构建软件包,则可以告诉它在ROOT中将WAR文件名设置为pom.xml: override“> <build> <finalName>ROOT</finalName> </build>

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

#9 楼

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

#10 楼

在我的服务器上,我正在使用它,并且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>


评论


这不会部署到/而是部署到/ mysite

– tine2k
16年11月4日在10:35