2011-03-12 5 views
3

내 응용 프로그램에서 특성 파일의 컨텍스트 경로를 읽을 시도하고,자바의 webservice에서 속성 파일의 컨텍스트 경로를 얻는 방법은 무엇입니까?

properties.load(this.getClass().getResourceAsStream(path)); 



import java.util.Properties; 

public class test1 { 

    public String getValues() 
    { 
     PropertiesFileReader fileReader = new PropertiesFileReader(); 

     Properties prop = fileReader.getProp("/messages/AttachFile.properties"); 

     String out = prop.getProperty("FILE_NAME"); 

     return out; 
    } 
} 

속성 파일이 WEB-INF -> classes -> messages -> myfile 을 받고있다하지만 난 WEB-INF -> messages -> myfile 같은 다른 폴더에이 파일을 이동하면 그렇지 않은 경우에 작동

편집 ... 경로를 얻을 수가 : 내가 서블릿을 사용하고 있지 않다 ...

+1

mebbe 단지 클래스 경로 문제입니다. 클래스 패스에 다른 폴더를 추가 해보고 괜찮은지 확인해보십시오. – govi

+0

@govi 아니요. 그곳에 저를 데려다주지 않습니다. 어떤 아이디어 가든지 –

답변

0

를 그냥 앞에 추가해야 /WEB-INF/ :

"/WEB-INF/messages/myfile"; 
+0

서블릿을 사용하지 않기 때문에 서블릿 컨텍스트가 필요 없습니다. –

+0

Maven 리소스를 사용하여 Maven을 사용하는 것이 좋습니다. 플러그인 – bluefoot

2

Class#getResourceAsStream()이 클래스 경로에서 자원을로드하는 동안 새 경로가 클래스 경로의 일부가 아니므로 실패합니다. /WEB-INF/classes은 기본적으로 Servlet API 사양에 지정된대로 클래스 경로의 일부로, 이것이 작동하는 이유입니다. 클래스 패스에 유지하거나 클래스 패스에 새로운 경로 /WEB-INF/resources을 추가하는 것이 좋습니다.

이클립스와 같은 IDE를 사용하는 경우, 당신은 (빌드하는 동안 어쨌든 다시 /WEB-INF/classes로 이동 것이다) 프로젝트의 빌드 경로에 소스 폴더로 추가하여 그것을 할 수 있습니다. 또는 Java 소스 루트에 resources 패키지를 만든 다음 거기에 파일을 넣을 수도 있습니다. 클래스 패스의 일부가 될 것입니다.

0

서블릿을 사용하지 않는다고 할 때, 당신은 무엇을 의미합니까? 이 코드는 어떻게 실행됩니까?
기본적으로 서블릿을 사용하면 WEB-INF/classes 및 WEB-INF/lib 만 클래스 경로에 있습니다. 따라서 클래스 로더를 사용하여 리소스에 액세스 할 수 없습니다. 그러나 ServletContext를 사용하여 액세스 할 수 있습니다. 따라서 코드가 Servlet/JSP로 실행된다고 가정하면 다음을 수행 할 수 있습니다.

getServletContext().getResourceAsStream("your resource starting from web-application root"); 
관련 문제