Сопоставление сервлетов с помощью web.XML

у меня есть путаница в отношении структуры сети.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-pattern "/enroll", контейнер сервлета будет соответствовать имени сервлета с url-pattern и попытается найти соответствующий путь сервлета и передаст элемент управления foo.Сервлет. таким образом, в основном будет два прохода один для поиска имени сервлета и другой для пути сервлета, мой вопрос в том, предназначен ли контейнер для работы следующим образом

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

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

1 ответов


Это позволяет сервлеты несколько сервлетов:

<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-запросе, как вы, кажется, думаете.

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

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

Читайте также: