2011-10-04 5 views
1

내 Java 웹 응용 프로그램에서 속성 파일을 읽으려고합니다. 나는이 솔루션을 시도 :Java 웹 응용 프로그램에서 속성 파일을 읽을 수 없습니까?

Where to place and how to read configuration resource files in servlet based application?

Howto access properties file from Java EE web application?

그러나 그들 중 누구도 나를 위해 일하지 않는다.

enter image description here

특성 파일이 클래스에 배치하고 심지어 내가 절대 경로를 넣어 작동하지 않았다 읽는 코드 : 여기

내 응용 프로그램의 구조입니다. A는 일반적인 Java 클래스입니다.

public class A { 
    public A() { 
     try { 
      Properties p = new Properties(); 
      p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties")); 
      String n = p.getProperty("name"); 
      System.out.println("name: " + n); 
     } catch (Exception ex) { 
      Logger.getLogger(A.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

어떤 생각 : 그러나 모든 읽기 속성 코드가 여기에

내가 사용한 코드는 서블릿 클래스 (ProcessRequest.java)의 장소 인 경우 마법처럼 일했다?

답변

6

p.load(getServletContext().getResourceAsStream("/WEB-INF/servlets/a.properties")); 

그러나 당신은 클래스 패스 루트에서 얻을하는 데 노력하고 있습니다. 선도 /은 클래스 경로 루트에 상대적인 경로를 만듭니다. 나중에 수도, 구체적인 문제에

p.load(this.getClass().getClassLoader().getResourceAsStream("a.properties")); 

관련없는을 : 현재 클래스가 이미 servlets 패키지에 가정,

p.load(this.getClass().getClassLoader().getResourceAsStream("/servlets/a.properties")); 

나 :

그에 따라 경로를 수정 WAR 외부의 특성 파일을 외부 위치로 이동하면 n없이 파일을 쉽게 편집 할 수 있습니다. eed를 매번 다시 빌드/재배포하려면 현재 클래스의 클래스 로더 대신 스레드의 컨텍스트 클래스 로더를 사용하는 것이 좋습니다. 그것은 모든 상황에서 작동합니다 :
p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("servlets/a.properties")); 

가 (경로가 여기 /로 시작할 필요하지 않습니다, 그것은 항상 클래스 패스 루트에 상대적인 때문에)

+0

감사합니다. 그러나 웹 페이지 폴더로 이동하면 어떻게 그 속성 파일을 읽을 수 있습니까? – ipkiss

+1

그 첫 번째 링크는 ServletContext # getResourceAsStream()입니다. 하지만 클래스 패스가 아닌 웹 콘텐츠에 두 번 있어야한다고 생각합니다. – BalusC

+0

하지만 읽기 속성 코드가 Servlet 클래스 (ServletContext가있는 클래스)에있는 경우에만 작동합니다. 내 경우에는 작동하지 않습니다. 즉, 읽기 코드가 정상적인 클래스에 있음을 의미합니다 (A.java, 일반 Java 클래스에는 그런 ServletContext가 없습니다.) – ipkiss

0

응용 프로그램을 빌드 한 후 WEB-INF/servlets 아래의 등록 정보 파일이 보이십니까? 그렇다면 다음 줄을 사용해보십시오. 대신 당신은 servlets 패키지에 넣어 한이

p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties")); 
+0

그것은 거기 끝나지 않을 것 . – BalusC

관련 문제