Programing

올바른 방법으로 JavaScript에서 contextPath를 어떻게 얻습니까?

lottogame 2020. 12. 1. 07:31
반응형

올바른 방법으로 JavaScript에서 contextPath를 어떻게 얻습니까?


Java 기반 백엔드 (예 : 서블릿 및 JSP)를 사용하여 JavaScript의 contextPath가 필요한 경우이를 수행하는 데 권장되는 패턴은 무엇입니까? 이유는 무엇입니까? 몇 가지 가능성을 생각할 수 있습니다. 내가 놓친 것이 있습니까?

1. 일부 자바 스크립트 변수에서 설정하는 페이지에 SCRIPT 태그를 굽습니다.

<script>var ctx = "<%=request.getContextPath()%>"</script>

정확하지만 페이지를로드 할 때 스크립트 실행이 필요합니다.

2. 숨겨진 DOM 요소에 contextPath 설정

<span id="ctx" style="display:none;"><%=request.getContextPath()%></span>

이것은 정확하며 페이지를로드 할 때 스크립트를 실행할 필요가 없습니다. 그러나 contextPath에 액세스해야 할 때 DOM 쿼리가 필요합니다. 성능에 관심이 많으면 DOM 쿼리의 결과를 캐시 할 수 있습니다.

3. document.URL또는 BASE 태그를 검토하여 JavaScript 내에서 알아 내십시오.

function() {
    var base = document.getElementsByTagName('base')[0];
    if (base && base.href && (base.href.length > 0)) {
        base = base.href;
    } else {
        base = document.URL;
    }
    return base.substr(0,
        base.indexOf("/", base.indexOf("/", base.indexOf("//") + 2) + 1));
};

페이지를로드 할 때 스크립트 실행이 필요하지 않으며 필요한 경우 결과를 캐시 할 수도 있습니다. 그러나 이것은 루트 디렉토리 ( /) 또는 여러 디렉토리 다운 ( /mypath/iscomplicated/) 과는 반대로 컨텍스트 경로가 단일 디렉토리임을 알고있는 경우에만 작동합니다 .

내가 어느 방향으로 기울고 있는지

숨겨진 DOM 요소를 선호합니다. 페이지로드시 JavaScript 코드 실행이 필요하지 않기 때문입니다. contextPath가 필요할 때만 무엇이든 실행해야합니다 (이 경우 DOM 쿼리 실행).


의견 (특히 BalusC)의 토론에 따르면 이보다 더 복잡한 작업을 수행 할 가치가 없을 것입니다.

<script>var ctx = "${pageContext.request.contextPath}"</script>

알았어 : D

function getContextPath() {
   return window.location.pathname.substring(0, window.location.pathname.indexOf("/",2));
}
alert(getContextPath());

중요 참고 : "루트"컨텍스트 경로에 대해서만 작동합니다. "하위 폴더"또는 컨텍스트 경로에 슬래시 ( "/")가있는 경우 작동하지 않습니다.


1 번과 3 번과 같은 함수를 호출하면 원하는 것을 얻을 수 있다고 생각합니다.

페이지로드시 스크립트를 실행하고 싶지 않고 나중에 함수를 호출하는 것을 선호하십니까? 좋습니다. 변수에 설정 한 값을 반환하는 함수를 만드세요.

function getContextPath() {
   return "<%=request.getContextPath()%>";
}

함수이므로 실제로 호출 할 때까지 실행되지 않지만 DOM 순회를 수행하거나 URL을 수정하지 않고도 직접 값을 반환합니다.

이 시점에서 나는 EL을 사용하기 위해 @BalusC에 동의합니다.

function getContextPath() {
   return "${pageContext.request.contextPath}";
}

또는 JSTL 로의 JSP 폴백 버전에 따라 :

function getContextPath() {
   return "<c:out value="${pageContext.request.contextPath}" />";
}

id = "contextPahtHolder"로 링크 태그의 속성에 컨텍스트 경로를 렌더링 한 다음 JS 코드로 가져옵니다. 예를 들면 :

<html>
    <head>
        <link id="contextPathHolder" data-contextPath="${pageContext.request.contextPath}"/>
    <body>
        <script src="main.js" type="text/javascript"></script>
    </body>
</html>

main.js

var CONTEXT_PATH = $('#contextPathHolder').attr('data-contextPath');
$.get(CONTEXT_PATH + '/action_url', function() {});

컨텍스트 경로가 비어 있으면 (내장 된 서블릿 컨테이너 인스턴스에서와 같이) 빈 문자열이됩니다. 그렇지 않으면 contextPath 문자열을 포함합니다.


Reviewer the solution by this Checking the solution of this page, make the following solution I hope it works: Example:

Javascript:

var context = window.location.pathname.substring(0, window.location.pathname.indexOf("/",2)); 
var url =window.location.protocol+"//"+ window.location.host +context+"/bla/bla";

참고URL : https://stackoverflow.com/questions/6615641/how-do-you-get-the-contextpath-from-javascript-the-right-way

반응형