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


Я знаю, что могу переименовать свое веб-приложение (или это файл 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 144

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"/>

до

<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" 
/>

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

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

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

in conf / catalina / webappsfoldername и развернуть файл войны как корень.война внутри 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.война в основной папке.

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

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

т. е.:

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

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

  1. добавление файла с именем ROOT.xml in /conf / Catalina / 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, а также. Также ему нужна только несжатая папка войны, которая является головной болью.

ниже трюк работал для меня.

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

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

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

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