Как перехватить запрос по базе URL? - PullRequest
5 голосов
/ 15 марта 2011

Мне нужно решить проблему, и мне нужна помощь. Предположим, у меня есть URL из моего домена, например: http://mydomain.com/any_page.xhtml. Я хотел бы перехватить пользовательский запрос при нажатии на ссылку, которая теоретически направляет мой домен, и нужно, чтобы он перехватывал и перенаправлял его на определенный новый URL-адрес на основе моего критерия. Я работаю с простыми сервлетами. Во время моего расследования я видел, что Фильтр может мне помочь. Кто-нибудь знает, как создать что-то для этого предложения?

Ответы [ 2 ]

8 голосов
/ 15 марта 2011

Просто внедрите 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 классом, чтобы сравнить / манипулировать им.* Вы можете использовать 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.

См. Также:

1 голос
/ 15 марта 2011

Возможно, посмотрите на UrlRewriterFilter ?

...