Есть ли способ сделать так, чтобы отображение фильтров не включало подкаталоги?
Например.
У меня есть. xhtml в моем корневом контексте, и у меня также есть подпапка с именем «test» с файлами с таким же расширением. Можно ли сопоставить фильтр с файлами в корневом контексте, а не с файлами в каталоге "test"?
Шаблон URL
действительно ограничивает сопоставление. Допускается только точное совпадение, префикс или суффикс. Не соответствует среднему / общему / регулярному выражению. Так, например, / *. Xhtml
то, что вы собираетесь делать, не сработает.
Если вы хотите исключить XHTML только из папки / test
, то лучшим вариантом будет Фильтр
, прослушивающий URL-шаблон
из ] *. xhtml
, который в основном выполняет следующую работу в методе doFilter ()
:
// First cast ServletRequest to HttpServletRequest.
HttpServletRequest hsr = (HttpServletRequest) request;
// Check if requested resource is not in /test folder.
if (!hsr.getServletPath().startsWith("/test/")) {
// Not in /test folder. Do your thing here.
}
HttpServletRequest # getServletPath ()
в основном возвращает часть URI запроса из контекстный путь включен.
При необходимости вы можете настроить значение / test
как
фильтра, чтобы вы могли управлять значением изнутри web.xml
вместо кода фильтра.
Используя то, что доступно для стандартных сервлетов / фильтров, нет прямого способа исключить подкаталог, поскольку сопоставления стиля *. Ext
включают подкаталоги. Вы можете обойти это, объявив другой фильтр, который специально обрабатывает отображение / test / *. Xhtml
и обрабатывает его соответственно.
Некоторые контейнеры (например, смола) определяют расширение для определения сопоставления фильтров в web.xml, которое позволяет указать url-regexp
, что позволяет сопоставить URL-адреса на основе регулярного выражения. ( ссылка ). Посмотрите, есть ли в вашем контейнере что-то подобное.