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