JAX-RS/Jersey + Tomcat:ServletContext为空

3
我试图获取在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。

1个回答

11

只有当你使用服务方法访问资源时才会发生注入。

@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() - Marco Lackovic
@Krige,当您使用REST客户端调用资源方法时会发生这种情况吗? - toniedzwiedz
谢谢,这对我也有帮助,而且不容易找到! - phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接