contextInialized メソッド内で getServletContext() を呼び出すことはできますか?

StackOverflow https://stackoverflow.com/questions/2320972

質問

を実装するサーブレットの作成 contextInitializer このコードのインターフェイス、

次に内部のファイルにアクセスします contextinitialized() この行を使用して

InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.properties"));

この例外が発生しました

java.lang.NullPointerException         at      
    javax.servlet.GenericServlet.getServletContext(GenericServlet.java:160)

何か案は ?

役に立ちましたか?

解決

ServletContextListener#contextInitialized() をあなたに与えます ServletContextEvent を提供する引数 getServletContext() 方法。

したがって、これは次のようにする必要があります。

public void contextInitialized(ServletContextEvent event) {
    InputStream input = event.getServletContext().getResourceAsStream("/WEB-INF/file.properties"));
    // ...
}

とはいえ、通常はサーブレットにこのインターフェイスを実装させたくありません。聞き手は別の目的を持っています。をオーバーライドするだけです HttpServlet#init() 次のように:

protected void init() throws ServletException {
    InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.properties"));
    // ...
}

他のヒント

私は、あなたが参照するインターフェースContextInitializerに慣れていないんだけど、あなたは私の最初の反応を得ている例外に基づいて何が、あなたがcontextInitializedメソッド内のgetServletContextを呼び出すことはできませんということではありません。あなたがチェックアウトする場合は http://www.docjar.com/ HTML / API / javaxの/サーブレット/ GenericServlet.java.html に、あなたはライン160で、のServletConfigからコンテキストを取得しようとしている、と明らかにそのサーブレットのServletConfigオブジェクトが初期化されていない、ということがわかりますまだます。

(私はあなたが作業しているものの環境に慣れていないよので、 - (私の意見では)あなたの最善の策は、あなたがたServletConfigとのServletContextの両方が初期化されているポイントで実行したいとしているコードを実行することです私はそれがどこから来たのか私にはわからないので、私は)、ContextInitializerに精通していないよ、私はできない、本当に助けすぎ限り、サーブレットのライフサイクルが進むにつれてます。

言ったように あなたがやろうとしている正確に何にもよりますが、静的なフィールドとして、あなたの入力ストリームを持つ検討することができます。あなたのdoGet / doPostメソッドの内部では、あなたはそれが初期化されていますかどうかを確認したい - それは、通常のように、そして偉大な、キャリーを持っている場合。それはしていない場合や、その後、必要に応じてそれを初期化。あなたがどこへ行くか良いことがありますので、あなたのコンテキストおよび設定は、doGetメソッド/ doPostメソッドで利用可能であるべきである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top