Я пытаюсь изменить стандартное приложение веб-сервера Tomcat 6 на другое приложение, чем "ROOT" (внутри папки webapps). Каков наилучший способ сделать это?
Как изменить приложение ROOT?
Ответ 1
Существует три метода:
-
Сначала выключите Tomcat из его каталога
bin
(sh shutdown.sh
). Затем удалите все содержимое вашей папки Tomcatwebapps
(rm -fr *
). Затем переименуйте файл WAR вROOT.war
и, наконец, запустите Tomcat из каталогаbin
(sh startup.sh
). -
Оставьте свой военный файл в
$CATALINA_BASE/webapps
под его первоначальным именем. Выключить autoDeploy и deployOnStartup в вашем элементе Host в файлеserver.xml
. Явно определите все контексты приложения вserver.xml
, указав как путь и docBase. Вы должны сделать это, потому что вы отключили все Tomcat механизмы автоматического развертывания, а Tomcat больше не будет развертывать ваши приложения если он не находит свой контекст вserver.xml
.второй метод: чтобы внести любые изменения в любой приложения, вам придется остановить и перезапустить Tomcat.
-
Поместите файл WAR вне
$CATALINA_BASE/webapps
(он должен быть снаружи для предотвращения двойного развертывания). Поместите файл контекста с именемROOT.xml
в$CATALINA_BASE/conf/
. Единственный элемент в этом файле контекста ДОЛЖЕН иметь docBase, указывающий на местоположение вашего файла WAR. Элемент пути не должен быть установлен - он выводится из имени файла.xml
, в этом случайROOT.xml
. Подробнее см. Документацию для контейнера Context.
Ответ 2
Добавление тега <Context>
в тег <Host>
в server.xml
для Tomcat 6 решит проблему.
Если вы используете path=""
empty, вы можете использовать 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>
Ответ 3
В Tomcat 7 с этими изменениями я могу получить доступ к myAPP
в /
и ROOT
в /ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Добавьте выше в раздел <Host>
в server.xml
Ответ 4
ROOT-приложением по умолчанию обычно является Tomcat Manager - что может быть полезно, поэтому мне хотелось сохранить его.
Таким образом, способ, которым я сделал свое приложение ROOT и сохранил TCmgr, был таким.
переименован в ROOT в другое
mv ROOT TCmgr
затем создал символическую ссылку, посредством которой ROOT указывает на приложение, которое я хочу сделать по умолчанию.
ln -s <your app> ROOT
работал для меня и, казалось, самый простой подход.
Ответ 5
Вы можете сделать это слегка взломанным способом:
- Остановить Tomcat
- Переместить ROOT.war в сторону и rm -rf webapps/ROOT
- Скопируйте webapp, который вы хотите использовать для webapps/ROOT.war
- Запустите Tomcat
Ответ 6
В соответствии с документами Apache Tomcat вы можете изменить приложение, создав файл ROOT.xml. См. Дополнительную информацию:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"Веб-приложение по умолчанию может быть определено с помощью файла ROOT.xml."
Ответ 7
@danny-london третий метод не работал у меня в Tomcat 7, но он работает, если вы поместите файл ROOT.xml в каталог $CATALINA_BASE/conf/[enginename]/[hostname]
(который для моей базовой установки - $CATALINA_HOME/conf/Catalina/localhost
). Обратитесь к документации Контекстного контейнера.
Ответ 8
Альтернативным решением могло бы стать создание сервлета, который отправляет перенаправление на требуемый webapp по умолчанию и отображает этот сервлет на все URL-адреса в веб-приложении ROOT.
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, чтобы вы могли установить веб-приложение по умолчанию, не изменяя исходный код.
Я не уверен, что если это будет иметь какие-либо негативные последствия, но я проверил это, и он, похоже, работает.
Ответ 9
Конфигурация context.xml не работала для меня. Tomcat 6.0.29 жалуется на то, что docBase находится внутри appBase:... Для Tomcat 5 это действительно работало.
Таким образом, одним из решений является размещение приложения в папке ROOT.
Еще одно очень простое решение - поместить index.jsp в ROOT, который перенаправляет на мое приложение следующим образом: response.sendRedirect( "/MyApplicationXy" );
С наилучшими пожеланиями, Ян
Ответ 10
У меня возникла проблема при настройке 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
Готово.
Работает для меня.
Ответ 11
Окончательный способ изменить корневое приложение Tomcat. Проверено на Tomcat 7 и 8.
-
Перейдите в каталог веб-приложений tomcat:
Пример на моей машине:
~/stack/apache-tomcat/webapps
-
Переименуйте, замените или удалите папку ROOT. Мой совет - переименовать или создать копию для резервного копирования. Пример переименования ROOT в RENAMED_ROOT:
mv ROOT RENAMED_ROOT
-
Переместите файл war с вашим приложением в каталог tomcat webapps (это каталог, где находилась старая папка ROOT, на моей машине: ~/stack/apache-tomcat/webapps)
Военный файл должен иметь имя ROOT.war. Переименуйте вашу заявку, если это необходимо: yourApplicationName.war → ROOT.war
- Перезагрузите кота. После перезагрузки ваше приложение станет рутом.
Ответ 12
Я посмотрю на свои документы; есть способ указать конфигурацию для изменения пути корневого веб-приложения от ROOT (или ROOT.war), но, похоже, он изменился между Tomcat 5 и 6.
Найдено следующее:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
Итак, кажется, что изменение корневого пути (в ROOT.xml) возможно, но немного сломано - вам нужно переместить WAR вне каталога автоматического развертывания. Помните, если я спрошу, почему просто переименование вашего файла в ROOT.war не является приемлемым решением?
Ответ 13
Не очень хорошее решение, но одним из способов является перенаправление из приложения 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
Ответ 14
В Tomcat 7 (под сервером Windows) я не добавлял и не редактировал ничего в файл конфигурации. Я только что переименовал папку ROOT в другое место и переименовал мою папку приложений в ROOT, и она отлично работала.