Как настроить контекстный путь веб-приложения в Tomcat 7.0

Я знаю, что могу переименовать свой webapp (или это файл WAR) в ROOT но это ужасный способ сделать это, ИМХО. Теперь я проверил Tomcat doc, и он говорит

не рекомендуется размещать элементы непосредственно в сервер.xml-файл

поэтому я попытался сделать это другим методом, который он предложил.

отдельные элементы контекста могут быть явно определены: в отдельный файл в /META-INF/context.XML внутри файлов приложения.

Я создал /META-INF/context.xml на следующий код

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>

но после развертывания, когда я перезапустил сервер, он все еще не смог загрузить контекст в "/", он все еще загрузил его с "/<WEB_APP_NAME>"

какие-нибудь советы полезные.

11 ответов


что вы можете сделать, это следующее:

Добавить файл с названием ROOT.xml на <catalina_home>/conf/Catalina/localhost/

этот корень.xml переопределит параметры по умолчанию для корневого контекста установки tomcat для этого ядра и Хоста (Catalina и localhost).

введите следующее в корень.xml-файл;

<Context 
  docBase="<yourApp>" 
  path="" 
  reloadable="true" 
/>

здесь <yourApp> это имя, ну, ваше приложение.. :)

и там вы идете, ваше приложение теперь приложение по умолчанию и будет показать на http://localhost:8080

однако есть один побочный эффект; ваше приложение будет загружено дважды. Один раз localhost:8080 и один раз localhost:8080/yourApp. Чтобы исправить это, вы можете поместить свое приложение вне <catalina_home>/webapps и использовать относительный или абсолютный путь в корне.тег docBase xml. Что-то вроде этого;

<Context 
  docBase="/opt/mywebapps/<yourApp>" 
  path="" 
  reloadable="true" 
/>

и тогда все должно быть в порядке!


ниже только решения, которые работали для меня. Добавьте это к узлу Хоста в conf / server.в XML

<Context path="" docBase="yourAppContextName">

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

зайти на сервер Tomcat.xml-файл и установить путь пустой


этот код работал для меня, используя виртуальные хосты

<Host name="my.host.name" >
   <Context path="" docBase="/path/to/myapp.war"/>
</Host>

в Tomcat 9.0 мне нужно только изменить следующее в server.xml

<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

to

<Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

быстрый и может быть лучшим решением, чтобы иметь ниже содержание в <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

<Context 
  docBase="/your_webapp_location_directory" 
  path="" 
  reloadable="true" 
/>

и ваш webapp будет доступен по адресу http://<host>:<port>/


я столкнулся с этой проблемой в течение одного месяца, помещая контекстный тег внутри сервера.xml небезопасно это влияет на развертывание элементов контекста для всех других хостов ,для больших приложений это ошибки подключения также не очень хорошая изоляция, например, вы можете получить доступ к другим сайтам по имени папки domain2.com/domain1Folder !! также соединения сеанса базы данных загружаются дважды ! другой способ-пустить корни.xml-файл, имеющий контекстный тег с полным путем, например:

 <Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />

в conf / catalina / webappsfoldername и развернуть файл войны как ROOT.война внутри webappsfoldername а также указать хост такие

 <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >

        <Logger className="org.apache.catalina.logger.FileLogger"
               directory="logs"  prefix="localhost_log." suffix=".txt"
          timestamp="true"/>
</Host>

в этом подходе также для приложений одного типа пользовательские сеансы не имеют хорошей изоляции ! вы можете внутри app1, если app1 так же, как app2, вы можете после входа на сервер автоматически войти в app2?! Таким образом, вы должны сохранить сеанс пользователей в кэше на стороне клиента, а не с jsessionid ! мы можем изменить имя двигателя с localhost, чтобы решить его. но, скажем, играть с Tomcat нужно больше времени, чем играть с другими кошками!


<Context docBase="yourAppName" path="" reloadable="true">

зайти на сервер Tomcat.xml-файл и установить путь пустой


Tomcat 8 : После многих поисков, это только рабочий код: в серверах.в XML

<!-- Set /apple as default path -->
    <Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
     <Context path="" docBase="apple">
         <!-- Default set of monitored resources -->
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
     </Context>
    </Host>

перезапустите Tomcat, убедитесь, что при доступе к 127.0.0.1:8080 он отобразит содержимое в 127.0.0.1: 8080/apple

мой проект был Java Web application witch, созданный netbeans, я установил контекстный путь в конфигурации проекта, ничего другого, даже я поставил apple.война в основной папке.


Не рекомендуется обновлять конфигурацию сервера, например server.xml или ROOT.XML.

вы можете поместить контекст.xml-файл конфигурации в каталоге META-INF веб-приложения с включенным параметром пути контекста. Это переопределит настройку сервера по умолчанию?

т. е.:

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">

для меня оба ответа работал.

  1. добавление файла с именем ROOT.XML в /конф/Каталина/localhost в/
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
  1. добавление записи в сервер.в XML
<Service name="Catalina2">
    <Connector port="8070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8743" />
    <Engine name="Catalina2" defaultHost="localhost">
        <Host name="localhost"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="/tmp/wars/hpong"  reloadable="true">
                <WatchedResource>WEB-INF/web.xml</WatchedResource>
            </Context>
      </Host>
    </Engine>
</Service>

Примечание: когда вы объявляете docBase в контексте, игнорируйте appBase на хосте.

  1. однако я предпочел преобразовать свое военное имя как ROOT.war и поместите его под webapps. Итак, теперь непревзойденные запросы url от других войны (contextpaths) приземлятся в эту войну. Это лучший способ обработки корневого ( "/ * * " ) пути контекста.

второй вариант (двойной) загрузка войн из папки Webapps, а также. Также ему нужна только несжатая папка war, которая является головной болью.


приведенный ниже трюк сработал для меня.

1) прокомментируйте / удалите приведенную ниже конфигурацию с сервера.xml-файл (внутри папки conf) tomcat.

2) Удалите существующую корневую папку (если таковая имеется), находящуюся в папке tomcat webapps. И переименуйте свою войну (e.g: тест.war) файл для ROOT.война.

помните, что при переименовании файла war в ROOT.война "корень" должна быть в шапках.

ограничение: вы можете развернуть только одно приложение внутри одного tomcat пример.