http://localhost:8080/war_name/application_name
。#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
按照您提供的链接,不建议将
– 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 "%r" %s %b"/>
<Context path="/mysite" docBase="mysite" reloadable="true"/>
</Host>
评论
这不会部署到/而是部署到/ mysite
– tine2k
16年11月4日在10:35
评论
请问您究竟是什么问题?在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-也许这个问题的一些答案可以帮助您。