2013-03-12 5 views
1

Java Servlet (http-servlet 확장)에서 속성 파일을 사용하는 방법을 찾으려고합니다. 나는 ClassLoader#getResourceAsStream()ServletContext#getResourceAsStream()을 사용해 보았습니다. 그러나 내가하고있는 것이 무엇이든간에 아무 것도 작동하지 않으며 항상 NullPointerException입니다.속성 파일이 작동하지 않습니다

database.properties 파일 :

Driver=org.postgresql.Driver 
Protokoll=jdbc:postgresql:// 
Speicherort=localhost/ 
Datenbank=Ticketshop 
User=postgres 

코드 :

p = new Properties(); 
p.load(getServletContext().getResourceAsStream("/WEB-INF/properties/database.properties")); 
protokoll = p.getProperty("Protokoll"); 
speicherort = p.getProperty("Speicherort"); 
user = p.getProperty("User"); 
driver = p.getProperty("Driver"); 
password = p.getProperty("Password"); 
database = p.getProperty("Datenbank"); 

파일 트리 :

Java Resources 
    |-- src 
    |-- login 
     |-- Login.java 
WebContent 
    |-- WEB-INF 
    |-- properties 
     |-- database.properties 
+0

질문에 예외를 포함하십시오. – Henrik

+0

어떤 줄이 널 포인터 예외를 발생합니까? – Jason

+0

나는 그 선에서 변수 p에 프로퍼티를로드하는 중에 오류가 발생합니다. -> p.load (...); – Maexwell

답변

2

가 왜 ResourceBundle를 사용하지 않습니다. 사용하기가 매우 쉽습니다. 속성이 소스 폴더에 파일을 배치하고

import java.util.MissingResourceException; 
import java.util.ResourceBundle; 

public class DatabaseConstantsAccessor 
{ 
    // don't include .properties extension, just specify the name without extension 
    private static final String BUNDLE_NAME = "database"; 

    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); 

    private ConstantsAccessor() 
    { 
    } 

    public static String getString(String key) 
    { 
     try 
     { 
      return RESOURCE_BUNDLE.getString(key); 
     } 
     catch (MissingResourceException e) 
     { 
      return '!' + key + '!'; 
     } 
    } 
} 

그리고 당신은 코드를 다음 속성 사용에 액세스 할 위치 : 나는 "DJ 아킬"에 동의

String driverString=DatabaseConstantsAccessor.getString("Driver"); 
Integer intProp=Integer.valueOf(DatabaseConstantsAccessor.getString("SomeIntProperty")); 
+0

괜찮습니다. 내가 당신의 코드를 시도했지만 여전히 "HTTP Status 500 - Error를 인스턴스화하는 서블릿 클래스 login.Login"을 얻습니다. 심각도 : 서블릿 로그인에 대한 예외를 할당합니다. java.util.MissingResourceException : 기본 이름 데이터베이스에 대한 로캘 de_AT를 찾을 수 없습니다. – Maexwell

+0

@Maexwell ** database.properties ** 파일이 ** src ** 폴더에 있는지 확인하십시오. . 여전히 일이 잘 풀리지 않으면 다음과 같이 초기화 호출을 변경하십시오.'private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle (BUNDLE_NAME, "");' –

+0

고맙습니다! 그것은 지금 일하고있다 :-) (src 폴더에있는 패키지에 property-file을 두는 실수를 저질렀다.) 감사 :-) – Maexwell

0

만의 ResourceBundle를 얻기 위해, 클래스 디렉토리에 있어야합니다.

따라서 "/ WEB-INF/클래스 /properties/database.properties"에 파일을 넣습니다. 분명히 src 디렉토리에 파일을 넣어야하고 컴파일러가 자동으로 이동해야합니다.

마르코스

+0

감사합니다! 하지만 난 여전히 클래스를 사용하지 않고 같은 오류가 발생합니다. – Maexwell

1

모든 이름을 확인하십시오. 귀하의 코드가 잘 작동합니다.

+0

코드는 Get/Post 메서드로 작성해야합니다. – neonleo

1

을 작동하려면

p.load(getServletContext().getClassLoader().getResourceAsStream("properties/database.properties")); 

그리고 BTW 당신이 /WEB-INF/classes 폴더에 move the database.properties에 필요한이

편집을 폴더 구조가되어야한다 시도

WEB-INF 
    | classes 
     |properties 
     database.properties 
+0

여러 번 시도했지만 여전히 작동하지 않습니다 – Maexwell

+0

제 편집 – Sudhakar

+0

을 확인하십시오. 아무것도 ... web.xml에서 아무것도 편집해야합니까 ?? java.lang.NullPointerException \t (javax.servlet.GenericServlet.getServletContext (GenericServlet.java:125) \t at login.Login. (Login.java:23) – Maexwell

관련 문제