Сопоставление сервлетов с помощью 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 {