在Grizzly中注入ServetContext为null,在TomCat 7中不为null

问题描述:

我正在开发Jax-RS RESTful Web服务。虽然我还在编写代码(在Eclipse中),但我希望能够轻松进行调试,所以我决定拥有一个Maven项目,并使用Grizzly Web服务器的依赖关系,允许我仅使用2代码行(甚至不需要构建WAR文件)。在Grizzly中注入ServetContext为null,在TomCat 7中不为null

在我的Web服务实现类(具有@Path)我已经注​​入了上下文成员变量:

@javax.ws.rs.core.Context 
ServletContext context; 

当我检查空上下文变量,它不会,如果我是空构建WAR文件并将其部署到TomCat中,但当我启动我的Grizzly服务器并检查它时,它将为空。启动灰熊V1.9服务器做如下:

String url = "http://localhost:1234"; 
SelectorThread srv = GrizzlyServerFactory.create(url); 

我试图找到与谷歌这一解决方案,有人建议在web.xml中启用“时加载的启动”,但这也没有帮助。

任何想法? 干杯!

虽然这里的其他答案有一定意义,但我并不太确定,因为根据maven依赖关系树,servlet包也包含在内。

我可以通过迁移到不同的Maven依赖关系来解决这个问题。我现在使用

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-grizzly2</artifactId> 
    <version>1.9.1</version> 
</dependency> 

并按照http://blogs.oracle.com/PavelBucek/entry/jersey_grizzly_2_x_integration(样本)的说明使其工作。 servlet上下文现在已成功注入。

我的猜测是你使用了没有Servlet容器扩展的Grizzly。理论上讲,JAX-RS不仅可以在servlet环境中运行,但是不能得到ServletContext或HttpServletRequest或Response。