Что произойдет, если у меня есть два отображения сервлета в web.xml, которые соответствуют запросу?

Что произойдет, если у меня есть два сопоставления сервлета в web.xml, которые соответствуют запросу? Выбирает ли он наиболее конкретные?

Например, если у меня есть следующий xml, и запрос приходит.../что-то, пока он переходит в somethingservlet или all_else servlet?

   <servlet-mapping>
      <servlet-name>something</servlet-name>
      <url-pattern>/something</url-pattern>
  </servlet-mapping>    

  <servlet-mapping>
    <servlet-name>everything_else</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

Ответ 1

Будет использовано первое успешное совпадение.

Существуют определенные правила сопоставления, установленные контейнером сервлета. Ознакомьтесь с главой спецификации сервлетов 2.5 SRV.11:

Путь, используемый для сопоставления сервлету, - это URL-адрес запроса из запроса     объект минус путь контекста и параметры пути. Отображение пути URL     правила ниже используются по порядку. Первый успешный матч используется без дальнейших     совпадения:

  • Контейнер попытается найти точное соответствие пути запроса к пути сервлета. Успешный матч выбирает сервлета.
  • Контейнер будет рекурсивно пытаться сопоставить самый длинный префикс пути. Готово путем постепенного перехода по дереву путей по каталогу за один раз, используя символ/как разделитель путей. Наибольшее совпадение определяет выбранный сервлет.
  • Если последний сегмент пути URL содержит расширение (например .jsp), сервлет контейнер попытается сопоставить сервлет, обрабатывающий запросы для расширения. Расширение определяется как часть последнего сегмента после последнего. характер.
  • Если ни одно из предыдущих трех правил не приводит к совпадению сервлета, контейнер будет попытайтесь обслуживать контент, соответствующий запрашиваемому ресурсу. Если "по умолчанию" сервлет определен для приложения, он будет использоваться.