Как изменить приложение ROOT? - PullRequest
127 голосов
/ 04 апреля 2009

Я пытаюсь изменить приложение по умолчанию веб-сервера Tomcat 6 на другое приложение, отличное от «ROOT» (внутри папки webapps). Каков наилучший способ сделать это?

Ответы [ 13 ]

123 голосов
/ 23 мая 2011

Есть три метода:

  • Сначала отключите Tomcat из каталога bin (sh shutdown.sh). Затем удалите все содержимое папки Tomcat webapps (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 .

Ссылка

23 голосов
/ 03 марта 2010

Добавление тега <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>
21 голосов
/ 14 августа 2013

В Tomcat 7 с этими изменениями я могу получить доступ к myAPP в / и ROOT в /ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

Добавьте выше в раздел <Host> в server.xml

15 голосов
/ 03 ноября 2011

ROOT-приложением по умолчанию обычно является Tomcat Manager - что может быть полезно, поэтому мне хотелось сохранить его.

То, как я сделал мое приложение ROOT и сохранил TCmgr, было таким:

переименован в ROOT во что-то другое

mv ROOT TCmgr

затем создал символическую ссылку, посредством которой ROOT указывает на приложение, которое я хочу сделать по умолчанию.

ln -s <your app> ROOT

работал для меня и казался самым простым подходом.

12 голосов
/ 04 апреля 2009

Вы можете сделать это слегка хакерским способом:

  1. Стоп Tomcat
  2. Отодвиньте ROOT.war в сторону и запустите rm -rf webapps / ROOT
  3. Скопируйте веб-приложение, которое вы хотите, в webapps / ROOT.war
  4. Запустите Tomcat
11 голосов
/ 04 апреля 2009

Согласно документации Apache Tomcat, вы можете изменить приложение, создав файл ROOT.xml. См. Это для получения дополнительной информации:

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

"Веб-приложение по умолчанию может быть определено с использованием файла с именем ROOT.xml."

3 голосов
/ 11 июля 2011

Альтернативным решением было бы создание сервлета, который отправляет перенаправление на нужное веб-приложение по умолчанию, и сопоставление этого сервлета со всеми 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, чтобы позволить вам устанавливать веб-приложение по умолчанию без необходимости изменять исходный код.

Я не уверен, что это может иметь какие-либо негативные последствия, но я проверил это, и, похоже, оно работает.

2 голосов
/ 11 января 2011

конфигурация context.xml у меня не сработала. Tomcat 6.0.29 жалуется на то, что docBase находится внутри appBase: ... Для Tomcat 5 это действительно сработало.

Таким образом, одно из решений - поместить приложение в папку ROOT.

Другое очень простое решение - поместить index.jsp в ROOT, который перенаправляет в мое приложение, например: response.sendRedirect ( "/ MyApplicationXy");

С наилучшими пожеланиями, Jan

1 голос
/ 26 апреля 2018

Окончательный способ изменить корневое приложение Tomcat. Протестировано на Tomcat 7 и 8.

  1. Перейти в каталог веб-приложений tomcat:

    Пример на моей машине: ~/stack/apache-tomcat/webapps

  2. Переименование, замена или удаление папки ROOT. Мой совет - переименовать или создать копию для резервного копирования. Пример переименования ROOT в RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. Переместите военный файл с вашим приложением в каталог tomcat webapps (это каталог, где находилась старая папка ROOT, на моей машине: ~ / stack / apache-tomcat / webapps)

Файл войны должен иметь имя ROOT.war . Переименуйте вашу заявку, если она нужно: yourApplicationName.war -> ROOT.war

  1. Перезагрузите кота. После перезапуска ваше приложение будет рут.
1 голос
/ 24 ноября 2011

У меня проблема при настройке Tomcat 'server.xml и добавлении элемента Context. Он просто не хочет использовать мой конфиг: http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html

Если вы в системе Unix-like:

  1. mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
  2. ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT

Готово.

У меня работает.

...