Я пытаюсь переписать URL из:сервлет фильтр переписать URL
localhost:8080/sendEmail/newEmail.pdf?request_id=23456&emailAddress=
To:
localhost:8080/sendEmail/newEmail.pdf?request_id=23456
Класс фильтра кода и отображения ниже. Как я могу выполнить эту задачу? (Ответ на пример будет высоко оценен).
фильтр отображения:
<filter>
<filter-name>RequestFilter</filter-name>
<filter-class>com.abc.ms.email.filter.RequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RequestFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
фильтр код:
public class RequestFilter implements Filter {
private static final Pattern REWRITE_PATTERN = Pattern.compile("(^[1-9]\\d*)$");
public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException {
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper((HttpServletRequest)req);
String url = wrapper.getRequestURL().toString();
String number = url.substring(url.lastIndexOf("/")).replace("/", "");
Matcher m = REWRITE_PATTERN.matcher(number);
if (m.find()) {
RequestDispatcher dispatcher = wrapper.getRequestDispatcher("request?id=" + m.group(1));
dispatcher.forward(req, res);
} else {
fc.doFilter(wrapper, res);
}
}
}
Я понимаю reluctancy изобретать колесо, но я не может поверить, что кто-то подумает, что добавление Apache перед контейнером сервлета просто для перезаписи URL-адреса лучше, чем создание простого фильтра с несколькими строками кода. – stepanian
@ stepanian да, это было бы излишним, поэтому я предложил Java-решение первым и сказал, что если у вас уже есть apache впереди (по каким-либо причинам), mod_rewrite может быть альтернативным подходом. – marc82ch