Настройка весеннего запуска приложения с помощью 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.class
ApplicationConfiguration.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 ... следите за обновлениями;)