RESTty服务层未由Jetty嵌入映射

时间:2013-11-16 17:10:12

标签: java servlets jersey jetty

我在Jetty的嵌入式实例中运行Web应用程序。该应用程序已与Vaadin一起实施,并提供了一层RESTful服务。除了服务层无法访问外,一切似乎都很好。对该层的所有请求似乎都由Vaading servlet处理,而不是由Jersey servlet处理。

似乎问题与加载文件web.xml无关,因为在该文件中声明的其他元素(如侦听器)正常工作。令我感到困惑的是,当服务器没有作为嵌入式实例运行时,服务层可以正常工作(每个请求都由正确的servlet调度)。

我正在使用的代码如下:

this.server = new Server();
ServerConnector httpConnector = new ServerConnector(this.server);
httpConnector.setHost("localhost");
httpConnector.setPort(this.port);
httpConnector.setIdleTimeout(30000);
server.addConnector(httpConnector);

WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
if (resourcePath.toLowerCase().endsWith(".war")) {
    webapp.setWar(resourcePath);
} else {
    webapp.setResourceBase(resourcePath);
    webapp.setDescriptor(resourcePath + "/WEB-INF/web.xml");                
}

webapp.setParentLoaderPriority(true);

this.server.setHandler(webapp);
this.server.setStopAtShutdown(true);
this.server.start();

我还尝试以编程方式添加servlet的处理程序,但它不起作用。我写了这样的话:

ServletHolder vaadinHolder = new ServletHolder(
    "Application",
    com.vaadin.terminal.gwt.server.ApplicationServlet.class);
vaadinHolder.setInitParameter("application", "com.yyy.MyApplication");
webapp.addServlet(vaadinHolder, "/*");

ServletHolder jerseyHolder = new ServletHolder(
    "JerseyServices",
    com.sun.jersey.spi.container.servlet.ServletContainer.class);
jerseyHolder.setInitParameter(
    "com.sun.jersey.config.property.packages", "com.yyy.services");
jerseyHolder.setInitOrder(1);
webapp.addServlet(jerseyHolder, "/resources/*");

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。它与 ContextPath 有关。只要我将值/根上下文)替换为为此应用程序选择的上下文名称,一切都开始正常工作。

WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/app-context");

我在这里留下评论以防将来有用。