如何在JSP中获取由Servlet转发的请求URL?
如果我在JSP中运行以下代码,
System.out.println("servlet path= " + request.getServletPath());
System.out.println("request URL= " + request.getRequestURL());
System.out.println("request URI= " + request.getRequestURI());
Run Code Online (Sandbox Code Playgroud)
然后我得到JSP的服务器端路径.但是我想在浏览器的地址栏中看到URL.我可以在转发到JSP的Servlet中获取它,但我希望在JSP中获取它.
axt*_*avt 67
如果您使用RequestDispatcher.forward()将请求从控制器路由到视图,则请求URI将作为名为的请求属性公开javax.servlet.forward.request_uri.所以,你可以使用
request.getAttribute("javax.servlet.forward.request_uri")
Run Code Online (Sandbox Code Playgroud)
要么
${requestScope['javax.servlet.forward.request_uri']}
Run Code Online (Sandbox Code Playgroud)
试试这个:
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;
Run Code Online (Sandbox Code Playgroud)
注意:您无法从您的网址获取HREF锚点.例如,如果您有网址"toc.html #top",那么您只能获得"toc.html"
注意:req.getAttribute("javax.servlet.forward.request_uri")仅适用于JSP.如果你在JSP之前在控制器中运行它,那么结果为null
您可以为两个变体使用代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
要从JSP文件中获取当前路径,您只需执行以下操作之一:
<%= request.getContextPath() %>
<%= request.getRequestURI() %>
<%= request.getRequestURL() %>
Run Code Online (Sandbox Code Playgroud)
试试这个,
<c:set var="pageUrl" scope="request">
<c:out value="${pageContext.request.scheme}://${pageContext.request.serverName}"/>
<c:if test="${pageContext.request.serverPort != '80'}">
<c:out value=":${pageContext.request.serverPort}"/>
</c:if>
<c:out value="${requestScope['javax.servlet.forward.request_uri']}"/>
</c:set>
Run Code Online (Sandbox Code Playgroud)
我想将它放在我的基本模板中,并在需要时在整个应用程序中使用.
| 归档时间: |
|
| 查看次数: |
123641 次 |
| 最近记录: |