Как изменить приложение ROOT?
Я пытаюсь изменить приложение по умолчанию веб-сервера Tomcat 6 на другое приложение, отличное от "ROOT" (внутри папки webapps). Каков наилучший способ сделать это?
14 ответов
Есть три метода:
Сначала отключи свой 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
указав атрибуты path и docBase. Вы должны сделать это, потому что вы отключили все механизмы автоматического развертывания Tomcat, и Tomcat больше не будет развертывать ваши приложения, пока не найдет их Контекст вserver.xml
,Второй способ: чтобы внести какие-либо изменения в любое приложение, вам нужно будет остановить и перезапустить Tomcat.
Разместите файл WAR вне
$CATALINA_BASE/webapps
(он должен быть снаружи, чтобы предотвратить двойное развертывание). Поместите контекстный файл с именемROOT.xml
в$CATALINA_BASE/conf/
, НЕОБХОДИМО, чтобы отдельный элемент в этом файле контекста имел атрибут docBase, указывающий на местоположение вашего файла WAR. Элемент пути не должен быть установлен - он получен из имени.xml
файл, в этом случаеROOT.xml
, См. Документацию для контейнера Context для деталей.
В Tomcat 7 с этими изменениями я могу получить доступ myAPP
в /
а также ROOT
в /ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Добавить выше к <Host>
раздел в server.xml
Добавление <Context>
тег в <Host>
отметить в server.xml
для Tomcat 6 решит проблему.
Если вы используете 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>
ROOT-приложение по умолчанию, как правило, Tomcat Manager - это может быть полезно, так что хочется держать его под рукой.
Таким образом, способ, которым я сделал свое приложение ROOT и сохранил TCmgr, был таким.
переименован в ROOT на что-то другое
mv ROOT TCmgr
затем создал символическую ссылку, посредством которой ROOT указывает на приложение, которое я хочу сделать по умолчанию.
ls-syour app
ROOT
работал для меня и, казалось, самый простой подход.
--nestochan
Вы можете сделать это немного хакерским способом:
- Стоп Tomcat
- Отодвиньте ROOT.war в сторону и запустите rm -rf webapps/ROOT
- Скопируйте веб-приложение, которое вы хотите, в webapps/ROOT.war
- Запустить Tomcat
Согласно документации Apache Tomcat, вы можете изменить приложение, создав файл ROOT.xml. Смотрите это для получения дополнительной информации:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"Веб-приложение по умолчанию может быть определено с помощью файла с именем ROOT.xml."
Третий метод @danny-london не работал для меня в Tomcat 7, но он работает, если вы поместите файл ROOT.xml в $CATALINA_BASE/conf/[enginename]/[hostname]
каталог (который для моей довольно простой настройки $CATALINA_HOME/conf/Catalina/localhost
). Обратитесь к документации контейнера контекста.
Альтернативным решением может быть создание сервлета, который отправляет перенаправление в нужное веб-приложение по умолчанию, и сопоставляет этот сервлет со всеми 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, чтобы позволить вам устанавливать веб-приложение по умолчанию без необходимости изменения источника.
Я не уверен, будет ли это иметь какие-либо негативные последствия, но я проверил это, и это, кажется, работает.
У меня не работала конфигурация context.xml. Tomcat 6.0.29 жалуется на то, что docBase находится внутри appBase: ... Для Tomcat 5 это действительно сработало.
Поэтому одним из решений является размещение приложения в папке ROOT.
Другое очень простое решение - поместить index.jsp в ROOT, который перенаправляет в мое приложение, например: response.sendRedirect("/MyApplicationXy");
С наилучшими пожеланиями, Ян
У меня проблема при настройке Tomcat server.xml
и добавил элемент контекста. Он просто не хочет использовать мой конфиг: 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:
Пример на моей машине:
~/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
- Перезагрузите кота. После перезагрузки ваше приложение станет рутом.
Я посмотрю на мои документы; есть способ указать конфигурацию, чтобы изменить путь корневого веб-приложения от 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, и она работала нормально.