<url-pattern>/*</url-pattern>
Значення /*
сервлета замінює всі інші сервлети, включаючи всі сервлети, надані контейнером сервлетів, такими як сервлет за замовчуванням та сервлет JSP. Який би запит ви не стріляли, він опиниться в тій серветці. Таким чином, це поганий шаблон URL-адрес для сервлетів. Як правило, ви хотіли б використовувати /*
на Filter
тільки. Він може дозволити продовжувати запит будь-якому з сервлетів, які слухають більш конкретний шаблон URL-адреси, зателефонувавши FilterChain#doFilter()
.
<url-pattern>/</url-pattern>
/
Чи не скасовує будь-який інший сервлет. Він замінює лише вбудований серверт за замовчуванням servletcontainer для всіх запитів, який не відповідає жодному іншому зареєстрованому сервлету. Зазвичай це викликається лише на статичних ресурсах (CSS / JS / image / тощо) та списках каталогів. Вбудований серверт за замовчуванням в сервлет-контейнер також може вирішувати запити кеша 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 MVC?