2013-10-01 4 views
1

저는 현재 수많은 환경에 배포되고있는 응용 프로그램을 작성하고 있습니다. 그러나 특정 환경에 배포 할 때 컨텍스트 경로에 문제가 있습니다. 이것은 Tomcat 6에서 실행되는 Java/Spring 애플리케이션입니다. 배포 프로세스는 시스템 관리자가 처리하므로 프로세스를 잘 볼 수 없으므로 시나리오를 처리하는 몇 가지 방법을 생각해냅니다. 모든 URL에는 request.getContextPath()가 붙습니다. 정상적인 상황에서는 정상적으로 작동합니다. WAR 파일 이름의 site1.war이있는 경우 예를 들어,이Java - 컨텍스트 경로 관리

그러나

/site1/

에 배포됩니다 전쟁이 배치되는 경우 우리는 다른 환경의 몇 가지를 가지고 그렇게 응용 프로그램 루트 외부의 ROOTPATH을 포함 그것은

/otherroot/site1/

그래서 응용 프로그램 루트 경로가 /site1/입니다과 끝이 다른 ROOTPATH ​​ /otherroot/ 인식하지 못합니다. 이 경우 getContextPath()를 호출하면 실제로는 원하는 경로가 /otherroot/site1/ 일 때 /site1/을 반환합니다.

나 혼란스러운 것은 이미지 (이미지, 스타일 시트 또는 자바 스크립트 파일)를 정의 할 때 JSF 페이지에서 # {request.contextpath}를 사용할 때 원본을 볼 때 URL이 정확하다는 것입니다. 예를 들어, /otherroot/site/ URL이 주어진 경우, 렌더링 된 페이지의 소스를 볼 때

<img src="#{request.contextPath}/image1.png"/>으로 설정하면 /otherroot/site1/image1.png이 표시됩니다. 자, 페이지가 렌더링 될 때마다 컨텍스트 경로를 유지하기 위해 일부 JS 변수를 설정하면 다른 결과를 얻습니다. 예를 들어,

<script> 
    APP.ROOT_PATH = '#{request.contextPath}'; 
</script> 

다음과 같은 렌더링 : 우리가 제대로 클라이언트 측에서 데이터를 요청하는 비동기 요청을 사용 그래서 우리는 URL을 사용하기 때문에

APP.ROOT_PATH = '/site1'

이 몇 가지 문제를 일으키는.

제 궁금한 점은 주어진 경로에서 실행할 수있는 응용 프로그램을 작성하는 가장 좋은 전략은 무엇입니까?

+0

맞춤 태그를 쓸 수 있습니다! –

답변

1

환경을 식별하는 인터셉터를 사용하여이를 수행 할 수 있습니다. UI를 통해 사용할 수있는 UI로 모델을 통해 환경 경로를 전달할 수 있습니다. 예를 들어. /otherroot/site1/에서이 사이트 1은 컨텍스트 이름이고 otherrrot는 환경입니다.

서버를 공격하여 jsp를 렌더링하면 인터셉터가이 URL을 분석하여 url이 otherroot1과 관련이 있음을 알게됩니다. 이 환경 및 관련 데이터는 js, 이미지 등을 가져 오는 데 사용할 수있는 모델에서 설정하고 다른 모든 Ajax 호출에 사용할 수 있습니다.

페이지가 렌더링되면 URL 컨텍스트 경로에 의존 할 필요가 없습니다.