2

私のサイトでは、次の URL を使用しています: http://example.com/test%2Ftest2.htm HandlerInterceptorAdapter で getServletPath を出力すると、デコードされた servletPath: が表示されます/test/test2.htm。デコードされていない文字列を取得するにはどうすればよいですか? お気に入り:/test/test2&2Ftest2.htm

4

4 に答える 4

1

次の解決策を思いつきました。重要なのは、新しい URL オブジェクトを作成することです。

URL url = new URL(request.getServletPath());
String path = url.getPath();

これは、目的のデコードされていない文字列を返します。

于 2012-10-31T12:01:18.267 に答える
0

HttpServletRequest

getRequestURL() - クライアントがリクエストに使用した URL を再構築します。

getQueryString() - パスの後のリクエスト URL に含まれるクエリ文字列を返します。

getRequestURL() と getQueryString() の結果を組み合わせると、目的の結果が得られます。例えば

String fullURL = request.getRequestURL().append("?").append( 
     request.getQueryString()).toString();


public static String getUrl(HttpServletRequest req) {
    String reqUrl = req.getRequestURL().toString();
    String queryString = req.getQueryString();   // d=789
    if (queryString != null) {
        reqUrl += "?"+queryString;
    }
    return reqUrl;
}

また

public static String getURL(HttpServletRequest req) {

    String scheme = req.getScheme();             // http
    String serverName = req.getServerName();     // hostname.com
    int serverPort = req.getServerPort();        // 80
    String contextPath = req.getContextPath();   // /mywebapp
    String servletPath = req.getServletPath();   // /servlet/MyServlet
    String pathInfo = req.getPathInfo();         // /a/b;c=123
    String queryString = req.getQueryString();          // d=789

    // Reconstruct original requesting URL
    StringBuffer url =  new StringBuffer();
    url.append(scheme).append("://").append(serverName);

    if ((serverPort != 80) && (serverPort != 443)) {
        url.append(":").append(serverPort);
    }

    url.append(contextPath).append(servletPath);

    if (pathInfo != null) {
        url.append(pathInfo);
    }
    if (queryString != null) {
        url.append("?").append(queryString);
    }
    return url.toString();
}
于 2012-10-31T11:35:11.533 に答える