Як змінити додаток 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 та розгорнутиOnStartup у своєму елементі 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. Докладніше див. Документацію для контейнера контексту .

Довідково


4
Я спробував перший метод, і він працює! Bdw - вам НЕ потрібно все видаляти. Я щойно видалив папку ROOT і перейменував свою війну в ROOT.war, і це працює як шарм.
господарник

Я знаю, що він насправді не дотримується правил м'якого режиму, але накручує ..... Дякую! Я б хотів, щоб я міг подати заявку не раз. Супер корисно. До речі, мені довелося перезапустити tomcat, перш ніж це спрацює, @hostnik.
бридкий пастоз

@ третій метод danny-london не працював для мене в Tomcat 7, але він працює, якщо розмістити файл ROOT.xml в $CATALINA_BASE/conf/[enginename]/[hostname]каталозі (що для моєї досить базової настройки є $CATALINA_HOME/conf/Catalina/localhost). Перегляньте документацію по контейнеру контексту .
Майкл Шепер

Сучасна альтернатива запуску 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


Просто рішення, яке я шукав! Дякую мільйон, Sudheer! Працює як шарм для мене. І ей! У мене ще одне питання. Коли я отримую доступ до ROOT /ROOTі намагаюся увійти на сторінку менеджера за допомогою правильних облікових даних, мені заборонено доступ. Чи знаєте ви, як це виправити?
Сатуріан

@Sudheer Palyam Я зробив те саме. Я змінив файл server.xml, а потім запустив сервер. Але коли я завантажував / відвідував localhost: 8080, він показав мені помилку 404. Якщо я видаляю ці рядки з server.xml, то він завантажує вищевказаний порт.
Сачин Кумар

16

Додаток ROOT за замовчуванням зазвичай - менеджер Tomcat - який може бути корисним, тому я відчував, що хотів би його тримати.

Тож те, як я зробив свою програму ROOT і зберігав TCmgr, був таким.

перейменовано ROOT на щось інше

mv ROOT TCmgr

потім створили символічне посилання, за яким ROOT вказує на додаток, на який я хочу зробити за замовчуванням.

ln -s <your app> ROOT

працював на мене і здавався найлегшим підходом.


@Vic ви праві, але Windows має символічні посилання, в 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-адрес у веб-сервері 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, який дозволить вам встановити webapp за замовчуванням, не змінюючи джерело.

Я не впевнений, чи не матиме це негативні наслідки, але я протестував це, і, здається, це працює.


2

конфігурація context.xml не працювала для мене. Tomcat 6.0.29 скаржиться на те, що docBase знаходиться в додатку: ... Для 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)

Файл війни повинен мати ім'я ROOT.war . Перейменуйте заявку, якщо це потрібно: yourApplicationName.war -> ROOT.war

  1. Перезапустіть tomcat. Після перезапуску додаток буде root.

0

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

Знайшов це:

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

Отже, здається, що змінити кореневий шлях (у ROOT.xml) можливо, але трохи зламано - потрібно перемістити свою ВІЙНО за межі каталогу автоматичного розгортання. Майте на увазі, якщо я запитаю, чому просто перейменування вашого файлу на ROOT.war не підходить для вирішення?


1
На жаль, зміна файлу війни на ROOT.war не є для мене варіантом. Жак

трохи пізно, але ... для мене я не можу це змінити, тому що я використовую систему, створену третьою стороною, яка, схоже, важко зашифрувала деякі місця для jar файлів .... тому переміщуючи її на ROOT.war створює проблеми, оскільки оригінальний додаток шукає власну банку під каталогом, який знаходиться в [originalapp.war]
вр

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) я нічого не додавав і не редагував до жодного файлу конфігурації. Я просто перейменував папку ROOT в щось інше і перейменував свою папку програм на ROOT, і вона спрацювала нормально.


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