我在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/*");
答案 0 :(得分:0)
我解决了这个问题。它与 ContextPath 有关。只要我将值/
(根上下文)替换为为此应用程序选择的上下文名称,一切都开始正常工作。
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/app-context");
我在这里留下评论以防将来有用。