Подтвердить что ты не робот

Разделение названия военной заявки на имя военного названия

В настоящее время, если я развертываю военный файл в tomcat с именем say myapp.war, я могу получить доступ к его URL-адресу http://localhost/myapp/MyServlet.

Однако я хочу развернуть войну с номером версии в имени военного файла и по-прежнему иметь тот же url. Например, я хочу развернуть myapp-1.1.0.war и по-прежнему иметь url http://localhost/myapp/MyServlet

Конечно, мне нужно постоянно обновлять войну, и номер версии будет меняться, поэтому я не могу жестко указать военное имя файла где угодно. Есть ли какая-либо настройка в web.xml, которую я могу использовать для сохранения одного и того же URL-адреса для приложения независимо от имени военного файла?

4b9b3361

Ответ 1

Решение состоит в том, чтобы прекратить использование функции автоматического развертывания Tomcat, которая использует ярлык настройки "контекстного имени" (часть /myapp URL-адреса) для части имени WAR файла до ".war".

Вместо этого извлеките содержимое WAR в файловую систему самостоятельно и настройте файл XML в TOMCAT_HOME/conf/[enginename]/[hostname]/[contextname].xml, который указывает путь нужного контекста (например, /myapp) на местоположение приложения на диске (например, /opt/webapps/myapp-1.1.0/).

Справочные документы Tomcat дают хорошее объяснение того, как Tomcat автоматически развертывает приложения, и как вы можете настроить настраиваемую логику для сопоставления пути контекста к расположению файла приложения (есть несколько альтернативных способов установить это, кроме того, что я предлагаю выше).

Ответ 2

Для этого вы можете использовать YOUR_WAR/META-INF/context.xml. Вот пример:

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

Ответ 3

При использовании Maven вы можете управлять своим путем развертывания, выполняя следующие действия:

Tomcat conf/tomcat-users.xml:

<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>

  <user username="root" password="root" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>

</tomcat-users>

~/.m2/settings.xml:

...
<server>
  <id>tomcat</id>
  <username>root</username>
  <password>root</password>
</server>
...

pom.xml:

...
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>myapp</artifactId>
  <version>1.1.0</version>
  <packaging>war</packaging>
...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>tomcat-maven-plugin</artifactId>
        <configuration>
          <!-- neglect /html below Tomcat7: -->
          <url>http://server:8080/manager/html</url>
          <!-- Refer to the server settings in your ~/.m2/settings.xml -->
          <server>tomcat</server>
          <path>/myWebApp</path>
        </configuration>
      </plugin>
      ....
    </plugins>
  </build>
...

Начните свой tomcat первым Затем создайте и разверните приложение.

mvn clean install tomcat:deploy

.. он будет доступен под http://server:8080/myWebApp

Ответ 4

Для этого в файле web.xml нет настроек. Я не верю, что это можно установить внутри файла войны в кросс-контейнерном режиме - в спецификации вообще не упоминается об этом, поэтому каждый контейнер делает это по-другому. jboss-web.xml, sun-web.xml, context.xml и т.д.

Ответ 5

Я столкнулся с той же проблемой, и действительно, как упоминалось @matt, Tomcat справочные документы дают хорошее объяснение того, как Tomcat автоматически развертывает приложения и как настроить настраиваемую логику для сопоставления пути контекста к расположению файла приложения.

В моем случае я использовал этот совет (в объяснении пути):

Даже при статическом определении Контекста в server.xml этот атрибут (/path) должен быть установлен не, если только docBase не находится под Host appBase или и deployOnStartup, и autoDeploy являются ложными. Если это правило не соблюдается, возможно, произойдет двойное развертывание.

поэтому в моем случае я переключил оба параметра deployOnStartup и autoDeploy на false, поэтому моя WAR (egaWAR) не была автоматически взорвана в директорию 'a' под webapps, а вместо этого в каталог 'b', к этим настройкам:

<Host name="localhost"  appBase="webapps"
            autoDeploy="false" deployOnStartup="false" 
            unpackWARs="true" deployIgnore="${ignore.context}">

   <Context docBase="a" path="/b" />

</Host>

Ответ 6

Я предпочитаю использовать символы ## для обозначения версии *.war файлов в tomcat.
Например:
myapp.war → URL: http://localhost:8080/myapp/MyServlet
myapp##1.1.0 → URL: http://localhost:8080/myapp/MyServlet (все тот же, потому что все символы после " ##" игнорируются tomcat)

Ответ 7

У меня есть файл войны, созданный maven. Военное имя файла содержит метку времени - я использую ## для доступа к метке времени. При создании нового военного файла он не занимает отметки времени. Часть моего pom.xml:

<build>
    <finalName>myapp##${maven.build.timestamp}</finalName>
</build>