웹 서비스를 개발하다보면 현재 서비스가 돌아가고 있는 서버의 웹서비스 디렉토리의 물리적 경로를 구해야 할 때가 있다.
보통 이러한 정보를 알아야 하는 경우는 파일 업로드 등을 할때 많이 필요로 한다.
JSP에서 현재 서비스의 물리적 서버 경로를 알아오는 방법으로는 몇가지 방법이 있다.
그중에서 내가 주로 사용하는 방법에 대해 설명한다.
1. 업로드 디렉토리가 웹서비스 디렉토리 하위에 존재할 경우
request.getSession().getServletContext().getRealPath("/")
업로드 URL : http://localhost/upload/
업로드 디렉토리 물리적 경로 : C:\web\WebContents\upload\
웹서비스 경로 : C:\web\WebContents\
가장 일반적인 사용방법으로 현재 서비스가 돌아가고 있는 서블릿의 경로를 가져온다.
만약 웹서비스가 "C:\web\WebContents" 에서 구동중이라면 해당 경로를 반환한다.
파일 업로드 위치가 "C:\web\WebContents\upload\" 와 같이 실제로 서블릿 구동경로 안에 디렉토리가 포함되어 있을때 사용하면 된다.
String rootPath = request.getSession().getServletContext().getRealPath("/") ;
String savePath = rootPath + "upload/" ;
2. 업로드 디렉토리가 별도 존재하면 Tomcat 등에서 Context로 추가한 경우
request.getSession().getServletContext().getContext("/upload").getRealPath("")
업로드 URL : http://localhost/upload/
업로드 디렉토리 물리적 경로 : D:\upFile\
웹서비스 경로 : C:\web\WebContents\
업로드 디렉토리가 물리적으로 웹서비스 디렉토리에 포함되지 않고 별도로 존재하며, 해당 디렉토리는 WAS상에서 Context등을 통해 별도로 추가된 경우에 해당 방법을 사용하면 된다.
String rootPath = request.getSession().getServletContext().getContext("/upload").getRealPath("") ;
여담으로 최근에는 1,2번 방식을 통해 코드상에서 경로를 구하기 보다는 propeties 파일에 실제 저장될 물리적 경로를 기입하고 이를 load하여 읽어오는 방식으로 많이 사용한다.
그 이유는 WAS에 따라 처리하는 방식이 조금씩 다르고 이에따라 원치않은 오류가 나기도 하는데, 물리적 경로를 직접 지정해줌으로서 편하기 때문이다.
'Language > Java / JSP' 카테고리의 다른 글
[JSP] 로그인 세션 유지시간 늘리기 (0) | 2015.06.15 |
---|---|
[Java] 특정 자리수 만큼 0으로 공백 채우기(String.format()) (3) | 2015.04.27 |
[Java] bad major version at offset=6 (0) | 2015.02.02 |
[JSP] Form 작성시 자동 Submit 막기 (0) | 2015.01.13 |
[Java] HashMap, LinkedHashMap 차이점 및 사용법 (0) | 2014.12.17 |