我正在尝试将Tomcat 6网络服务器的默认应用程序更改为与“ROOT”(在webapps文件夹内)不同的应用程序。做这个的最好方式是什么?
有三种方法:
bin
目录(sh shutdown.sh
)关闭Tomcat。然后删除Tomcat webapps
文件夹(rm -fr *
)的所有内容。然后将WAR文件重命名为ROOT.war
,最后从bin
目录(sh startup.sh
)启动Tomcat。$CATALINA_BASE/webapps
中。在server.xml
文件的Host元素中关闭autoDeploy和deployOnStartup。在server.xml
中明确定义所有应用程序上下文,同时指定path和docBase属性。您必须执行此操作,因为您已禁用所有Tomcat自动部署机制,并且Tomcat将不再部署您的应用程序,除非它在server.xml
中找到它们的Context。
第二种方法:为了对任何应用程序进行任何更改,您必须停止并重新启动Tomcat。$CATALINA_BASE/webapps
之外(它必须在外面以防止双重部署)。在ROOT.xml
中放置一个名为$CATALINA_BASE/conf/
的上下文文件。此上下文文件中的单个元素必须具有指向WAR文件位置的docBase属性。不应该设置path元素 - 它是从.xml
文件的名称派生的,在本例中是ROOT.xml
。有关详细信息,请参阅documentation for the Context container。改变tomcat根应用程序的最终方式。在Tomcat 7和8上测试过。
~/stack/apache-tomcat/webapps
mv ROOT RENAMED_ROOT
War文件必须有一个名称ROOT.war。如果需要,请重命名您的应用程序:您的应用程序名称.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,它运行正常。
在<Context>
中为Tomcat 6添加<Host>
标签中的server.xml
标签将解决该问题。
如果你使用path=""
为空,你可以使用像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"/>
将上面的内容添加到server.xml中的<Host>
部分
ROOT默认应用程序通常是Tomcat管理器 - 这可能很有用,所以我觉得要保持它。
所以我让我的应用ROOT并保持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
“可以使用名为ROOT.xml的文件来定义默认Web应用程序。”
另一种解决方案是创建一个servlet,将重定向发送到所需的默认webapp,并将该servlet映射到ROOT webapp中的所有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参数,以允许您设置默认Web应用程序而无需修改源。
我不确定这样做是否会产生任何负面影响,但我确实对此进行了测试,看起来确实有效。
context.xml配置对我不起作用。 Tomcat 6.0.29抱怨appBase中的docBase:...对于Tomcat 5,这确实有效。
因此,一种解决方案是将应用程序放在ROOT文件夹中。
另一个非常简单的解决方案是将一个index.jsp放到ROOT,重定向到我的应用程序,如:response.sendRedirect(“/ MyApplicationXy”);
最诚挚的问候,Jan
我在配置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
完成。
适合我。