【发布时间】:2013-11-30 00:54:40
【问题描述】:
我正在 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/*");
【问题讨论】:
标签: java servlets jersey jetty