Настройка Grizzly с помощью web.xml

Я могу начать гризли и развернуть на нем веб-службы Джерси со следующими строками.

protected HttpServer create() throws Throwable {
  ResourceConfig rc = new PackagesResourceConfig("com.resource", "com.provider");
  HttpServer server = GrizzlyServerFactory.createHttpServer(uri, rc);
  return server;
}

Но есть ли способ загрузить web.xml вместо ResourceConfig?

<web-app>
  <servlet>
    <servlet-name>Jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.resource, com.provider</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

Ответ 1

Кажется, что в настоящее время нет прямого способа настроить гризли с помощью web.xml. Однако я использовал частичное решение, которое может быть началом.

web.xml

Сначала, чтобы понять решение, мы должны понять, что означает использование web.xml. Это в основном используется для настройки вашего веб-приложения (подробнее см. ). В этом случае мы настраиваем init-params для сервлета.

(частичное) решение

Вместо использования web.xml и вместо использования ResouceConfig.class мы можем использовать Grizzly в качестве нашего сервлета и инициализировать параметры. Например

<web-app>
  <servlet>
    <servlet-name>Jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.resource, com.provider</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

даст что-то вроде:

protected HttpServer create() throws Throwable {
    HashMap<String, String> initParams = new HashMap<>();

    //ServerProperties.PROVIDER_PACKAGES is equal to "jersey.config.server.provider.packages"
    initParams.put(ServerProperties.PROVIDER_PACKAGES, "com.resource,com.provider");

    //Make sure to end the URI with a forward slash
    HttpServer server = GrizzlyWebContainerFactory.create("http://localhost:8080/", initParams);
    return server;
}

Таким образом, мы можем поместить все init-params, которые мы хотим. Однако это решение не может заменить целое web.xml.