【问题标题】:JavaEE7 (GF4) @Inject ServletContext context returns java.lang.NullPointerExceptionJavaEE7 (GF4) @Inject ServletContext 上下文返回 java.lang.NullPointerException
【发布时间】:2013-11-11 09:05:34
【问题描述】:

我是 CDI 的新手,也许我做错了什么。 Here 它说可以注入 ServletContext。所以我有以下代码:

public class ComponentInitializator {

@Inject 
private ServletContext context;

public void initialize(){...}
}

但它返回 java.lang.NullPointerException。怎么解决?

【问题讨论】:

    标签: java jakarta-ee dependency-injection glassfish cdi


    【解决方案1】:

    ServletContext- 定义了一组 servlet 用来与其 servlet 容器通信的方法。该资源将被注入到 Servlet 上。将您的ComponentInitializator 类设为Servlet,而不是尝试访问ServletContext

      @WebServlet("/ComponentServlet")
      public class ComponentInitializator extends HttpServlet{
        @Inject
        private ServletContext context;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
                          throws ServletException, IOException {
            PrintWriter out=resp.getWriter();
            out.println(context);
        }
     }
    

    【讨论】:

    • 谢谢。是的你是对的。但是如果我不希望这个类成为一个 servlet,我该怎么办?
    • 这可能对你有帮助stackoverflow.com/questions/2728877/…
    • 但是,@Inject 可能不适用于没有 Web 组件(Servlet、JSF 等)的 ServletContext。
    • ServletContext 中的 DI 没有意义,因为有一个方法 getServletContext()。因此,它计划仅用于 Web 组件并不明显......
    【解决方案2】:

    Afaik 它应该可以工作。

    这个模块很精简,所以它可能更容易使用并且省去了麻烦:

    http://deltaspike.apache.org/servlet.html

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 2017-08-07
      • 2021-04-02
      • 2011-06-11
      • 2011-04-18
      • 1970-01-01
      相关资源
      最近更新 更多