2017-09-22 3 views
-1

WEB-INFディレクトリにあるいくつかのファイルでgetRealPath()メソッドを使用するには、ServletContextにアクセスする必要があります。しかし、私がこの作業を行うために必要なクラスは、JAX-RSから以前に作成されたリクエストに基づいていくつかのバックエンド処理に使用される非CDIクラスです。 JAX-RSリクエストのライフサイクルの外にServletContextを取得するにはどうすればよいですか?CDIライフサイクルの外でServletContextを挿入する方法

それは私がトリックは@WebServlet注釈を参照して、Java EEアプリケーションの起動時にサーブレットをロードすることで、この

+0

バックエンド処理の意味は? Ejb? – empyros

+0

私は正直に分かりません。これは私にはかなり新しいものです。 リクエストは後で別のスレッドによって処理されるようにキューに入れられ、RESTコールは単にそれがキューに入ると言うために200を返します。しかし、WARのWEB-INFの中のファイルに対する要求からスケジューリングされた操作を実行するために、REST呼び出しが戻った後に、他のスレッドでServletContextが必要です。しかし、それは別のスレッド上にあり、JAX-RS呼び出しがすでに返されているため、ServletContextはキューに入れられていてもnullになりました。 – seanr8

+0

'getRealPath()'はポータブルではないため、使用しないでください。この[回答](https://stackoverflow.com/a/12160863/1426227)を参照してください。 –

答えて

0

に行くかの方法を変更した場合、私は、Wildfly 10を使用しています。 Servlet.init()メソッドは、コンテナの起動時に呼び出されます。このメソッドは、ServletContextを使用します。この場合、getRealPath()を呼び出し、静的変数に格納します。 RealPathServlet.getRealPath()を呼び出して、残りのアプリから価値にアクセスすることができます。

@WebServlet(value="/real-path", loadOnStartup=1) 
public class RealPathServlet extends HttpServlet { 

    private static String realPath; 

    public void init(ServletConfig config) throws ServletException { 
     super.init(config); 
     realPath = config.getServletContext().getRealPath("yolo"); 
     Logger.getLogger(ContextPathServlet.class.getName()).info("Real path is " + realPath); 
    } 

    public static getRealPath() { 
     return realPath; 
    } 

    ... 
} 
関連する問題