Как изменить приложение ROOT?

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


person Community    schedule 03.04.2009    source источник


Ответы (13)


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

  • Сначала выключите свой Tomcat из его каталога bin (sh shutdown.sh). Затем удалите все содержимое папки Tomcat webapps (rm -fr *). Затем переименуйте файл WAR в ROOT.war и, наконец, запустите свой Tomcat из каталога bin (sh startup.sh).

  • #P3# <блочная цитата> #P4#
  • Поместите файл WAR вне $CATALINA_BASE/webapps (он должен быть снаружи, чтобы предотвратить двойное развертывание). Поместите файл контекста с именем ROOT.xml в $CATALINA_BASE/conf/. Единственный элемент в этом файле контекста ДОЛЖЕН иметь атрибут docBase, указывающий на расположение вашего файла WAR. Элемент пути не должен быть установлен - он получен из имени файла .xml, в данном случае ROOT.xml. Дополнительные сведения см. в документации по контейнеру Context.

Справочник

person Community    schedule 23.05.2011
comment
Я попробовал первый способ, и он работает! Bdw - вам НЕ нужно удалять все. Я просто удалил папку ROOT и переименовал свою войну в ROOT.war, и она работает как шарм. - person hostnik; 04.11.2011
comment
Я знаю, что на самом деле это не соответствует правилам софта, но черт с ним..... Спасибо! Хотел бы я проголосовать больше одного раза. Супер полезно. Кстати, мне пришлось перезапустить tomcat, прежде чем это заработает, @hostnik. - person nasty pasty; 09.02.2012
comment
Третий метод @danny-london не работал у меня в Tomcat 7, но он работает, если вы поместите файл ROOT.xml в каталог $CATALINA_BASE/conf/[enginename]/[hostname] (который для моей довольно простой настройки — $CATALINA_HOME/conf/Catalina/localhost). См. документацию по контейнеру контекста. - person Michael Scheper; 14.06.2012
comment
Современная альтернатива запуску Tomcat: sudo systemctl start tomcatx, где x обозначает номер версии. - person EarthMind; 19.06.2019

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

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

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

person Sudheer Palyam    schedule 14.08.2013
comment
Как раз то решение, которое я искал! Огромное спасибо, Судхир! Работает как шарм для меня. И эй! У меня есть еще один вопрос. Когда я получаю доступ к ROOT через /ROOT и пытаюсь войти на страницу менеджера, используя правильные учетные данные, мне отказывают в доступе. Вы знаете, как это исправить? - person Saturnian; 27.07.2014
comment
@Sudheer Palyam Я сделал то же самое. Я изменил файл server.xml, а затем запустил сервер. Но когда я загрузил/посетил локальный хост: 8080, он показал мне ошибку статуса 404. Если я удалю эти строки из server.xml, то он загрузит указанный выше порт. - person Sachin Kumar; 27.03.2017

Добавление тега <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>
person ze.    schedule 03.03.2010
comment
это также верно для tomcat 7? - person Marcy Sutton; 28.07.2011
comment
Согласно документации: для Tomcat 6, в отличие от Tomcat 4.x, НЕ рекомендуется размещать элементы ‹Context› непосредственно в файле server.xml. Это связано с тем, что изменение конфигурации контекста становится более инвазивным, поскольку основной файл conf/server.xml нельзя перезагрузить без перезапуска Tomcat. - person ; 29.04.2012
comment
позвольте сообщить, что этот подход имеет побочный эффект! myStrutsbook будет развернут дважды: один раз для localhost:8080 и один раз для localhost:8080/myStrutsbook! и может привести к ошибкам подключения к базе данных и большему использованию ресурсов - person Ali.Mojtehedy; 02.05.2014

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

Таким образом, я сделал моё приложение ROOT и сохранил TCmgr.

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

mv ROOT TCmgr

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

ln -s <your app> ROOT

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

person nestochan    schedule 03.11.2011
comment
@Vic, вы правы, но в Windows есть символические ссылки, в XP и выше, я думаю, вы можете использовать mklink. Обратите внимание, что я этого не сделал, и у меня есть другие причины не использовать символические ссылки. - person MichaelStoner; 13.04.2015

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

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

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

person Jon    schedule 03.04.2009

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

  1. Остановить Томкэт
  2. Отодвиньте ROOT.war в сторону и rm -rf webapps/ROOT
  3. Скопируйте нужное веб-приложение в webapps/ROOT.war.
  4. Запустить Tomcat
person gareth_bowles    schedule 03.04.2009
comment
Уродливый или, может быть, неприглядный, но хакерский может быть неправильным термином, поскольку это, по-видимому, официальный/поддерживаемый метод. - person Brian Knoblauch; 08.09.2014

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

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

person Jonathan Dixon    schedule 11.07.2011

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

Поэтому одно из решений — поместить приложение в папку ROOT.

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

С уважением, Ян

person Jan    schedule 11.01.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

Сделанный.

Работает на меня.

person AC de Souza    schedule 24.11.2011

Окончательный способ изменить корневое приложение 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. Перезапустите кота. После перезапуска ваше приложение станет корневым.
person Jackkobec    schedule 26.04.2018

Я посмотрю на свои документы; есть способ указать конфигурацию, чтобы изменить путь корневого веб-приложения от ROOT (или ROOT.war), но, похоже, он изменился между Tomcat 5 и 6.

Нашел это:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html

Итак, кажется, что изменение корневого пути (в ROOT.xml) возможно, но немного неправильно — вам нужно переместить WAR за пределы каталога автоматического развертывания. Не возражаете, если я спрошу, почему простое переименование вашего файла в ROOT.war не является рабочим решением?

person Don Werve    schedule 03.04.2009
comment
К сожалению, изменение файла войны на ROOT.war для меня не вариант. Жак - person ; 04.04.2009
comment
немного поздно, но... для меня я не могу изменить это, потому что я использую систему, созданную третьей стороной, которая, кажется, жестко запрограммировала некоторые места для файлов jar.... поэтому перемещаю ее в ROOT.war создает проблему, поскольку исходное приложение ищет свою собственную банку в каталоге, который находится в [originalapp.war] - person mur; 23.11.2016

Не очень хорошее решение, но один из способов — перенаправить из приложения ROOT в YourWebApp. Для этого вам нужно изменить ROOT index.html.

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

OR

<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

person abbas    schedule 10.06.2013

В Tomcat 7 (под сервером Windows) я ничего не добавлял и не редактировал ни в один файл конфигурации. Я просто переименовал папку ROOT во что-то другое и переименовал папку моего приложения в ROOT, и все заработало нормально.

person Dov    schedule 17.01.2014
comment
Это может быть хорошим обходным путем, но вопрос Жака о том, как изменить приложение по умолчанию; могут быть причины, по которым он не может изменить содержимое папки ROOT. - person JVMATL; 17.01.2014