我正在尝试将 Tomcat 6 网络服务器的默认应用程序更改为与“ROOT”不同的应用程序(在 webapps 文件夹内)。做这个的最好方式是什么?
13 回答
有以下三种方法:
首先从其
bin
目录 (sh shutdown.sh
) 中关闭您的 Tomcat。然后删除 Tomcatwebapps
文件夹 (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属性。不应设置路径元素 -.xml
在这种情况下,它是从文件名派生的ROOT.xml
。有关详细信息,请参阅Context 容器的文档。
在具有这些更改的 Tomcat 7 中,我可以访问myAPP
at/
和ROOT
at/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
将上面添加到<Host>
server.xml 中的部分
在 Tomcat 6 的标签中添加<Context>
标签将解决该问题。<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>
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 应用程序。”
您可以通过以下方式以稍微 hack-y 的方式执行此操作:
- 停止 Tomcat
- 将 ROOT.war 移到一边,然后 rm -rf webapps/ROOT
- 将你想要的 webapp 复制到 webapps/ROOT.war
- 启动Tomcat
另一种解决方案是创建一个 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 参数,从而允许您设置默认 webapp 而无需修改源。
我不确定这样做是否会产生任何负面影响,但我确实对此进行了测试,它似乎确实有效。
context.xml 配置对我不起作用。Tomcat 6.0.29 抱怨 docBase 在 appBase 内:...对于 Tomcat 5,这确实有效。
因此,一种解决方案是将应用程序放在 ROOT 文件夹中。
另一个非常简单的解决方案是将 index.jsp 放入 ROOT 以重定向到我的应用程序,如下所示: response.sendRedirect("/MyApplicationXy");
最好的问候,扬
配置 Tomcatserver.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 和 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
- 重启tomcat。重新启动后,您的应用程序将成为 root。
我会看看我的文档;有一种方法可以指定配置来更改根 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,它运行良好。