1

私は実際にサーブレットを使ったプログラムを持っています:

@WebServlet("/Controler")
public class Controler extends HttpServlet {

}

file.properties私のプログラムでプロパティファイルを使用する必要があります。それをロードするには、クラスがあります:

public class PropLoader {

    private final static String m_propertyFileName = "file.properties";

    public static String getProperty(String a_key){

        String l_value = "";

        Properties l_properties = new Properties();
        FileInputStream l_input;
        try {

            l_input = new FileInputStream(m_propertyFileName); // File not found exception
            l_properties.load(l_input);

            l_value = l_properties.getProperty(a_key);

            l_input.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return l_value;

    }

}

プロパティ ファイルは WebContent フォルダーにあり、次のコマンドでアクセスできます。

String path = getServletContext().getRealPath("/file.properties");

しかし、サーブレット以外のクラスでこれらのメソッドを呼び出すことはできません...

PropLoader クラスのプロパティ ファイルにアクセスするにはどうすればよいですか?

4

2 に答える 2

2

webapp 構造内からファイルを読み取りたい場合は、ServletContext.getResourceAsStream(). そしてもちろん、webapp からロードするため、webapp を表すオブジェクトへの参照が必要です: ServletContext. このような参照を取得するinit()には、サーブレットでオーバーライドして を呼び出しgetServletConfig().getServletContext()、ファイルをロードするメソッドにサーブレット コンテキストを渡します。

@WebServlet("/Controler")
public class Controler extends HttpServlet {
    private Properties properties;

    @Override
    public void init() {
        properties = PropLoader.load(getServletConfig().getServletContext());
    }
}

public class PropLoader {

    private final static String FILE_PATH = "/file.properties";

    public static Properties load(ServletContext context) {
        Properties properties = new Properties();
        properties.load(context.getResourceAsStream(FILE_PATH));
        return properties;
    }
}    

一部の例外を処理する必要があることに注意してください。

別の解決策はWEB-INF/classes、デプロイされた webapp の下にファイルを配置し、ClassLoader を使用してファイルをロードすることです: getClass().getResourceAsStream("/file.properties"). この方法では、への参照は必要ありませんServletContext

于 2013-07-17T13:53:22.420 に答える