-1
我需要訪問ServletContext以對我的WEB-INF目錄中的某些文件使用getRealPath()方法。但是,我需要做的工作是非CDI類,它用於根據JAX-RS早期提出的請求進行一些後端處理。如何在JAX-RS請求的生命週期之外獲取ServletContext?如何在CDI生命週期之外注入ServletContext
我使用Wildfly 10,如果改變了我會去這個
我需要訪問ServletContext以對我的WEB-INF目錄中的某些文件使用getRealPath()方法。但是,我需要做的工作是非CDI類,它用於根據JAX-RS早期提出的請求進行一些後端處理。如何在JAX-RS請求的生命週期之外獲取ServletContext?如何在CDI生命週期之外注入ServletContext
我使用Wildfly 10,如果改變了我會去這個
訣竅的方法是在Java EE應用程序的啓動時加載一個servlet,見@WebServlet
註解。在容器啓動時調用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;
}
...
}
你是什麼意思後端處理? EJB? – empyros
我真的不知道。這對我來說很新。 請求進入一個隊列,稍後由一個單獨的線程處理,REST調用返回200以表示它將在隊列中。但是,在REST調用返回後,我需要另一個線程上的ServletContext在WAR的WEB-INF內的文件上執行從請求計劃的操作。但是由於它在一個單獨的線程上並且JAX-RS調用已經返回,因此ServletContext即使放入隊列中也是空的。 – seanr8
'getRealPath()'是不可移植的,你不能使用它。看到這個[答案](https://stackoverflow.com/a/12160863/1426227)。 –