我试图在我编写的在 Grizzly 上运行的 Servlet 中获取一些注入的上下文(例如 Session 或 HttpServletRequest),但我所做的似乎没有任何效果。由于以下错误,整个过程似乎过早地停止了:
SEVERE: Missing dependency for field: javax.servlet.http.HttpServletRequest com.test.server.LolCat.hsr
服务器非常简单,它由两个文件组成,静态入口点(Main.java):
package com.test.server;
import java.io.IOException;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.grizzly.http.server.HttpServer;
import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.ClassNamesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
public class Main {
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost/").port(8080).build();
}
public static final URI BASE_URI = getBaseURI();
public static void main(String[] args) throws IOException {
ResourceConfig rc = new ClassNamesResourceConfig(LolCat.class);
HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
System.in.read();
httpServer.stop();
}
}
和 serlvet (LolCat.java):
package com.test.server;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
@Path(value = "/lol")
public class LolCat {
@Context HttpServletRequest hsr;
@GET
@Path(value="/cat")
public String list() {
return "meow";
}
}
具体来说,上面源文件中的@Context-line 是我所有问题的来源和解决方案。我需要它,根据我读过的关于 Jersey 和 Servlets 的所有内容,它应该可以工作,但可惜它没有。我也尝试过使用 GrizzlyWebContainerFactory 而不是 GrizzlyServerFactory,但无济于事。
作为参考,该项目使用以下依赖项进行编译:
- org.glassfish.grizzly:grizzly-framework:jar:2.2.21
- org.glassfish.grizzly:grizzly-http:jar:2.2.21
- org.glassfish.grizzly:grizzly-http-servlet:jar:2.2.21
- org.glassfish.grizzly:grizzly-http-server:jar:2.2.21
- com.sun.jersey:jersey-server:jar:1.17
- com.sun.jersey:jersey-servlet:jar:1.17
- com.sun.jersey:jersey-core:jar:1.17
- javax.servlet:javax.servlet-api:jar:2.5.0
- com.sun.jersey:jersey-grizzly2:jar:1.17
- com.sun.jersey:jersey-grizzly2-servlet:jar:1.17
- asm:asm:jar:3.3.1