Answers:
有三种方法:
首先从其bin
目录(sh shutdown.sh
)关闭Tomcat 。然后删除Tomcat webapps
文件夹(rm -fr *
)的所有内容。然后将WAR文件重命名为ROOT.war
,最后从bin
目录(sh startup.sh
)启动Tomcat 。
将战争文件保留$CATALINA_BASE/webapps
为原始名称。在文件中的Host元素中关闭
autoDeploy和deployOnStartupserver.xml
。在中明确定义所有应用程序上下文server.xml
,同时指定path
和docBase属性。之所以必须这样做,是因为您已禁用了所有Tomcat自动部署机制,并且Tomcat将不再部署您的应用程序,除非它在中找到了它们的上下文server.xml
。
第二种方法:为了对任何应用程序进行任何更改,您必须停止并重新启动Tomcat。
将您的WAR文件放在外面$CATALINA_BASE/webapps
(该文件必须放在外面以防止重复部署)。将命名上下文的文件ROOT.xml
在$CATALINA_BASE/conf/
。此上下文文件中的单个元素务必具有
指向您WAR文件位置的docBase属性。不应设置path元素- .xml
在这种情况下,它是从文件名派生的ROOT.xml
。有关详细信息,请参见Context容器的文档。
$CATALINA_BASE/conf/[enginename]/[hostname]
目录中(对于我的基本设置是$CATALINA_HOME/conf/Catalina/localhost
),它确实起作用。请参阅上下文容器文档。
sudo systemctl start tomcatx
其中x
代表的版本号
在Tomcat 6 <Context>
的<Host>
标签中添加标签server.xml
可以解决该问题。
如果使用path=""
空,则可以使用URL http://localhost/first.do
。
在上下文标记中设置属性docBase="E:\struts-ITRCbook\myStrutsbook"
和reloadable="true"
,然后结束上下文标记。
它看起来应该像这样:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
</Context>
</Host>
在具有这些更改的Tomcat 7中,我可以myAPP
在/
和ROOT
处访问/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
将以上内容添加到<Host>
server.xml中的部分
/ROOT
并尝试使用正确的凭据登录到Manager页面时,被拒绝访问。您知道如何解决此问题吗?
ROOT默认应用程序通常是Tomcat Manager-这很有用,因此我想保留它。
所以,这样我做我的应用程序根并保持TCmgr是这样。
将ROOT重命名为其他名称
mv ROOT TCmgr
然后创建一个符号链接,其中ROOT指向我要设置默认值的应用程序。
ln -s <your app> ROOT
为我工作,似乎是最简单的方法。
根据Apache Tomcat文档,您可以通过创建ROOT.xml文件来更改应用程序。看到更多信息:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
“默认的Web应用程序可以通过使用名为ROOT.xml的文件来定义。”
您可以通过以下方式来做到这一点:
一种替代解决方案是创建一个Servlet,该Servlet将重定向发送到所需的默认Web应用程序,并将该Servlet映射到ROOT Web应用程序中的所有URL。
package com.example.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RedirectServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("/myRootWebapp");
}
}
将以上类添加到中
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet
。
并将以下内容添加到CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml
:
<servlet>
<display-name>Redirect</display-name>
<servlet-name>Redirect</servlet-name>
<servlet-class>com.example.servlet.RedirectServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Redirect</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
并且,如果需要,您可以轻松地修改RedirectServlet来接受init参数,以使您可以设置默认的webapp,而无需修改源。
我不确定这样做是否会带来负面影响,但我确实对此进行了测试,并且看来确实可行。
配置Tomcat' server.xml
并添加Context元素时出现问题。他只是不想使用我的配置:http :
//www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
如果您在Unix-like
系统中:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
做完了
为我工作。
更改tomcat根应用程序的最终方法。在Tomcat 7和Tomcat 8上进行了测试。
移至tomcat webapps目录:
我的机器上的示例: ~/stack/apache-tomcat/webapps
重命名,替换或删除ROOT文件夹。我的建议是重命名或创建备份副本。示例将ROOT重命名为RENAMED_ROOT:
mv ROOT RENAMED_ROOT
使用您的应用程序将war文件移动到tomcat webapps目录(该目录在我的机器上是旧的ROOT文件夹所在的目录:〜/ stack / apache-tomcat / webapps)
War文件必须具有名称ROOT.war。如果需要,请重命名应用程序:yourApplicationName.war-> ROOT.war
我看一下我的文档;有一种方法可以指定一种配置,以将根Web应用程序的路径更改为远离ROOT(或ROOT.war),但是在Tomcat 5和6之间似乎有所改变。
发现了这一点:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
因此,似乎可以更改根路径(在ROOT.xml中),但有点破损-您需要将WAR移到自动部署目录之外。介意我是否问为什么仅将文件重命名为ROOT.war是不可行的解决方案?
这不是一个很好的解决方案,但是一种方法是从ROOT应用重定向到YourWebApp。为此,您需要修改ROOT index.html。
<html>
<head>
<title>Redirecting to /YourWebApp</title>
</head>
<body onLoad="javascript:window.location='YourWebApp';">
</body>
</html>
要么
<html>
<head>
<title>Redirecting to /YourWebApp</title>
<meta http-equiv="refresh" content="0;url=YourWebApp" />
</head>
<body>
</body>
</html>
参考:http : //staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html
在Tomcat 7(在Windows服务器下)中,我没有向任何配置文件添加或编辑任何内容。我只是将ROOT文件夹重命名为其他名称,并将我的应用程序文件夹重命名为ROOT,并且工作正常。