次のようなWebサービスを備えたJ2EEアプリケーションがあります
http://servername/service?task=getFile&id=25
これらのタイプの URL を
http://servername/service/getFile/25
http://servername/service/getFile/26
等?
あなたの提案を提供してください。
次のようなWebサービスを備えたJ2EEアプリケーションがあります
http://servername/service?task=getFile&id=25
これらのタイプの URL を
http://servername/service/getFile/25
http://servername/service/getFile/26
等?
あなたの提案を提供してください。
これを実現するために を使用できますUrlRewriteFilter
。mod_rewrite と同様に、書き換えのルールを記述するだけです。例:
<rule>
<from>^/products/([0-9]+)$</from>
<to>/products/index.jsp?product_id=$1</to>
</rule>
つまり、フレンドリーな URL をフレンドリーでない URL に転送し(サーブレットの既存の要求パラメーター収集ロジックを変更する必要がないように)、フレンドリーでない URL をフレンドリーな 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
。