Programming

도메인 URL과 애플리케이션 이름을 얻는 방법은 무엇입니까?

procodes 2020. 8. 24. 21:42
반응형

도메인 URL과 애플리케이션 이름을 얻는 방법은 무엇입니까?


다음은 시나리오입니다.

내 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>이므로 모든 곳에 컨텍스트 경로를 복사하여 붙여 넣을 필요가 없습니다. 상대 링크가로 시작 /하면 <base>더 이상에 상대적이 아니라 도메인 루트에 상대적이 됩니다.


에 대한 문서를 살펴보십시오 HttpServletRequest.
예제에서 URL을 작성하려면 다음을 사용해야합니다.

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

다음은 예제를 반환하는 메서드입니다.

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

응용 프로그램 이름은 getContextPath.

Agile Software Craftsmanship HttpServletRequest Path Decoding 에서이 그래픽 은 사용 가능한 모든 다른 방법을 정렬합니다.

여기에 이미지 설명 입력


비슷한 방법에 대해 문서 를 읽는 것이 좋습니다 . 컨텍스트 경로에 관심이 있으시면 ServletContext.getContextPath ()를보십시오 .


다음 코드는 JavaScript를 사용하는 웹 애플리케이션에 유용 할 수 있습니다.

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

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

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

url.replaceAll("^(.*\\/\\/)?.*?\\/(.+?)\\/.*|\\/(.+)$", "$2$3")

참고 URL : https://stackoverflow.com/questions/2204870/how-to-get-domain-url-and-application-name

반응형