【问题标题】:JAX-RS/Jersey + Tomcat ServletContext is nullJAX-RS/Jersey + Tomcat ServletContext 为空
【发布时间】:2012-06-03 23:52:47
【问题描述】:

我正在尝试获取部署在 Tomcat 中的 Jersey 资源的 servlet 上下文,但每当我尝试这样做时,我都会得到一个空指针异常。我的代码如下:

@Path("/resource")
public class MyResource {

@Context ServletContext context;

public MyResource(){

    System.out.println("Context: "+context.getRealPath("/"));

}

}

我的 web.xml 是这样配置的:

<servlet>
  <servlet-name>MyResource</servlet-name>
<servlet-class>
  com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
  <init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>com.mypackage</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>MyResource</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>   

任何线索我的问题可能是什么?使用 Tomcat 6.0.33 和 Jersey 1.12。

【问题讨论】:

    标签: tomcat servlets jersey jax-rs


    【解决方案1】:

    在您使用服务方法访问资源之前,不会发生注入。

    @Path("/resource")
    public class MyResource {
    
       @Context ServletContext context;
    
       public MyResource() {
           System.out.println(context); //null
       }
    
       @GET
       @Path("subresource")
       public Response getASubResource() {
           System.out.println(context); // not null
           return Response.ok("OK").build();
       }
    
    
    
    }  
    

    【讨论】:

    • 我也有同样的问题。我尝试使用 Tom 的代码(我复制并粘贴了它),但我得到了两次 null,来自构造函数和方法。我从运行在同一台服务器上的 JSP 页面调用了该方法,只是简单地 new MyResource().getASubResource()
    • @Krige 使用 REST 客户端调用资源方法时会发生这种情况吗?
    • 谢谢,这对我也有帮助,但不容易找到!
    猜你喜欢
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2014-01-24
    • 2016-12-02
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多