Розгортання моєї програми в корені в Tomcat


132

У мене є військовий файл моєї заяви. Мені потрібно розгорнути це на рівні кореня. Поточна URL-адреса - http://localhost:8080/war_name/application_name.


1
Скажіть, будь ласка, в чому саме полягає ваша проблема? Коли ви розгортаєте файл війни у ​​tomcat, доступ до програми використовується за допомогою URL: localhost: 8080 / war_name без розширення .war.
ashishjmeshram

1
Так, ви праві, мені потрібно отримати доступ до мого додатка. " localhost / application_name ", це я можу досягти, коли я перейменую свій файл війни на "ROOT.war", але його викидання з пам'яті виняток, оскільки розмір мого файлу війни становить близько 120
МБ

1
@ user661660 - Схоже, у вас є інша проблема - перейменування ROOT.warмає працювати. Я б запропонував задати ще одне питання щодо вашого OutOfMemoryException, вказавши слід стека та деталі. Ви, ймовірно, можете обійти його, налаштувавши -Xmxдля JVM.
Роб Грушка

.lang.OutOfMemoryError: PermGen space 16 березня 2011 9:52:52 com.ebay.kernel.logger.Logger log SEVERE: Помилка в потоці Perfmon java.lang.OutOfMemoryError: PermGen space Exception у потоці "CalClient: NotifyThreadDestro "java.lang.OutOfMemor yError: PermGen space Виняток у потоці" MetricsSnapshotScheduler "java.lang.OutOfMemoryError: PermG en space 16 березня 2011 9:53:36 AM com.ebay.kernel.logger.Logger log SEVERE: Помилка в Perfmon тема java.lang.OutOfMemoryError: PermGen space Виняток у потоці "CalClient: NotifyThreadDestroyThread-0" java.lang.OutOfMemor yError: PermGen space
iamjustcoder

1
@ user661660 - Можливо, деякі відповіді на це питання можуть вам допомогти.
Роб Грушка

Відповіді:


220

У вас є пара варіантів:

  1. Вийміть ROOT/каталог із скриньки з tomcat та перейменуйте свій військовий файл до ROOT.warйого розгортання.

  2. Розгортання війни (з вашого прикладу) war_name.warі налаштувати кореневої контекст в conf/server.xmlвикористовувати військовий файл:

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>

Перший - простіше, але трохи більше дивовижно. Другий - це, мабуть, більш елегантний спосіб зробити це.


3
Якщо Tomcat налаштований на автовідклад, вам не доведеться турбуватися про варіант 2.
Buhake Sindi

4
@Dejel - Нічого технічно. Я сам це зробив зовсім небагато; це робить роботу. Відчуває себе трохи непростим, що вам доведеться перейменовувати свій власний файл війни на щось, що є якоюсь деталлю реалізації контейнера.
Роб Грушка

4
За вказаною вами посиланням НЕ рекомендується розміщувати <Context> елементи безпосередньо у файлі server.xml
Nilesh

6
Ця відповідь рекомендує методику, яка прямо вказана в документації як погану форму. Правильна методика детально описана тут: stackoverflow.com/questions/41263245/…
Крістофер Шульц

5
+1 за те, що називає це ROOT.war. Згідно з документами Tomcat, вам потрібно бути дуже обережним, вказуючи "шлях", щоб уникнути подвійного розгортання: "Навіть коли статично визначає контекст у server.xml, цей атрибут не повинен встановлюватися, якщо жоден docBase не розташований під хостом appBase або і те, і розгортанняOnStartup та autoDeploy є неправдивими. Якщо цього правила не дотримуватися, можливе подвійне розгортання. " - від tomcat.apache.org/tomcat-8.0-doc/config/context.html
Ентоні Хейвард

31

on tomcat v.7 (установка ванілі)

у свій conf / server.xml додайте наступний біт наприкінці файлу, безпосередньо перед </Host>закриваючим тегом:

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Зауважте, що атрибут docBase . Це важливий біт. Ви або переконайтесь, що ви розгорнули ім'я програми перед тим, як змінити свій кореневий веб-додаток, або просто скопіюйте розпакований веб-додаток webapp (ім'я програми) у папку webapps свого Tomcat Запуск, відвідайте root, перегляньте своє ім’я програми!


13

У tomcat 7 із цими змінами я можу отримати доступ до myAPP в / та ROOT у / ROOT

<Context path="" docBase="myAPP">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Додайте вище до <Host>розділу в server.xml


3
Контекстний шлях повинен бути або порожнім рядком, або починатись з '/'. Шлях [ROOT] не відповідає цим критеріям і був змінений на [/ ROOT]
Микита Босик

11

Я знаю, що моя відповідь є свого роду перекриттям з деякою іншою відповіддю, але це повне рішення, яке має деякі переваги. Це працює на Tomcat 8:

  1. Основна програма подається з кореня
  2. Розгортання файлів війни через веб-інтерфейс підтримується.
  3. Основна програма буде працювати на порту 80, тоді як лише адміністратори мають доступ до папок управління (я розумію, що * nix-системи потребують надрукувача для прив’язки до 80, але для Windows це не проблема).

Це означає, що вам доведеться перезапустити tomcat лише один раз, і після оновлених файлів війни можна без проблем розгорнути.

