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

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

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

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

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

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

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

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

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

Ответ 1

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

Добавьте файл с именем 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. Чтобы исправить это, вы можете поместить свое приложение OUTSIDE <catalina_home>/webapps и использовать относительный или абсолютный путь в теге ROOT.xml docBase. Что-то вроде этого;

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

И тогда все должно быть ОК!

Ответ 2

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

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

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

</Context>

перейдите в файл Tomcat server.xml и укажите путь пустым

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

в conf/catalina/webappsfoldername и развернуть файл войны как ROOT.war внутри 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 такой же, как приложение2, которое вы можете после входа в систему по сеансу на стороне сервера, автоматически может войти в приложение2?! Таким образом, вы должны держать сеанс пользователей в кеше на стороне клиента, а не с jsessionid! мы можем изменить имя двигателя с localhost, чтобы решить его. но пусть говорить с tomcat нужно больше времени, чем играть с другими кошками!

Ответ 7

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

перейдите в файл Tomcat server.xml и укажите путь пустым

Ответ 8

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.

Ответ 9

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

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

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

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

Ответ 10

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

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

то есть:.

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

Ответ 11

В Tomcat 8.X, в домашнем каталоге tomcat/conf/folder в server.xml, вы можете добавить <Context> тег <Host> как показано ниже. Но вы должны перезагрузить сервер, чтобы вступили в силу

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

     <Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
  </Host>

ИЛИ, если вы используете Tomcat 7.X, вы можете добавить файл context.xml в папку WEB-INF вашего проекта. Содержимое файла, который я использовал, показан ниже. и это работало нормально для меня. вам не нужно перезагружать сервер в этом случае.

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />

Ответ 12

Самое простое и гибкое решение приведено ниже: Inside $ {Tomcat_home}/config/server.xml

Измените autoDeploy = "false" deployOnStartup = "false" в элементе Host, как показано ниже. Это необходимо.

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">

Добавьте строку ниже под элементом Host.

<Context path="" docBase="ServletInAction.war"  reloadable="true">
            <WatchedResource>WEB-INF/web.xml</WatchedResource>
        </Context>

С помощью описанного выше подхода мы можем добавить столько приложений под webapps с разными именами контекстных путей.

Ответ 13

Следующий трюк работал у меня.

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

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

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

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