[英]REST and static content in jetty server
我想要一个(嵌入式)jetty + jersey服务器,该服务器提供REST api(“ / resource”路由上的GET和POST),但也提供一些静态内容(“ /”上的index.html,bundle.js) 。 我只能让/ resource部分起作用-GET / POST经过curl测试
curl -X POST -H 'Content-Type: application/json' -d '{"resource":"FOOBAR"}' http://localhost:8080/resource
但是,使用此设置,“ /”路径返回404:
public static void main(String[] args) {
Server jettyServer = new Server(8080);
ResourceConfig rc = new ResourceConfig();
JSONResource resource = new JSONResource();
rc.register(resource);
ServletContainer sc = new ServletContainer(rc);
ServletHolder servletHolder = new ServletHolder(sc);
// ServletHolder servletHolder = new ServletHolder("default", new DefaultServlet());
// static content
servletHolder.setInitParameter("resourceBase", "./src/webapp/");
ServletContextHandler context = new ServletContextHandler();
context.addServlet(servletHolder, "/*");
jettyServer.setHandler(context);
try {
jettyServer.start();
jettyServer.join();
} catch (Exception e) {
e.printStackTrace();
} finally {
jettyServer.destroy();
}
}
路径:
@Path("/resource")
public class JSONResource {
Resource resource = Resource.getInstance();
@GET
@Produces(MediaType.APPLICATION_JSON)
public String getStringResource() {
return this.resource;
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response putStringResource(Resource json) {
this.resource.setResource(json.getResource());
return Response.status(Status.OK).entity(json).build();
}
}
和Resource类的完整性:
public class Resource {
private String resource = "";
private Resource() {
}
private static class Holder {
private static final Resource INSTANCE = new Resource();
}
public static Resource getInstance() {
return Holder.INSTANCE;
}
public String getResource() {
return resource;
}
public void setResource(String resource) {
this.resource = resource;
}
@Override
public String toString() {
return resource;
}
}
由user3732793在以下每个答案中进行了编辑
// ---JSON RESOURCE---//
JSONResource resource = new JSONResource();
ResourceConfig rc = new ResourceConfig();
rc.register(resource);
ServletContainer sc = new ServletContainer(rc);
ServletHolder servletHolder = new ServletHolder(sc);
ServletContextHandler jsonResourceContext = new ServletContextHandler();
jsonResourceContext.addServlet(servletHolder, "/*");
// ---STATIC RESOURCE---//
ResourceHandler staticResourceHandler = new ResourceHandler();
staticResourceHandler.setResourceBase("./src/webapp/");
ContextHandler staticContextHandler = new ContextHandler("/");
staticContextHandler.setHandler(staticResourceHandler);
// ---ADD HANDLERS---//
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { jsonResourceContext, //
staticContextHandler, //
new DefaultHandler() //
});
jettyServer.setHandler(handlers);
可以做到一点点冗长吗?
您的服务器类只有一个用于静态内容的处理程序。 您将需要一个用于JSON内容的附加处理程序。 然后必须将其分配给处理程序列表。
例如
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { jsonRessourcehandler, servletContextHandler, new DefaultHandler() });
server.setHandler(handlers);
还提供类似json的内容,您可以正确地搜索JERSEY库/示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.