Как установить контекстный путь веб-приложения в Tomcat 7.0 - PullRequest
155 голосов
/ 02 сентября 2011

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

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

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

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

Итак, я создал /META-INF/context.xml со следующим кодом,

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

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

Любые указатели полезны.

Ответы [ 13 ]

221 голосов
/ 10 октября 2011

Вы можете сделать следующее:

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

Этот файл ROOT.xml переопределяет параметры по умолчанию для корневого контекста установки tomcat для этого механизма и хоста (Catalina и localhost).

Введите в файл ROOT.xml следующее:

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

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

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

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

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

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

13 голосов
/ 26 марта 2013

Здесь следует единственные решения, которые работали для меня. Добавьте это к узлу хоста в файле conf / server.xml

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

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

</Context>

перейдите в файл Tomcat server.xml и оставьте пустой путь

4 голосов
/ 05 марта 2017

В 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"/>
3 голосов
/ 20 июня 2013

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

<Host name="my.host.name" >
   <Context path="" docBase="/path/to/myapp.war"/>
</Host>
2 голосов
/ 18 мая 2014

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

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

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

1 голос
/ 04 июля 2018

Для меня оба ответа сработали.

  1. Добавление файла с именем ROOT.xml в / conf / Catalina / localhost /
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
Добавление записи в server.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 на хосте.

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

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

1 голос
/ 03 апреля 2018

Tomcat 8: После многих поисков это только рабочий код: в server.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-приложением, созданным NetBeans, я установил контекстный путь в конфигурации проекта, ничего другого, даже я поместил apple.war в папку webapps.

1 голос
/ 11 января 2017

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

перейдите в файл Tomcat server.xml и оставьте пустой путь

1 голос
/ 16 января 2015

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

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

т.е:.

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">
1 голос
/ 21 марта 2014

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

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

, в conf / catalina / webappsfoldername и развернуть файл war как ROOT.war внутри webappsfoldername, а также указать хост, например * 1004.*

 <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 для его решения.но скажем, чтобы играть с котом, нужно больше времени, чем с другими кошками!

...