Давайте посмотрим, как это делают существующие фреймворки:
Это были самые популярные фреймворки.Их больше, но большинство из них используют сервлет.
Большинство, если не все сервлеты, должны отображаться в шаблоне URL суффикса, например, *.jsf
(JSF), *.html
(Spring), *.do
(Struts) и т. Д. Это позволяетРазработчик легко игнорирует ресурсы, которые не представляют интереса.Таким образом, преимущество фильтра в том, что он может это сделать, исчезает.Только Wicket имел обыкновение отображаться на дополнительный путь /app/*
, а изменение сервлета на Filter в Wicket 1.3 было сделано с единственным аргументом, что вы сможете отобразить его только на /*
.Это, однако, добавляет дополнительный шаблон конфигурации, чтобы иметь возможность игнорировать статические ресурсы.Лично я не понимаю, почему они не просто использовали отображение суффиксов.
Все веб-фреймворки основаны на HTTP-запросах.В сервлете он уже доступен прямо в стандартных методах (часто используется только метод service()
).В фильтре вам нужно будет привести его обратно (хотя это не обязательно дорого).
Кроме того, Sun / Oracle проводит четкое разделение между фильтрами и сервлетами по следующим причинам: когда вы хотите фильтр запросов / ответов на определенных условиях, используйте фильтр.Если вы хотите контролировать запросов / ответов и / или создавать ответы, используйте сервлет.
См. Также: