Я бьюсь головой об стену от этого. Я написал крошечный встроенный сервер Jetty (Jetty 9.4.18, Jersey 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-контент НЕ работает нормально. Поэтому я либо получаю работающий статический HTML-сервис на /app/
, либо работающий REST-сервис под /app/service
, но у меня не может быть обоих. Что я делаю неправильно? Файл RestService.java начинается как:
@Path("/service")
public class RestService {
Буду признателен за любую помощь, потому что я чувствую, что застрял здесь на линии в один ярд.