2010-02-06 4 views
1
이클립스에서 내 빌드 경로는 다음과 같습니다

:방법 FileInputStream에있는 설정 XML 파일을로드 할 수 있지만, FileNotFoundException이를 점점

ProjectName 
    -- WEB-INF 
     -- classes 
     -- myClass.class 
     -- configs 
     -- myConfig.xml 

는 config 내 절대 경로는 현재 다음과 같습니다

C : \ Development \ Java \ ProjectName \ WEB-INF \ configs \ myConfig.xml

바인딩에 JAXB를 사용하고 있으며 FileInputStream이 필요합니다. FileInputStream은 XML 구성 파일의 스트림이어야합니다. 그러나, 내 config에 대한 FileInputStream 가져 오는 방법을 알아낼 수 없으며 계속 FileNotFoundException 점점.

이 설정을 누군가가 프로젝트 경로를 하드 코드 할 필요가 없도록로드하려는 경우 프로젝트 공개 소스를 공개 할 계획이므로이 설정을로드하고 싶습니다. 누군가가 전체 절대 경로를 하드 코드하는 많은 예제를 보았습니다. 그러나이 코드는 더 유연한 "이와 같이"필요합니다.

새 FileInputStream ("/ WEB-INF/configs/myConfig.xml");

감사합니다.

답변

4

클래스 경로에 있기 때문에 myConfig.xml을 WEB-INF/classes 디렉토리에 넣고 클래스 로더를 통해로드하는 것이 좋습니다. 서블릿 컨텍스트에서 getResourceAsStream()을 호출하면 사용할 수있는 InputStream이 리턴됩니다. 컨텍스트 루트와 관련이 있으므로 WAR를 가져 와서 아무 데나 놓을 수 있습니다. 코드는 여전히 작동합니다.

+0

그래, 나는 그 제안을 몇 가지 서로 다른 시간에 본 것, 그리고 그렇게 그것을 할 수있는 가장 좋은 방법이 있는지 궁금 해요 나는 더 이상 이것을 다루지 않아도된다. –

+0

안녕하세요, @duffymo, 나는 그것에 동의하지 않습니다. 우리는 WEB-INF/classes에있는 코드를 다르게 배포하고 때로는 다른 의미를 가지기 때문에 (예 : 클라이언트가 WEB-INF/config에서 구성 파일을 변경할 수 있음을 알고 있기 때문에) 구성 파일에서 코드를 분리하려는 경우가 많습니다. 우리가 속해 있기 때문에 수업 시간에 아무 것도 만질 수 없습니다. JSP 조각, TLD 파일 등과 같이 WEB-INF 아래에 리소스를 보관하는 것이 가장 합리적입니다. – Yoni

+0

JSP와 같은 것을 WEB-INF 아래에 보관하는 것은 합법적입니다. WEB-INF/classes에 속해 있고 클래스 로더에 의해 액세스되는 것들을 앱에서 읽어야하는 것들을 넣어 두지 않을 것입니다. – duffymo

3

ServletContext.getResourceAsStream() 메서드 (javadoc here) 및 그 변형을 사용하면 WEB-INF에서 상대 경로의 입력 스트림을 쉽게 얻을 수 있습니다.

예를 들어, selvlet 코드에서이 작업을 수행 할 수 있습니다

getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file 
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir 
+0

나는 이것을 먼저 시도했지만, 하지만 그것은 작동하지 않습니다. 둘 다 classpath 루트를보고 시작하고, configs 디렉토리가 런타임 classpath에 없기 때문에, 나는 null을 얻고 있습니다. –

+0

안녕하세요, 당신의 믿음이 틀립니다 :) 그 사람들은 만났습니다. hod는 Class 객체 또는 ClassLoader 객체에서 호출 할 때만 클래스 경로를 조사합니다. servletContext에 사용될 때, 그들은 위에서 설명한 내용을 수행합니다. 정확히 그들의 의도입니다. javadocs에서 읽을 수 있습니다. – Yoni

+0

처음에는 잘못하지 않았을 것입니다. 할 일이있을 것이라고 생각합니까? Eclipse가 ServletContext로 간주하는 것을 어떻게 다루는가? 나는 또한 약간의 연구를했으며 일부 개발자는/WEB-INF 디렉토리가 읽기 전용이라고 언급했다. 그것이 문제의 원인이 될 수 있습니까? –

관련 문제