带有嵌入式服务器的 JAX-RS
澄清:这个问题是关于GZIPping基于JAX-WS的REST服务,但我决定改变主题,使其更容易找到
我正在通过 JAX-WS 实现 REST 服务,并使用标准发布它(原因是我想避免使用 servlet 容器或应用程序服务器)。Provider <Source>
Endpoint
有没有办法使服务器到gzip响应内容,如果存在?Accept-Encoding: gzip
操作方法
提供的示例实际上有效,它允许您在没有servlet容器的情况下在嵌入式轻量级服务器之上创建JAX-RS样式的服务器,但是需要考虑的时刻很少。nicore
如果您希望自己管理课程(并在启动期间节省时间),则可以使用以下方法:
例
JAX-RS 你好世界级:
@Path("/helloworld")
public class RestServer {
@GET
@Produces("text/html")
public String getMessage(){
System.out.println("sayHello()");
return "Hello, world!";
}
}
主要方法:
对于简单服务器:
public static void main(String[] args) throws Exception{
DefaultResourceConfig resourceConfig = new DefaultResourceConfig(RestServer.class);
// The following line is to enable GZIP when client accepts it
resourceConfig.getContainerResponseFilters().add(new GZIPContentEncodingFilter());
Closeable server = SimpleServerFactory.create("http://0.0.0.0:5555", resourceConfig);
try {
System.out.println("Press any key to stop the service...");
System.in.read();
} finally {
server.close();
}
}
对于灰熊2:
public static void main(String[] args) throws Exception{
DefaultResourceConfig resourceConfig = new DefaultResourceConfig(RestServer.class);
// The following line is to enable GZIP when client accepts it
resourceConfig.getContainerResponseFilters().add(new GZIPContentEncodingFilter());
HttpServer server = GrizzlyServerFactory.createHttpServer("http://0.0.0.0:5555" , resourceConfig);
try {
System.out.println("Press any key to stop the service...");
System.in.read();
} finally {
server.stop();
}
}
已解决的依赖项:
简单:
灰 熊:
- 灰熊框架
- 灰熊
- grizzly-http-server (不同的存储库!
- 平纹针织灰熊2
泽西:
通知
确保存档未进入类路径,因为它与 Jersey 的实现冲突。这里最糟糕的事情是没有日志记录的静默404错误 - 只记录了一个关于级别的小注释。javax.ws.rs
FINER