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

Много url-шаблонов для того же сервлета

Мне нужно сопоставить тот же сервлет на двух разных 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 без какой-либо ошибки, но работает только второй шаблон, в то время как первый игнорируется.

Googling Я обнаружил, что правильный путь для tomcat:

<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? Какой синтаксис принимают другие контейнеры?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

  • полная последовательность символов
  • /*
  • *. ext (звездочка означает что-либо)

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

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