我有一个带有 Web 服务的 J2EE 应用程序,类似于
http://servername/service?task=getFile&id=25
如何将这些类型的网址转换为
http://servername/service/getFile/25
http://servername/service/getFile/26
ETC?
请提供您的建议。
我有一个带有 Web 服务的 J2EE 应用程序,类似于
http://servername/service?task=getFile&id=25
如何将这些类型的网址转换为
http://servername/service/getFile/25
http://servername/service/getFile/26
ETC?
请提供您的建议。
您可以使用UrlRewriteFilter
来实现这一点。您只需要编写重写规则,类似于 mod_rewrite。例如:
<rule>
<from>^/products/([0-9]+)$</from>
<to>/products/index.jsp?product_id=$1</to>
</rule>
因此,您希望将友好的URL转发到不友好的URL(这样您就不需要更改 servlet 现有的请求参数收集逻辑)并将不友好的 URL重定向到友好的URL(以便友好的URL 会反映在客户端的浏览器地址栏中)。
最好的地方是Filter
. 要访问HttpServletRequest
,只需降级ServletRequest
到HttpServletRequest
。您可以通过 获取查询字符串,getQueryString()
并且可以通过 获取路径信息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
.