много шаблонов URL для одного и того же сервлета - PullRequest
33 голосов
/ 25 января 2012

Мне нужно отобразить один и тот же сервлет на два разных URL. Я использовал netbeans 7.0.1 для управления всем моим проектом, поэтому я использовал его дружественный интерфейс для изменения файла web.xml. То, что создали NetBeans это:

<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>/url</url-pattern>
</servlet-mapping>

Это читает tomcat 5.5 без каких-либо ошибок, но работает только второй шаблон, а первый игнорируется.

Погуглив, я обнаружил, что правильный путь для кота это:

<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>/url</url-pattern>
</servlet-mapping>

Итак, мои вопросы: это ошибка в Tomcat? Какой синтаксис принимают другие контейнеры?

Ответы [ 2 ]

43 голосов
/ 25 января 2012

Я думаю, это больше связано со спецификацией сервлета, которую использует контейнер / netbeans, а не с контейнером. Кажется, ваши сетевые компоненты используют спецификацию 2.5 для построения отображения сервлета, и поэтому вы получаете

<servlet-mapping>
   <servlet-name>fred</servlet-name>
   <url-pattern>*.jsp</url-pattern>
   <url-pattern>/url</url-pattern>
</servlet-mapping>

Подробнее об этом здесь . Это говорит

Предыдущие версии схемы сервлета допускают только один шаблон URL в сопоставление фильтров. Для фильтров, сопоставленных с несколькими URL, это приводит к ненужным повторение целых пунктов отображения.

1 голос
/ 14 сентября 2016

Контейнер Tomcat будет поддерживать 3 шаблона URL:

  1. полная последовательность символов
  2. /*
  3. *. ext (звездочка означает что угодно)

/* рекомендуется только для одного отдельного фреймворка

, если вы используете несколько фреймворков, тогда рекомендуется .*

...