如何获取域名网址和应用程序名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

我的Java Web应用程序具有以下路径

https://www.mywebsite.com:9443/MyWebApp

假设有一个JSP文件

https://www.mywebsite.com:9443/MyWebApp/protected/index.jsp

我需要检索

https://www.mywebsite.com:9443/MyWebApp 

在这个JSP文件中。

当然,获取URL然后重新追溯路径有一种懒惰和愚蠢的方式。

但是有没有一种程序化的方式来做到这一点?具体来说,我认为我可以获得域+端口,但我如何实际检索应用程序名称“MyWebApp”?

提问于
用户回答回答于

Web应用程序名称(实际上是上下文路径)可通过调用HttpServletrequest#getContextPath()(因此getServletPath()不像前面建议的那样)。你可以在JSP中通过${pageContext.request.contextPath}

<p>The context path is: ${pageContext.request.contextPath}.</p>

如果你打算在你的JSP页面中使用所有的相对路径(这会让这个问题更有意义),那么你可以使用HTML <base>标签:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="url">${req.requestURL}</c:set>
<c:set var="uri" value="${req.requestURI}" />

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2204870</title>
        <base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/">
        <script src="js/global.js"></script>
        <link rel="stylesheet" href="css/global.css">
    </head>
    <body>
        <ul>
            <li><a href="home.jsp">Home</a></li>
            <li><a href="faq.jsp">FAQ</a></li>
            <li><a href="contact.jsp">Contact</a></li>
        </ul>
    </body>
</html>

页面中的所有链接都将自动与其相关,<base>从而无需在任何地方复制上下文路径。请注意,当相对链接以a开头时/,它们将不再是相对的<base>,而是与域根相反。

用户回答回答于

看看文档HttpServletRequest。 为了在示例中构建网址,需要使用:

  • getScheme()
  • getServerName()
  • getServerPort()
  • getContextPath()

这是一个将返回你的例子的方法:

public static String getURLWithContextPath(HttpServletRequest request) {
   return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
}

扫码关注云+社区

领取腾讯云代金券