web.xml을 사용하여 스프링 부트 응용 프로그램 구성
생성된 war 파일에 Jetty 웹 서버가 포함되도록 기존 Spring 웹 응용 프로그램을 부팅하는 중입니다.회귀를 제한하기 위해 가능한 한 기존의 구성을 고수하고 싶습니다.
여기에 기존 제품이 있습니다.web.xml
:
<web-app id="fbecart-webapp" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.fbecart.ApplicationConfiguration</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>com.fbecart.MyDispatcherServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.fbecart.SpringDispatcherServletConfiguration</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>GzipFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
여기가 나의 주요 수업입니다.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-boot-boot-boot-boot-boot-jetty에 대한 종속성 추가
- 스프링 부트 플러그인 구성
앱이 정상적으로 시작되고 컨트롤러가 로드되고 서버에 쿼리할 수 있습니다.그러나 web.xml에 정의된 필터를 사용할 수 없습니다.
이제 다음의 수입품을 제거하고 싶습니다.PropertiesConfiguration.class
,ApplicationConfiguration.class
그리고.SpringDispatcherServletConfiguration.class
에JettyApplication.java
그리고 어떻게든 내용을 로드하거나 가져오는 것으로 그것들을 대체합니다.web.xml
내장된 서블릿 컨테이너로 이동합니다.하지만 저는 그것이 옳은 전략인지, 그리고 제가 해낼 수 있는지는 무시합니다.도움을 주시면 대단히 감사하겠습니다.
솔루션
결승전입니다.JettyApplication.class
Dave의 답변을 기반으로 합니다.
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을 서블릿 컨테이너로 바꿉니다.가까운 미래의 이니셜라이저...채널 고정 ;)
내가 당신이라면 web.xml의 레이어를 천천히 벗겨내고 완전히 제거하려고 할 것입니다.이렇게 하면 모든 필터와 서블릿을 포함한 전체 응용프로그램에 대한 하나의 구성만 가질 수 있습니다.web.xml에서 필터가 중복되는 위치를 안정화하는 동안 병렬 실행을 수행할 수 있으며, 기본 응용 프로그램에서 동일한 기능을 사용하는 경우 web.xml을 삭제할 수 있습니다.기본 응용 프로그램에 필터를 추가하려면 다음에 대한 @Bean 정의를 만듭니다.Filter
또는FilterRegistrationBean
예를 들면
다음을 통해 언제든지 전쟁 배치를 지원할 수 있습니다.SpringBootServletInitializer
필요한 경우에도 마찬가지입니다.
언급URL : https://stackoverflow.com/questions/19053388/configuring-a-spring-boot-application-using-web-xml
'programing' 카테고리의 다른 글
Float에서 XFile을 파일로 변환하는 방법 (0) | 2023.07.04 |
---|---|
mLab에서 MongoDB 데이터베이스에 연결하면 인증에 실패함 (0) | 2023.07.04 |
os.path.sysname(__file_)이(가) 비어 있음을 반환합니다. (0) | 2023.07.04 |
MongoDB가 쿼리에 대해 인증되지 않음 - 코드 13 (0) | 2023.07.04 |
문서 데이터베이스:중복 데이터, 참조 자료 등(특히 MongoDB) (0) | 2023.07.04 |