문제

다음은 시나리오입니다.

내 Java 웹 응용 프로그램에는 다음 경로가 있습니다

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"을 검색하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

웹 응용 프로그램 이름 (실제로 컨텍스트 경로)은 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.
예제에서 URL을 구축하려면 다음을 사용해야합니다.

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

다음은 예를 반환 할 방법입니다.

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

응용 프로그램 이름은 getContextPath.

이 그래픽을 찾습니다 민첩한 소프트웨어 장인 정신 httpservletrequest 경로 디코딩 사용 가능한 모든 다른 방법을 정렬합니다.

enter image description here

나는 당신이 그것을 읽는 것을 강력하게 제안 할 것입니다 문서, 유사한 방법. 상황 경로에 관심이 있다면 여기를 살펴보십시오. servletcontext.getContextPath ().

다음 코드는 JavaScript를 사용하는 웹 응용 프로그램에 유용 할 수 있습니다.

var newURL = window.location.protocol + "//"  + window.location.host + "" + window.location.pathname;

newURL = newURL.substring(0,newURL.indexOf(""));

문자열로 URL을 통과하고 해당 응용 프로그램의 컨텍스트 루트를 추출하려면이 regex를 사용하여 추출 할 수 있습니다. 컨텍스트 루트로 시작하는 전체 URL 또는 상대 URL에 대해 작동합니다.

url.replaceAll("^(.*\\/\\/)?.*?\\/(.+?)\\/.*|\\/(.+)$", "$2$3")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top