在我的网站上,我使用以下网址:http://example.com/test%2Ftest2.htm
当我在HandlerInterceptorAdapter中打印getServletPath时,我看到解码的servletPath:/test/test2.htm
。如何获得未解码的字符串?喜欢:/test/test2&2Ftest2.htm
答案 0 :(得分:1)
我想出了以下解决方案,关键是要创建一个新的URL对象。
URL url = new URL(request.getServletPath());
String path = url.getPath();
返回所需的未解码字符串。
答案 1 :(得分:0)
getRequestURL() - 重建客户端用于发出请求的URL。
getQueryString() - 返回路径后请求URL中包含的查询字符串。
结合getRequestURL()和getQueryString()的结果可以获得所需的结果。 E.g。
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();
}
答案 2 :(得分:0)
在网址中,%2F完全等同于“/”。所以这是为你自动翻译的,我认为你不知道这是否已经完成。
这种十六进制编码通常用于不允许作为URL字符的字符(例如,空格通常编码为%20),但您可以用这种方式用其十六进制代码替换任何字符。
此技术还用于在参数名称/值中传递URL语法中具有特殊含义的字符。例如。 '?'和'&'用于分隔参数,因此如果在表单/参数中使用,则需要对这些参数进行编码以准确地将它们作为数据传递给服务器。