我正在把头撞在墙上。我写了一个微型嵌入式码头服务器(jetty 9.4.18,球衣1.19.4),我一生都无法尊重上下文路径和部署的REST服务。
我尝试了setContextPath,但是在ServletContextHandler上却无法使用,所以我选择了WebAppContext。
这大约很简单:
Server jettyServer = new Server(9999);
// set up the web app
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/app/");
webapp.setResourceBase("web");
jettyServer.setHandler(webapp);
// add REST service
ServletHolder jerseyServlet = webapp.addServlet(ServletContainer.class, "/service/*");
final ResourceConfig resourceConfig = new ResourceConfig(RestService.class);
resourceConfig.register(MultiPartFeature.class);
jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "org.futureboy.app.server.rest");
try {
jettyServer.start();
jettyServer.join();
} catch (Exception e) {
e.printStackTrace();
//jettyServer.stop();
jettyServer.destroy();
}
静态HTML文件存储在web
目录中,如果我按如下所示进行操作,则可以正常工作:
ServletHolder jerseyServlet = webapp.addServlet(ServletContainer.class, "/service/*");
但是,这意味着REST服务(在/ app / service下运行)不起作用。如果我换掉这一行:
ServletHolder jerseyServlet = webapp.addServlet(ServletContainer.class, "/*");
然后,REST服务可以正常工作,但是现在静态HTML内容不能正常工作。因此,我要么在/app/
上获得了可运行的静态HTML服务,要么在/app/service
下获得了可用的REST服务,但是我不能同时拥有这两种服务。我究竟做错了什么? RestService.java文件的开始类似:
@Path("/service")
public class RestService {
任何帮助将不胜感激,因为我觉得我被困在这里的一码线上。
答案 0 :(得分:1)
为什么要让Jersey提供静态内容?
这不是JAX-B服务器的角色。
做什么...
WebAppContext
切换到ServletContextHandler
(您不需要WebAppContext
的开销,也不需要任何WebAppContext
的字节码扫描或注释扫描部署技术带到桌子上。DefaultServlet
的默认网址格式"/"
上添加一个"default"
。这些更改中,Jetty将从您的资源库中提供静态内容。
Jetty端配置和DefaultServlet用法的一些先前答案/示例:
关于如何配置Jersey不提供静态内容的答案很多。
我最喜欢的是...提供的解决方案。