2

次のようなWebサービスを備えたJ2EEアプリケーションがあります

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

これらのタイプの URL を

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

等?

あなたの提案を提供してください。

4

2 に答える 2

3

これを実現するために を使用できますUrlRewriteFilter。mod_rewrite と同様に、書き換えのルールを記述するだけです。:

<rule>
    <from>^/products/([0-9]+)$</from>
    <to>/products/index.jsp?product_id=$1</to>
</rule>
于 2010-02-23T08:32:35.530 に答える
2

つまり、フレンドリーな 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

于 2010-02-23T12:02:54.833 に答える