how to get the base url from jsp request object?

前端 未结 6 773
予麋鹿
予麋鹿 2020-11-30 07:10

How to get the base url from the jsp request object? http://localhost:8080/SOMETHING/index.jsp, but I want the part till index.jsp, how is it possible in jsp?

相关标签:
6条回答
  • 2020-11-30 07:48

    There is one major flaw in @BalusC accepted answer though. Substring should start from 0 and not 1. Instead of

    <base href="${fn:replace(req.requestURL, fn:substring(uri, 1, fn:length(uri)), req.contextPath)}" />
    

    it should be

    <base href="${fn:replace(req.requestURL, fn:substring(uri, 0, fn:length(uri)), req.contextPath)}" />
    

    With 1 you get double forward slash: http://localhost:8080//appcontext/ With 0 you get, http://localhost:21080/appcontext/

    In my application, request.getSession(false) always returned null when it was ending in double slash!!!

    0 讨论(0)
  • 2020-11-30 07:52

    just use isSecure()

    {<%=request.isSecure()?"https":"http:"%>}

    0 讨论(0)
  • 2020-11-30 08:00

    JSP variant of Bozho's answer:

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <c:set var="req" value="${pageContext.request}" />
    <c:set var="baseURL" value="${req.scheme}://${req.serverName}:${req.serverPort}${req.contextPath}" />
    
    0 讨论(0)
  • 2020-11-30 08:03

    Instead of doing all of that, just do this:

    request.getServerName().toString()
    
    0 讨论(0)
  • 2020-11-30 08:04
    new URL(request.getScheme(), 
            request.getServerName(), 
            request.getServerPort(), 
            request.getContextPath());
    
    0 讨论(0)
  • 2020-11-30 08:07

    So, you want the base URL? You can get it in a servlet as follows:

    String url = request.getRequestURL().toString();
    String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";
    // ...
    

    Or in a JSP, as <base>, with little help of JSTL:

    <%@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}" />
    ...
    <head>
        <base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/" />
    </head>
    

    Note that this does not include the port number when it's already the default port number, such as 80. The java.net.URL doesn't take this into account.

    See also:

    • Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP
    0 讨论(0)
提交回复
热议问题