<url-pattern>/*</url-pattern>
/*
На сервлете перекрывает все другие сервлеты, включая все сервлеты , предусмотренные servletcontainer , такие как сервлет по умолчанию и сервлет JSP. Какую бы просьбу вы не уволили, она окажется в этом сервлете. Таким образом, это плохой шаблон URL для сервлетов. Как правило, вы хотели бы использовать /*
на Filter
только. Он может разрешить выполнение запроса любому сервлету, прослушивающему более конкретный шаблон URL, путем вызова FilterChain#doFilter()
.
<url-pattern>/</url-pattern>
/
Не отменяет любой другой сервлет. Он заменяет только встроенный сервлет по умолчанию для сервлет-контейнера для всех запросов, который не соответствует ни одному другому зарегистрированному сервлету. Обычно это вызывается только для статических ресурсов (CSS / JS / image / etc) и списков каталогов. Встроенный в сервлет контейнер сервлетов по умолчанию также может обрабатывать запросы кеша HTTP, потоковую передачу мультимедиа (аудио / видео) и возобновление загрузки файлов. Как правило, вы не хотите , чтобы переопределить сервлет по умолчанию , как вы в противном случае пришлось бы заботиться обо всех своих задач, не является точно тривиальным (JSF утилита библиотеки OmniFaces имеет открытый исходный пример). Таким образом, это также плохой шаблон URL для сервлетов. Почему JSP-страницы не попадают в этот сервлет, это потому, что будет вызван встроенный сервлет JSP сервлет-контейнера, который по умолчанию уже сопоставлен с более конкретным шаблоном URL *.jsp
.
<url-pattern></url-pattern>
Тогда есть также шаблон URL пустой строки
. Это будет вызвано при запросе корневого контекста. Это отличается от <welcome-file>
подхода, который не вызывается, когда запрашивается любая подпапка. Скорее всего, это шаблон URL, который вы на самом деле ищете, если вам нужен « сервлет домашней страницы ». Надо только признать, что я интуитивно ожидал, что шаблон URL пустой строки
и шаблон URL-адреса косой черты /
будут определены совершенно иначе, поэтому я могу понять, что многие начинающие пользователи запутались в этом. Но что есть, то есть.
Фронт-контроллер
В случае , если вы на самом деле намерены иметь передний контроллер сервлета, то вы бы лучше отобразить его на более определенной схеме URL , как *.html
, *.do
, /pages/*
, /app/*
и т.д. Вы можете спрятаться от фронтального шаблонов контроллера URL и облицовочных статические ресурсы на общий шаблон URL как /resources/*
и /static/*
т.д. с помощью фильтра сервлетов. См. Также Как предотвратить обработку статических ресурсов сервлетом фронт-контроллера, который отображается в / * . Следует отметить, что Spring MVC имеет встроенный сервлет статического ресурса, поэтому вы можете подключить его фронт-контроллер, /
если настроите общий шаблон URL для статических ресурсов в Spring. Смотрите также Как обрабатывать статический контент в Spring MVC?