Как предотвратить статические ресурсы от обработки сервлетом переднего контроллера, который отображается на/*
У меня есть сервлет, который действует как передний контроллер.
@WebServlet("/*")
Однако это также обрабатывает файлы CSS и изображений. Как я могу предотвратить это?
Ответ 1
У вас есть 2 варианта:
Используйте более конкретный шаблон URL, например /app/* или *.do, а затем пусть все ваши запросы на страницы соответствуют этому шаблону URL. См. Также веб-приложения с шаблонами проектирования
То же, что и 1, но вы хотите скрыть отображение сервлета из URL-адреса запроса; вы должны поместить все статические ресурсы в общую папку, такую как /static или /resources, и создать фильтр, который проверяет, не совпадает ли URL-адрес запроса, а затем перенаправляется на сервлет. Вот пример, который предполагает, что ваш сервлет-контроллер является @WebServlet("/app/*") и что фильтр является @WebFilter("/*") и что все ваши статические ресурсы находятся в папке /resources.
HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI().substring(req.getContextPath().length());
if (path.startsWith("/resources/")) {
chain.doFilter(request, response); // Goes to default servlet.
} else {
request.getRequestDispatcher("/app" + path).forward(request, response); // Goes to your controller.
}
Я знаю, что это старый вопрос, и я думаю, что ответ @BalusC, вероятно, отлично работает. Но я не могу изменить URL-адрес приложения JSF, над которым я работаю, поэтому просто просто проверяю путь и возвращаю, если это статические ресурсы:
String path = request.getRequestURI().substring(request.getContextPath().length());
if (path.contains("/resources/")) {
return;
}