Как получить предыдущий URL-адрес страницы из запроса в сервлет после dispatcher.forward(запрос, ответ)

Я использую сервлет, который перенаправляет меня с помощью

dispatcher.forward(request, response);

в конце. Но после этого я хочу получить страницу (путь), из которой я был перенаправлен, чтобы использовать ее в следующей команде сервлета (чтобы перейти на предыдущую страницу). Как я мог его получить? Или предыдущий URL-адрес не содержится в параметрах запроса, и я должен добавить его сам? Будем очень благодарны за вашу помощь.

Ответ 3

Любой метод вернет исходный URL-адрес при переходе (..), поэтому мое решение должно определить фильтр для хранения requestURL() в атрибуте запроса для проверки позже. Для этого в файле web.xml напишите:

...
<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>my.package.CustomFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>
...

Затем в классе CustomFilter:

public class CustomFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void destroy() {}

    @Override
    public void doFilter(ServletRequest req, ServletResponse rsp,
            FilterChain chain) throws IOException, ServletException {
        req.setAttribute("OriginURL", req.getRequestURL().toString());
        chain.doFilter(req, rsp);
    }
}

Затем вы можете получить его везде в своем коде с помощью объекта ServletRequest с помощью:

request.getAttribute("OriginURL").toString();

Ответ 4

вы можете сохранить этот url в HttpSession и получить его в следующем сервлете, когда вам нужно.