Hãy thử điều này thay vì:
String scheme = req.getScheme();
String serverName = req.getServerName();
int serverPort = req.getServerPort();
String uri = (String) req.getAttribute("javax.servlet.forward.request_uri");
String prmstr = (String) req.getAttribute("javax.servlet.forward.query_string");
String url = scheme + "://" +serverName + ":" + serverPort + uri + "?" + prmstr;
Lưu ý: Bạn không thể có được neo HREF từ url của bạn. Ví dụ, nếu bạn có url "toc.html # top" sau đó bạn có thể nhận được chỉ "toc.html"
Note: req.getAttribute làm việc ("javax.servlet.forward.request_uri") chỉ trong JSP. nếu bạn chạy này trong điều khiển trước khi JSP thì kết quả là null
Bạn có thể sử dụng mã cho cả hai biến thể:
public static String getCurrentUrl(HttpServletRequest req) {
String url = getCurrentUrlWithoutParams(req);
String prmstr = getCurrentUrlParams(req);
url += "?" + prmstr;
return url;
}
public static String getCurrentUrlParams(HttpServletRequest request) {
return StringUtil.safeString(request.getQueryString());
}
public static String getCurrentUrlWithoutParams(HttpServletRequest request) {
String uri = (String) request.getAttribute("javax.servlet.forward.request_uri");
if (uri == null) {
return request.getRequestURL().toString();
}
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String url = scheme + "://" + serverName + ":" + serverPort + uri;
return url;
}
Bản sao của http://stackoverflow.com/questions/2089528/how-to-get-the-url-of-the-client – skaffman
Thực ra tôi nghĩ rằng việc sử dụng tiêu đề liên kết giới thiệu thậm chí tệ hơn sau đó chuyển url hợp lệ với mô hình – user12384512