如何在CDI生命周期之外注入ServletContext

时间:2017-09-22 15:43:32

标签: java jax-rs wildfly

我需要访问ServletContext才能对我的WEB-INF目录中的某些文件使用getRealPath()方法。但是,我需要在其中工作的类是非CDI类,它基于之前从JAX-RS发出的请求用于某些后端处理。如何在JAX-RS请求的生命周期之外获取ServletContext?

我使用Wildfly 10,如果这改变了我的方式

1 个答案:

答案 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;
    }

    ...
}