我需要访问ServletContext才能对我的WEB-INF目录中的某些文件使用getRealPath()方法。但是,我需要在其中工作的类是非CDI类,它基于之前从JAX-RS发出的请求用于某些后端处理。如何在JAX-RS请求的生命周期之外获取ServletContext?
我使用Wildfly 10,如果这改变了我的方式
答案 0 :(得分:0)
诀窍是在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;
}
...
}