2016-04-16 30 views
1

奇妙な問題に悩まされています。私は自分のクラス(@Serviceとして定義されている)にServletContextを追加していて、常にnullを返します。 @Autowiredとそれなしの両方を試してみました。Spring ServletContextがnullを返します。

また、アプリの起動時にエラーは発生しませんでした。 i 'はにServletContext.getRealPath( "/ WEB-INF /")' を呼び出すだけNULL値

これは私がそれを使用しようとしているクラスです。

@Service 
public class MyFactory implements ServletContextAware { 

    @Autowired 
    ServletContext servletContext; 

    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 

    private someMethod(){ 
     servletContext.getRealPath("/WEB-INF/"); //this return null 
    } 

} 

PS servletContext自体がありますnullではなく、.getRealPath("/WEB-INF/")メソッド

+0

もちろん、あなた自身が 'new MyFactory()'を呼び出すのではなく、Springがあなたのためにクラスをインスタンス化するようにしていますか? 'someMethod()'は* autowiringが完了したあとも呼ばれます。 – Andreas

+0

はい、どちらも正しい。 – user1935987

答えて

1

問題の説明が混乱しています。 ServletContextを追加すると、はヌル(@Autowiredかどうか)を返し、そうでなければgetRealPath()がヌルを返すと表現したときに、servletContextの値がnullであると聞こえるようになります。

servletContextがnullの場合、servletContext.getRealPath()NullPointerExceptionになります。

servletContextがnullでない場合、servletContext.getRealPath()は成功しますが、を返します。 getRealPath()のJavadocを引用

:サーブレットコンテナが本当パスに与え仮想パスを変換することができない場合

このメソッドはnullを返します。

/WEB-INF/が展開されていない.warファイルにあるのであれば、そこには実際のパスはありません、とgetRealPath()はnullを返します。

+1

申し訳ありません、あなたの問題の説明が十分に明確ではありません。 servletContextがnullです。 – user1935987

関連する問題