我正在寻找使用嵌入式Jetty和Jersey在Java中编写独立REST应用程序.
Jersey文档表明,在Servlet 3.0容器中,Jersey应该能够自动注册Web应用程序,而无需Web描述符文件或代码:https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.3
但是,我怀疑我没能以正确的方式(或者根本)正确地调用Jersey:
ServletHandler handler = new ServletHandler();
Server server = new Server(8080);
server.setHandler(handler);
server.start();
server.join();
我尝试过其他一些东西,但大多数其他例子似乎都试图解决其他问题.
我想要实现的完整示例代码在这里:
https://github.com/dowlingw/jax-rs-plzhalp
(不相关:我考虑过使用DropWizard,但不想要提供的所有内容)
干杯:)
解决方法:
这是一个简单的例子
服务器:
package com.mayapp.app;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ServerProperties;
import org.glassfish.jersey.servlet.ServletContainer;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
Server server = new Server(8112);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
ServletHolder h = new ServletHolder(new ServletContainer());
h.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "com.myapp.resources");
h.setInitOrder(1);
context.addServlet(h, "/*");
server.setDumpAfterStart(true);
try {
server.start();
}catch(Exception ex) {
ex.printStackTrace();
}
}
}
和资源:
package com.myapp.resources;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("hello")
public class HelloWorldResource {
@GET
@Produces("text/plain")
public String getHello() {
return "hello world";
}
}