2014-08-28 2 views
-4

이런 일이 발생하는 이유가 궁금합니다. 동일한 코드이지만 다른 결과입니다.서블릿에서 속성 파일의 절대 경로를 가져올 수 없습니다.

File file = new File("src/config/ora2.config.properties"); 
System.out.println(file.getAbsolutePath()); 

정상적인 Java 클래스에서는 올바른 경로가되지만 서블릿에있을 때 eclipse의 설치 경로를 반환합니다.

Properties props = new Properties(); 
InputStream in = getServletContext().getResourceAsStream("WEB-INF/ora2.config.properties"); 
if(in != null) { 
     try { 
     props.load(in); 

     props.setProperty("username", "temtem"); 

     FileOutputStream out = new FileOutputStream(in.toString()); 
     props.store(out, null); 
     out.close(); 
    } finally { 
    in.close(); 
    } 

코드 위의 편집을 할 사전

에서

덕분에 자바 프로세스의 현재 작업 디렉토리, 어떤이 상대적으로 :(

+0

이 질문은 이해가되지 않습니다. Eclipse에서이 클래스를 실행 중임을 보여줍니다. –

+0

예. 이클립스에서 이걸 달리는거야. 그것은 영향을 줍니까? 서블릿에서 올바른 절대 경로를 실행하려면 어떻게해야합니까? – user3264438

답변

0

new File(...) 취급 경로를 작동하지 않습니다 독립 실행 형 서버 시스템에서 최종 배포를위한 서블릿을 작성하는 경우 반드시 이것이 현명한 위치에 의존 할 필요는 없습니다. 이러한 종류의 구성 파일은 응용 프로그램의 WEB-INF 아래에 있으며 ServletContextgetResource 또는 getResourceAsStream 메서드를 사용하여 액세스하면이 특정 웹 응용 프로그램의 위치와 상대 경로를 확인할 수 있습니다.

Properties props = new Properties(); 
InputStream in = getServletContext().getResourceAsStream("/WEB-INF/ora2.config.properties"); 
if(in != null) { 
    try { 
    props.load(in); 
    } finally { 
    in.close(); 
    } 
} 

당신이 절대적으로 java.io.File보다는 URL 또는 입력 스트림으로 속성에 액세스해야하는 경우 (예를 들어, 당신이 직접 스트림 또는 Properties 객체를 받아 들일 수 없다 타사 코드의 경로를 통과해야하는 경우) ServletContext는 또한 다음을가집니다. getRealPath 방법을 사용할 수 있지만 웹 응용 프로그램을 디스크의 실제 디렉토리로 확장해야하는 경우 WAR 파일에서 직접 실행하는 경우에는 작동하지 않습니다. getResource 메서드에는이 제한이 없습니다.

+0

내 속성 파일이 WEB-INF 아래에있는 반면 서블릿에서 실행할 코드를 정확히 제공 할 수 있습니까 – user3264438

+0

@ user3264438 도움이됩니까? –

+0

그 코드는 또한 수정 된 변수를 특성 파일에 저장할 수 있습니까? – user3264438

관련 문제