Tomcat: установка пользовательского URL-адреса сервлета (сопоставление сервлетов или развертывание .war)

Я надеюсь, что кто-нибудь сможет мне помочь с этим. Я запускаю фиктивный сервлет на сервере Tomcat. В основном это работает, сайт доступен после запуска. Я хотел бы указать собственный URL, например localhost:8080/mydesiredname

Я развертываю свой сервлет как файл .war. Оказалось, что имя .war определяет имя URL-адреса, по которому доступен Tomcat. Если он называется abc, мой сервлет будет работать под localhost:8080/abc.

Хотя я не недоволен этим решением, я задаюсь вопросом, чем хорош servlet-mapping в <Tomcathome>/conf/web.xml. Я попытался переопределить и / или добавить дополнительное имя URL-адреса, под которым мой сервлет должен быть доступен, но это, похоже, не работает. Мой код в web.xml выглядит так:

<servlet>
  <servlet-name>ABC</servlet-name>
  <servlet-class>myservlet.TheServlet</servlet-class>
</servlet>

    <servlet-mapping>
  <servlet-name>ABC</servlet-name>
  <url-pattern>/otherUrl</url-pattern>
</servlet-mapping> 

Поэтому я ожидал бы, что мой сервлет доступен только для /otherUrl или дополнительно к URL-адресу, определяемому именем .war. Я, наверное, что-то упускаю. Могут ли некоторые прояснить это для меня?

Не модифицируйте <Tomcathome>conf/web.xml. Вместо этого вам следует редактировать файл WEB-INF/web.xml в своем собственном приложении.

Christopher Schultz 29.06.2018 18:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
1 589
1

Ответы 1

Здесь необходимо понять две концепции: контекстный путь (где можно найти приложение) и путь к сервлету.

контекстный путь всегда относительно имени хоста (э-э, достаточно близко). Итак, если у вас есть контекст под названием mydesiredname, вы можете найти его на https://example.com/mydesiredname.

Все URL-адреса в WEB-INF/web.xml приложения зависят от контекста. Это означает, что если вы укажете /ABC для <url-mapping> вашего сервлета (или путь к сервлету), то вы достигнете этого сервлета, запросив https://example.com/mydesiredname/ABC.

В веб-приложении нет способа ответить на URL-адрес, который находится «вне» вашего контекстный путь, потому что контейнер не будет отправлять запросы к https://example.com/ABC веб-приложению с контекстный путь/mydesiredname.

Если вы хотите получить доступ к сервлету с помощью https://example.com/ABC, то вам нужно развернуть свое веб-приложение в так называемом «корневом» контексте. В Tomcat вы делаете это, называя свой WAR-файл ROOT.war, а контекстный путь становится "" (пустая строка).

Другие вопросы по теме