Поддержка двух URI с одним и тем же сервлетом - PullRequest
0 голосов
/ 13 января 2012

В настоящее время у нас есть все ссылки на нашем сайте, настроенные как /xxx/UseCase.

Мы хотели бы теперь принимать входящие запросы с префиксом /yyy, например /yyy/xxx/UseCase.Таким образом, у нас будет один сервлет, который принимает запросы как /yyy/xxx/UseCase, так и /xxx/UseCase.

Как мы можем это сделать?

Самая большая проблема здесь: количество страниц, перенаправляемых на другие URI, используя абсолютный путь.То есть: сервлет Patients перенаправляет на /xxx/Insurance.Проблема в том, что если вы находитесь на /yyy/xxx/Patients, вы не должны перенаправляться на /xxx/Insurance - вы должны перенаправляться на /yyy/xxx/Insurance

Ответы [ 2 ]

4 голосов
/ 13 января 2012

Вы можете просто сопоставить сервлет с более чем одним шаблоном URL:

<servlet-mapping>
    <servlet-name>fooServlet</servlet-name>
    <url-pattern>/xxx/*</url-pattern>
    <url-pattern>/yyy/*</url-pattern>
</servlet-mapping>

Или когда вы уже используете Servlet 3.0:

@WebServlet(urlPatterns={"/xxx/*", "/yyy/*"})
public class FooServlet extends HttpServlet {
    // ...
}

При необходимости вы можете использовать /yyy/xxx/* вместо /yyy/*.

Или, если вы собираетесь отсоединить отображение сервлета, вы также можете создать Filter, который перенаправляет запросы на /yyy/xxx/* на /xxx/*. Примерно так (основные проверки опущены):

@WebFilter("/yyy/xxx/*")
public class FooFilter implements Filter {

    // ...

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest req = (HttpServletRequest) request;
        String oldURI = req.getRequestURI().substring(req.getContextPath().length() + 1);
        String newURI = oldURI.substring(oldURI.indexOf("/"));
        req.getRequestDispatcher(newURI).forward(request, response);
    }

    // ...
}

Если вы намерены изменить URL-адрес в адресной строке браузера с /yyy/xxx/* на /xxx/*, тогда вам нужно использовать HttpServletResponse#sendRedirect() вместо RequestDispatcher#forward():

         // ...
         HttpServletResponse res = (HttpServletResponse) response;
         res.sendRedirect(newURI);
1 голос
/ 13 января 2012

Не думаю, что проблема в вашем отображении сервлета. Я думаю, что это с тем, как вы делаете свои перенаправления. Попробуйте это для вашей логики перенаправления ...

response.sendRedirect(request.getRequestURI().replace("Patients", "Insurance"));

Таким образом, вам не нужно связываться с операторами if, так как они должны работать в обеих ситуациях.

...