我正在开发一个Jax-RS RESTful Web服务。虽然我还在编码(在Eclipse中),但我希望能够轻松调试,所以我决定使用Maven项目并将依赖项用于Grizzly Web服务器,这样我就可以启动服务器了。代码行(甚至不必构建WAR文件)。
在我的web服务实现类(带@Path的实现类)中,我已将上下文注入为成员变量:
@javax.ws.rs.core.Context
ServletContext context;
当我检查上下文变量为null时,如果我构建WAR文件并将其部署在TomCat中,它将不为null,但是当我启动Grizzly服务器然后检查它时它将为null。启动Grizzly v1.9服务器的过程如下:
String url = "http://localhost:1234";
SelectorThread srv = GrizzlyServerFactory.create(url);
我试图通过Google找到解决方案,有人建议在web.xml中启用“load-on-startup”,但这也无济于事。
有什么想法吗? 干杯!
答案 0 :(得分:1)
我的猜测是你在没有Servlet Container扩展的情况下使用Grizzly。从理论上讲,JAX-RS不仅可以在servlet环境中运行,而且还无法获取ServletContext或HttpServletRequest或Response。
答案 1 :(得分:0)
虽然这里的其他答案有道理,但我不太确定,因为根据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上下文。