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


130

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

Ответы:


129

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

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

Ссылка


4
Я попробовал первый способ, и он работает! Bdw - вам НЕ нужно удалять все. Я просто удалил папку ROOT и переименовал свою войну в ROOT.war, и она работает как шарм.
hostnik 04

Я знаю, что это не совсем следование правилам софтов, но к черту ..... Спасибо! Хотел бы я проголосовать больше одного раза. Супер полезно. Кстати, мне пришлось перезапустить tomcat, чтобы это сработало, @hostnik.
противный пирог

Третий метод @danny-london не работал у меня в Tomcat 7, но он работает, если вы поместите файл ROOT.xml в $CATALINA_BASE/conf/[enginename]/[hostname]каталог (что для моей довольно простой установки $CATALINA_HOME/conf/Catalina/localhost). См. Документацию Контейнера контекста .
Michael Scheper

Современная альтернатива запуску Tomcat: sudo systemctl start tomcatxгде xстоит номер версии
EarthMind

24

Добавление <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>

это также верно для Tomcat 7?
Марси Саттон

4
Согласно документации: для Tomcat 6, в отличие от Tomcat 4.x, НЕ рекомендуется размещать элементы <Context> непосредственно в файле server.xml. Это связано с тем, что это делает изменение конфигурации контекста более инвазивным, поскольку основной файл conf / server.xml не может быть перезагружен без перезапуска Tomcat.

позвольте уведомить, что этот подход имеет побочный эффект! myStrutsbook будет развернут дважды: один раз для localhost: 8080 и один раз для localhost: 8080 / myStrutsbook! и может вызвать ошибки подключения к базе данных и большее использование ресурсов
Ali.Mojtehedy

24

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

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

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


Как раз то решение, которое я искал! Спасибо большое, Судхир! Для меня работает как оберег. И эй! У меня есть еще один вопрос. Когда я получаю доступ к ROOT с помощью /ROOTи пытаюсь войти на страницу Manager с правильными учетными данными, мне отказывают в доступе. Знаете ли вы, как это исправить?
Saturnian

@Sudheer Palyam Я сделал то же самое. Я изменил файл server.xml, а затем запустил сервер. Но когда я загрузил / посетил localhost: 8080, он показал мне ошибку статуса 404. Если я удалю эти строки из server.xml, он загрузит указанный выше порт.
Sachin Kumar

16

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

Итак, как я сделал свой приложение ROOT и сохранил TCmgr следующим образом.

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

mv ROOT TCmgr

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

ln -s <your app> ROOT

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


@Vic, вы правы, но в окнах есть символические ссылки, в XP и выше, я думаю, вы можете использовать mklink. Обратите внимание, что я этого не делал, и у меня есть другие причины не использовать символические ссылки.
MichaelStoner

12

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

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

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


12

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

  1. Остановить Tomcat
  2. Отодвиньте ROOT.war в сторону и rm -rf webapps / ROOT
  3. Скопируйте нужное веб-приложение в webapps / ROOT.war
  4. Запустить Tomcat

2
Уродливый или, может быть, неприглядный, но «хакерский» может быть неправильным термином, поскольку это официальный / поддерживаемый метод.
Брайан Кноблауч

3

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

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


2

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

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

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

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


1

У меня проблема при настройке 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

Готово.

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


1

Окончательный способ изменить корневое приложение 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)

Файл War должен иметь имя ROOT.war . Если необходимо, переименуйте приложение: yourApplicationName.war -> ROOT.war

  1. Перезапустите tomcat. После перезапуска ваше приложение станет рутом.

0

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

Нашел это:

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

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


1
К сожалению, изменение файла war на ROOT.war для меня не вариант. Жак

немного поздно, но ... для меня я не могу это изменить, потому что я использую систему, созданную третьей стороной, которая, кажется, жестко закодировала некоторые места для файлов jar ... поэтому переместите ее в ROOT.war создает проблему, поскольку исходное приложение ищет свой собственный jar-файл в каталоге, который находится в [originalapp.war]
mur

0

Не очень хорошее решение, но один из способов - перенаправить из приложения 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


-4

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


1
Это могло бы быть хорошим обходным путем, но вопрос Жака касается того, как изменить приложение по умолчанию; могут быть причины, по которым он не может изменить содержимое папки ROOT.
JVMATL
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.