How to get domain URL and application name?

后端 未结 6 865
挽巷
挽巷 2020-12-02 04:55

Here\'s the scenario.

My Java web application has following path

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

Let\'s say there is a JSP

相关标签:
6条回答
  • 2020-12-02 05:15

    The application name come from getContextPath.

    I find this graphic from Agile Software Craftsmanship HttpServletRequest Path Decoding sorts out all the different methods that are available:

    0 讨论(0)
  • 2020-12-02 05:17

    The web application name (actually the context path) is available by calling HttpServletrequest#getContextPath() (and thus NOT getServletPath() as one suggested before). You can retrieve this in JSP by ${pageContext.request.contextPath}.

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

    If you intend to use this for all relative paths in your JSP page (which would make this question more sense), then you can make use of the HTML <base> tag:

    <%@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>
    

    All links in the page will then automagically be relative to the <base> so that you don't need to copypaste the context path everywhere. Note that when relative links start with a /, then they will not be relative to the <base> anymore, but to the domain root instead.

    0 讨论(0)
  • 2020-12-02 05:25

    The following code might be useful for web application using JavaScript.

    var newURL = window.location.protocol + "//"  + window.location.host + "" + window.location.pathname;
    
    newURL = newURL.substring(0,newURL.indexOf(""));
    
    0 讨论(0)
  • 2020-12-02 05:26

    If you are being passed a url as a String and want to extract the context root of that application, you can use this regex to extract it. It will work for full urls or relative urls that begin with the context root.

    url.replaceAll("^(.*\\/\\/)?.*?\\/(.+?)\\/.*|\\/(.+)$", "$2$3")
    
    0 讨论(0)
  • 2020-12-02 05:29

    I would strongly suggest you to read through the docs, for similar methods. If you are interested in context path, have a look here, ServletContext.getContextPath().

    0 讨论(0)
  • 2020-12-02 05:39

    Take a look at the documentation for HttpServletRequest.
    In order to build the URL in your example you will need to use:

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

    Here is a method that will return your example:

    public static String getURLWithContextPath(HttpServletRequest request) {
       return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
    }
    
    0 讨论(0)
提交回复
热议问题