Настройка весеннего запуска приложения с помощью web.xml

m расширение существующего веб-приложения Spring, чтобы сгенерированный файл war включал веб-сервер Jetty. Я хочу максимально использовать существующую конфигурацию, чтобы ограничить регрессии.

Вот существующий:web.xml



    contextClass
    org.springframework.web.context.support.AnnotationConfigWebApplicationContext


    contextConfigLocation
    com.fbecart.ApplicationConfiguration


    org.springframework.web.context.ContextLoaderListener



    spring-dispatcher
    com.fbecart.MyDispatcherServlet
    
        dispatchOptionsRequest
        true
    
    
        contextClass
        org.springframework.web.context.support.AnnotationConfigWebApplicationContext
    
    
        contextConfigLocation
        com.fbecart.SpringDispatcherServletConfiguration
    
    1



    spring-dispatcher
    /*



    GzipFilter
    org.eclipse.jetty.servlets.GzipFilter


    GzipFilter
    /*



    encodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        UTF-8
    
    
        forceEncoding
        true
    


    encodingFilter
    /*



    openSessionInView
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter


    openSessionInView
    /*


Вот мой основной класс:JettyApplication.java

package com.fbecart;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import({ ApplicationConfiguration.class, SpringDispatcherServletConfiguration.class,
    EmbeddedServletContainerAutoConfiguration.class })
public class JettyApplication {
  public static void main(String[] args) throws Exception {
    SpringApplication.run(JettyApplication.class, args);
  }
}

Я сделал несколько изменений в моих скриптах сборки Gradle, чтобы он заработал:

добавление зависимостей к spring-boot-starter и spring-boot-starter-jettyконфигурация плагина пружинной загрузки

Приложение запускается нормально, контроллеры загружены, и я могу запросить сервер. Но ни один из фильтров, определенных в web.xml, не включен.

Теперь я хотел бы удалить импорт,PropertiesConfiguration.classApplicationConfiguration.class а такжеSpringDispatcherServletConfiguration.class вJettyApplication.javaи каким-то образом заменить их путем загрузки или импорта содержимогоweb.xml во встроенный контейнер сервлетов. Но я игнорирую, если это правильная стратегия, и если я могу сделать это. Я был бы очень признателен за любую помощь.

-- РЕШЕНИЕ

Вот финалJettyApplication.class по мотивам Дэйваответ:

package com.fbecart;

import org.eclipse.jetty.servlets.GzipFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

@Configuration
@Import({ ApplicationConfiguration.class, SpringDispatcherServletConfiguration.class,
    EmbeddedServletContainerAutoConfiguration.class })
public class JettyApplication {
  public static void main(String[] args) throws Exception {
    SpringApplication.run(JettyApplication.class, args);
  }

  @Bean
  public DispatcherServlet dispatcherServlet() {
    return new MyDispatcherServlet();
  }

  @Bean
  public GzipFilter gzipFilter() {
    return new GzipFilter();
  }

  @Bean
  public CharacterEncodingFilter characterEncodingFilter() {
    final CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    characterEncodingFilter.setEncoding("UTF-8");
    characterEncodingFilter.setForceEncoding(true);
    return characterEncodingFilter;
  }

  @Bean
  public OpenEntityManagerInViewFilter openEntityManagerInViewFilter() {
    return new OpenEntityManagerInViewFilter();
  }
}

В ближайшее время я заменю web.xml на ServletContainerInitializer ... следите за обновлениями;)

Ответы на вопрос(1)

Ваш ответ на вопрос