Я намагаюся змінити програму веб-сервера Tomcat 6 за замовчуванням на іншу програму, ніж "ROOT" (всередині папки webapps). Який найкращий спосіб зробити це?
Я намагаюся змінити програму веб-сервера Tomcat 6 за замовчуванням на іншу програму, ніж "ROOT" (всередині папки webapps). Який найкращий спосіб зробити це?
Відповіді:
Існує три методи:
Спочатку вимкніть свій 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
. Докладніше див. Документацію для контейнера контексту .
$CATALINA_BASE/conf/[enginename]/[hostname]
каталозі (що для моєї досить базової настройки є $CATALINA_HOME/conf/Catalina/localhost
). Перегляньте документацію по контейнеру контексту .
sudo systemctl start tomcatx
де x
стоїть номер версії
Додавання <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 із цими змінами я можу отримати доступ myAPP
у /
та ROOT
в/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Додайте вище до <Host>
розділу в server.xml
/ROOT
і намагаюся увійти на сторінку менеджера за допомогою правильних облікових даних, мені заборонено доступ. Чи знаєте ви, як це виправити?
Додаток ROOT за замовчуванням зазвичай - менеджер Tomcat - який може бути корисним, тому я відчував, що хотів би його тримати.
Тож те, як я зробив свою програму ROOT і зберігав TCmgr, був таким.
перейменовано ROOT на щось інше
mv ROOT TCmgr
потім створили символічне посилання, за яким ROOT вказує на додаток, на який я хочу зробити за замовчуванням.
ln -s <your app> ROOT
працював на мене і здавався найлегшим підходом.
Згідно з документами Apache Tomcat, ви можете змінити додаток, створивши файл ROOT.xml. Дивіться це для отримання додаткової інформації:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"Веб-додаток за замовчуванням може бути визначений за допомогою файлу під назвою ROOT.xml."
Зробити це можна злегка злому, виконавши:
Альтернативним рішенням було б створити сервлет, який надсилає перенаправлення на потрібний веб-сервер за замовчуванням, і відобразить цей сервлет для всіх 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 за замовчуванням, не змінюючи джерело.
Я не впевнений, чи не матиме це негативні наслідки, але я протестував це, і, здається, це працює.
конфігурація context.xml не працювала для мене. Tomcat 6.0.29 скаржиться на те, що docBase знаходиться в додатку: ... Для Tomcat 5 це фактично спрацювало.
Отже, одне рішення - помістити додаток у папку ROOT.
Ще одне дуже просте рішення - поставити index.jsp до ROOT, який перенаправляє мою програму так: response.sendRedirect ("/ MyApplicationXy");
З найкращими побажаннями, січень
У мене виникла проблема під час налаштування Tomcat ' server.xml
та доданого елемента Context. Він просто не хоче використовувати мою конфігурацію:
http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
Якщо ви працюєте в Unix-like
системі:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Зроблено.
Працює для мене.
Кінцевий спосіб змінити кореневий додаток tomcat. Тестували на Tomcat 7 і 8.
Перехід до каталогу веб-сайтів tomcat:
Приклад на моїй машині: ~/stack/apache-tomcat/webapps
Перейменуйте, замініть або видаліть папку ROOT. Моя порада - перейменувати або створити копію для резервного копіювання. Приклад перейменування ROOT у RENAMED_ROOT:
mv ROOT RENAMED_ROOT
Перемістіть файл війни зі своїм додатком до каталогу tomcat webapps (його каталог, де була стара папка ROOT, на моїй машині: ~ / stack / apache-tomcat / webapps)
Файл війни повинен мати ім'я ROOT.war . Перейменуйте заявку, якщо це потрібно: yourApplicationName.war -> ROOT.war
Я перегляну свої документи; існує спосіб визначення конфігурації для зміни шляху кореневого веб-додатку від ROOT (або ROOT.war), але, схоже, він змінився між Tomcat 5 і 6.
Знайшов це:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
Отже, здається, що змінити кореневий шлях (у ROOT.xml) можливо, але трохи зламано - потрібно перемістити свою ВІЙНО за межі каталогу автоматичного розгортання. Майте на увазі, якщо я запитаю, чому просто перейменування вашого файлу на ROOT.war не підходить для вирішення?
Не дуже вдале рішення, але одним із способів є перенаправлення з додатка 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
У Tomcat 7 (під сервером Windows) я нічого не додавав і не редагував до жодного файлу конфігурації. Я просто перейменував папку ROOT в щось інше і перейменував свою папку програм на ROOT, і вона спрацювала нормально.