Отображение сервлета с использованием web.xml - PullRequest
29 голосов
/ 20 ноября 2011

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

<web-app>
    <servlet>
         <servlet-name>Servlet1</servlet-name>
         <servlet-path>foo.Servlet</servlet-path>
    </servlet>
    <servlet-mapping>
         <servlet-name>Servlet1</servlet-name>
         <url-pattern>/enroll</url-pattern>
    </servlet-mapping>
</web-app>

Теперь, насколько я понимаю, всякий раз, когда поступает запрос для шаблона URL / "enroll", контейнер сервлета будет сопоставлять имя сервлета с шаблоном URL и будет пытаться найти соответствующий путь сервлета и будет переслать управление в foo.Servlet. так что в основном было бы два прохода, один для нахождения имени сервлета, а другой для пути к сервлету, мой вопрос: предназначен ли контейнер для работы следующим образом

<web-app>
        <servlet>
             <servlet-name>foo.Servlet</servlet-path>
             <url-pattern>/enroll</url-pattern>
        </servlet>
</web-app>

в чем был бы недостаток, если бы мы использовали следующий подход. Разве это не будет более эффективным, и время отклика будет быстрым.

1 Ответ

48 голосов
/ 20 ноября 2011

Позволяет сервлетам иметь несколько отображений сервлетов:

<servlet>
    <servlet-name>Servlet1</servlet-name>
    <servlet-path>foo.Servlet</servlet-path>
</servlet>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/enroll</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/pay</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/bill</url-pattern>
</servlet-mapping>

Позволяет отображать фильтры на конкретный сервлет:

<filter-mapping>
    <filter-name>Filter1</filter-name>
    <servlet-name>Servlet1</servlet-name>
</filter-mapping>

Ваше предложение не поддержит ни одного из них. Обратите внимание, что web.xml читается и анализируется только один раз при запуске приложения, а не при каждом HTTP-запросе, как вам кажется.

Начиная с Servlet 3.0, есть аннотация @WebServlet, которая минимизирует этот шаблон:

@WebServlet("/enroll")
public class Servlet1 extends HttpServlet {

Смотри также:

...