将GET方法url转换为逻辑永久链接

时间:2010-02-22 22:09:20

标签: java jsp servlets permalinks

我有一个带有Web服务的J2EE应用程序,类似于

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

如何将这些类型的网址转换为

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

等?

请提供您的建议。

2 个答案:

答案 0 :(得分:3)

您可以使用UrlRewriteFilter来实现此目的。你只需编写重写规则,类似于mod_rewrite。 For example

<rule>
    <from>^/products/([0-9]+)$</from>
    <to>/products/index.jsp?product_id=$1</to>
</rule>

答案 1 :(得分:2)

就此而言,您希望友好网址转发友好网址(以便您无需更改)现有的请求参数收集servlet的逻辑,并重定向 不友好 URL到友好 URL(以便友好 URL反映在客户端的浏览器地址栏中。

最佳位置是Filter。要访问HttpServletRequest,只需向下转发ServletRequestHttpServletRequest。您可以通过getQueryString()获取查询字符串,然后可以通过getRequestURI()获取pathinfo。这是一个启动示例:

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