Преобразование URL-адресов метода GET в логические постоянные ссылки - PullRequest
2 голосов
/ 23 февраля 2010

У меня есть приложение J2EE с веб-сервисом, которое выглядит как

http://servername/service?task=getFile&id=25

Как я могу преобразовать эти типы URL в

http://servername/service/getFile/25
http://servername/service/getFile/26

и т.д.

Пожалуйста, предоставьте ваши предложения.

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

Вы можете использовать UrlRewriteFilter для достижения этой цели. Вам просто нужно написать правила для переписывания, похожие на mod_rewrite. Например :

<rule>
    <from>^/products/([0-9]+)$</from>
    <to>/products/index.jsp?product_id=$1</to>
</rule>
2 голосов
/ 23 февраля 2010

Кстати, вы хотите переслать дружественный URL на недружественный URL (чтобы вам не нужно было изменять существующий параметр запроса логика сервлета) и на перенаправление недействительный URL на URL friendly (так что URL friendly отражается в адресная строка браузера клиента).

Лучшее место для этого - Filter. Чтобы получить доступ к HttpServletRequest, просто уменьшите ServletRequest до HttpServletRequest. Вы можете получить строку запроса по getQueryString() и вы можете получить pathinfo по getRequestURI(). Вот начальный пример:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException
{
    HttpServletRequest httpreq = (HttpServletRequest) request;
    String query = httpreq.getQueryString();
    if (query != null) {
        // Unfriendly URL invoked. Convert params to pathinfo and redirect.
        StringBuffer newURL = httpreq.getRequestURL();
        for (String param : query.split("&")) {
            newURL.append('/').append(param.substring(param.indexOf('=') + 1));
        }
        ((HttpServletResponse) response).sendRedirect(newURL.toString());
    } else {
        // Friendly URL invoked. Convert pathinfo to params and forward.
        String[] parts = httpreq.getRequestURI().replace(httpreq.getContextPath(), "").split("/");
        String newURL = String.format("%s?task=%s&id=%s", parts[1], parts[2], parts[3]);
        httpreq.getRequestDispatcher(newURL).forward(request, response);
    }
}

Вы, конечно, можете также взять вышеупомянутые UrlRewriteFilter.

...