Крок 1. У файлі server.xml знайдіть запис коннектора та замініть його на:

<Connector 
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

Крок 2. Визначте контексти в <Host ...>тезі:

<Context path="/" docBase="CAS">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Зауважте, що я звертався до всіх програм у папці webapp. Перший ефективно перемикає корінь і основний додаток з позиції. ROOT увімкнено, http://example.com/ROOTі основне додаток увімкнено http://example.com/. Webapps, захищені паролем, вимагають privileged="true"атрибута.

Коли ви розгортаєте файл CAS.war, який збігається з коренем ( <Context path="/" docBase="CAS">вам доведеться перезавантажити його на панелі адміністратора, оскільки він не оновлюється розгортанням.

Не включайте <Context path="/CAS" docBase="CAS">в свої контексти, оскільки це відключає можливість менеджера розгортати файли війни. Це означає, що ви можете отримати доступ до програми двома способами: http://example.com/іhttp://example.com/APP/

Крок 3. Щоб запобігти небажаному доступу до папки root та менеджера, додайте valveдо таких тегів контексту, як цей:

<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        addConnectorPort="true"
        allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>

Це по суті обмежує доступ до папки веб-додатків адміністратора людям з мого власного домену (фальшива IP-адреса) та localhost, коли вони використовують порт 8080 за замовчуванням, і підтримує можливість динамічно розгортати файли війни через веб-інтерфейс.

Якщо ви хочете використовувати це для кількох додатків, які використовують різні IP-адреси, ви можете додати IP-адресу до роз'єму ( address="143.21.2.1").

Якщо ви хочете запустити кілька веб - додатків від кореня, ви можете дублювати Службова (використовувати інше ім'я для другого) і змінити docbase з <Context path="/" docBase="CAS">до, наприклад <Context path="/" docBase="ICR">.


6

Найшвидший спосіб.

  1. Переконайтеся, що у вас немає розгорнутого додатка ROOT, якщо його не буде розміщено

  2. Перейменуйте свою війну на ROOT.war, розгорніть це все, не потрібно змінювати конфігурацію


6

Видалити $CATALINA_HOME/webapps/ROOT. Оновіть $CATALINA_HOME/conf/server.xml, переконайтеся, що елемент хоста виглядає як наступний текст:

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="" docBase="myApp"></Context>

Він працює з Tomcat 8. Для autoDeploy і opensOnStartup потрібно встановити значення false, щоб запобігти розгортанню tomcat myAppдвічі.


Я спробував завантажити WAR, і це не вдалося. Це лише для вибухнутих ВІЙНІВ?
logixplayer

Я спробував завантажити WAR, і це не спрацювало на прикладі @ Jingguo. Це лише для вибухнутих ВІЙНІВ? EDIT: Це дійсно ТІЛЬКИ для вибухнутих воєн. Чому це? Чи можу я не просто завантажити ВІЙНУ та уникнути цього подвійного кроку? Як я можу змусити його працювати?
логіксплаєр

@logixplayer. Моє рішення працює з WAR. Я його не вибухнув. Я забув згадати, що $CATALINA_HOME/webapps/ROOTпотрібно зняти. Видаліть його та спробуйте ще раз.
Jingguo Yao

Я видалив КОРИНО, як ви сказали. Я розгорнув свою ВІЙНА (не вибухнув каталог). Я помітив, що створений новий каталог ROOT з моїми речами, наприклад WEB-INF. Сайт працює. Чи так це має працювати?
logixplayer

Я також спробував цей метод, і все, коли я намагаюся відкрити сторінку в браузері, він просто чекає сервера. У catalina.out сказано лише, що сервер був запущений.
Асу

1

Додавши до солі @Rob Hruska, ця настройка в сервері.xml всередині розділу працює:

<Context path="" docBase="gateway" reloadable="true" override="true"> </Context>

Примітка: override = "true" може знадобитися в деяких випадках.


Ви не згадали, куди це поставити. Відповідь @Sudheer Palyam була корисною.
Каннан Рамаморті

1

Додавши до відповіді @Dima , якщо ви використовуєте mavenдля створення свого пакету, ви можете вказати йому, щоб встановити ім'я файлу WAR ROOTу pom.xml:

<build>
    <finalName>ROOT</finalName>
</build>

За замовчуванням tomcatбуде розгортати ROOT.warwebapp в кореневий контекст ( /).


0

URL-адреса відкритого менеджера tomact: - http: // localhost: 8080 / manager / html /,
то в додатках ви бачите програму, яка має шлях як "/",
просто розгорнути це. Перейменуйте файл війни у ​​вашій програмі як ROOT.war і просто поставте на шляху: - запустіть свій Tomcat Не потрібно додаткової конфігурації. Тепер ми можемо побачити домашню сторінку програми або налаштований URL за адресою http: // localhost: 8080
введіть тут опис зображення
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps


-1

На моєму сервері я використовую це, і root autodeploy працює чудово:

   <Host name="mysite" autoDeploy="true" appBase="webapps" unpackWARs="true" deployOnStartup="true">
        <Alias>www.mysite.com</Alias>
        <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mysite_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
        <Context path="/mysite" docBase="mysite" reloadable="true"/>
    </Host>

Це не буде розгорнуто в / але до / mysite
tine2k
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.