私のサイトでは、次の URL を使用しています: http://example.com/test%2Ftest2.htm
HandlerInterceptorAdapter で getServletPath を出力すると、デコードされた servletPath: が表示されます/test/test2.htm
。デコードされていない文字列を取得するにはどうすればよいですか? お気に入り:/test/test2&2Ftest2.htm
質問する
2899 次
4 に答える
1
次の解決策を思いつきました。重要なのは、新しい URL オブジェクトを作成することです。
URL url = new URL(request.getServletPath());
String path = url.getPath();
これは、目的のデコードされていない文字列を返します。
于 2012-10-31T12:01:18.267 に答える
0
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 に答える