У меня есть шум, который нужно решить, и мне нужна помощь. Предположим, у меня есть URL из моего домена, например: http://mydomain.com/any_page.xhtml. Например. Я хотел бы перехватить запрос пользователя при нажатии на ссылку, которая теоретически ведет к моему домену, и мне нужно, чтобы он перехватывал и перенаправлял его на определенный новый URL-адрес на основе моего критерия. Я работаю с простыми сервлетами. Во время моего расследования я увидел, что Фильтр может мне помочь. Кто-нибудь знает, как создать что-то для этого предложения?
Как перехватить запрос по базе URL?
Ответы (2)
Просто реализуйте javax.servlet.Filter
.
Если вы сопоставите это с шаблоном URL /*
, оно будет выполняться при каждом запросе.
<url-pattern>/*</url-pattern>
или когда вы уже используете Servlet 3.0
@WebFilter(urlPatterns = { "/*" })
Вы можете получить URI запроса по адресу HttpServletRequest#getRequestURI()
в методе doFilter()
фильтра следующим образом:
HttpServletRequest httpRequest = (HttpServletRequest) request;
String uri = httpRequest.getRequestURI();
// ...
Вы можете использовать любой из методов, предоставляемых java.lang.String
a> класс для сравнения/манипулирования им.
boolean matches = uri.startsWith("/something");
Вы можете использовать if/else
ключевых слов, предоставляемых языком Java, для управления потоком кода.
if (matches) {
// It matches.
} else {
// It doesn't match.
}
Вы можете использовать HttpServletResponse#sendRedirect()
для отправки переадресации.
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect(newURL);
Вы можете использовать FilterChain#doFilter()
, чтобы просто продолжить выполнение запроса.
chain.doFilter(request, response);
Делать математику. Конечно, вы также можете использовать сторонний фильтр, такой как фильтр перезаписи URL-адресов Tuckey, который, скажем, является вариантом Java Apache HTTPD mod_rewrite
.