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

时间:2011-10-10 09:20:54

标签: java rest jax-rs servlets grizzly

我正在开发一个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”,但这也无济于事。

有什么想法吗? 干杯!

2 个答案:

答案 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上下文。