在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。