29.4 내장된 서블릿 컨테이너 지원
Spring Boot는 임베디드 Tomcat, Jetty 및 Undertow 서버를 지원합니다. 대부분의 개발자는 적절한 "Starter"를 사용하여 완전히 구성된 인스턴스를 얻습니다. 기본적으로 내장 서버는 포트 8080
에서 HTTP 요청을 수신합니다.
29.4.1 Servlets, Filters, and listeners
임베디드 서블릿 컨테이너를 사용할 때 스프링 빈을 사용하거나 서블릿 컴포넌트를 검색하여 서블릿, 필터 및 모든 리스너 (예 : HttpSessionListener
)를 Servlet 스펙에서 등록 할 수 있습니다.
Registering Servlets, Filters, and Listeners as Spring Beans
모든 Servlet
, Filter
또는 Spring bean 인 서블릿 *Listener
인스턴스는 포함 된 컨테이너에 등록됩니다. 구성 중에 application.properties
의 값을 참조하려는 경우 특히 유용 할 수 있습니다.
기본적으로 컨텍스트가 하나의 서블릿 만 포함하면 /
에 매핑됩니다. 여러 서블릿 빈의 경우, 빈 이름이 경로 접두어로 사용됩니다. 필터는/*
에 매핑됩니다.
컨벤션 기반 매핑이 충분히 유연하지 않으면 ServletRegistrationBean
, FilterRegistrationBean
및ServletListenerRegistrationBean
클래스를 사용하여 완벽한 제어가 가능합니다.
스프링부트에서는 web.xml 이 더 이상 사용되지 않아 서블릿이나 필터를 org.springframework.boot.web.servlet 의 RegistrationBean 을 통해 등록해야합니다.
필터와 달리 서블릿 등록은 특별한 경우가 아니면 추천하지 않는 방법이래!
Spring Boot는 Filter 빈을 정의 할 수있는 많은 자동 설정을 제공한다. 다음은 필터 및 각 광고 주문의 몇 가지 예입니다 (낮은 값은 우선 순위가 높음을 나타냄).
Servlet Filter | Order |
|
|
|
|
|
|
|
|
일반적으로 Filter Bean은 정렬되지 않은 상태로 두는 것이 안전합니다.
특정 순서가 필요한 경우 Ordered.HIGHEST_PRECEDENCE
에서 요청 본문을 읽는 필터를 구성하지 마십시오. 응용 프로그램의 문자 인코딩 구성에 맞지 않을 수 있습니다. 서블릿 필터가 요청을 래핑하는 경우, 요청은 OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER
보다 작거나 같은 순서로 구성되어야합니다.
29.4.2 서블릿 컨텍스트 초기화
임베디드 서블릿 컨테이너는 Servlet 3.0+ javax.servlet.ServletContainerInitializer
인터페이스 또는 스프링의 org.springframework.web.WebApplicationInitializer
인터페이스를 직접 실행하지 않습니다. 이는 전쟁 중에 실행되도록 설계된 타사 라이브러리가 Spring Boot 응용 프로그램을 손상시킬 수있는 위험을 줄이기위한 의도적인 설계 결정입니다.
Spring 부트 애플리케이션에서 서블릿 컨텍스트 초기화를 수행해야한다면, org.springframework.boot.web.servlet.ServletContextInitializer
인터페이스를 구현하는 빈을 등록해야한다. 단일 onStartup
메소드는 ServletContext
에 대한 액세스를 제공하며, 필요한 경우 기존 WebApplicationInitializer
에 대한 어댑터로 쉽게 사용할 수 있습니다.
Scanning for Servlets, Filters, and listeners
포함 된 컨테이너를 사용할 때 @WebServlet
, @WebFilter
r 및 @WebListener
로 주석 된 클래스의 자동 등록은 @ServletComponentScan
을 사용하여 활성화 할 수 있습니다.
|
29.4.3 The ServletWebServerApplicationContext
내부적으로 스프링 부트는 임베디드 서블릿 컨테이너 지원을 위해 다른 유형의 ApplicationContext
를 사용합니다. ServletWebServerApplicationContext
는 단일 ServletWebServerFactory
빈을 검색하여 자체 부트 스트랩하는 특수 유형의 WebApplicationContext
입니다. 보통 TomcatServletWebServerFactory
, JettyServletWebServerFactory
또는 UndertowServletWebServerFactory
가 자동으로 구성되었습니다.
대개 이러한 구현 클래스를 인식 할 필요는 없습니다. 대부분의 응용 프로그램은 자동으로 구성되며 사용자를 대신하여 적절한 |
29.4.4 내장형 서블릿 컨테이너 사용자 정의
공통 서블릿 컨테이너 설정은 Spring Environment
등록 정보를 사용하여 구성 할 수 있습니다. 일반적으로 application.properties
파일에서 속성을 정의합니다.
일반적인 서버 설정에는 다음이 포함됩니다.
네트워크 설정 : 들어오는 HTTP 요청 (
server.port
),server.address
에 바인드 할 인터페이스 주소 등을 수신합니다.세션 설정 : 세션이 지속적인지 여부 (
server.servlet.session.persistence
), 세션 시간 초과 (server.servlet.session.timeout
), 세션 데이터 위치 (server.servlet.session.store-dir
) 및 세션 쿠키 구성 (server.servlet.session.cookie.*
).오류 관리 : 오류 페이지의 위치 (
server.error.path
).
스프링 부트 (Spring Boot)는 가능한 한 공통 설정을 노출하려고 시도하지만, 항상 가능하지는 않습니다. 이 경우, 전용 네임 스페이스는 서버 별 사용자 정의를 제공합니다 (server.tomcat
및 server.undertow
참조). 예를 들어 access logs는 임베디드 서블릿 컨테이너의 특정 기능으로 구성 될 수 있습니다.
전체 목록은 |
프로그래밍 방식의 사용자 정의
임베디드 서블릿 컨테이너를 프로그래밍 방식으로 구성해야하는 경우 WebServerFactoryCustomizer
인터페이스를 구현하는 Spring bean을 등록 할 수 있습니다. WebServerFactoryCustomizer
는 수많은 사용자 정의 설정 메소드를 포함하는 ConfigurableServletWebServerFactory
에 대한 액세스를 제공합니다. 다음 예제에서는 프로그래밍 방식으로 포트를 설정하는 방법을 보여줍니다.
|
ConfigurableServletWebServerFactory의 직접 사용자 정의
이전의 사용자 정의 기술이 너무 제한적인 경우에는 TomcatServletWebServerFactory
, JettyServletWebServerFactory
또는 orUndertowServletWebServerFactory
빈을 직접 등록 할 수 있습니다.
Setter는 많은 구성 옵션에 대해 제공됩니다. 좀 더 이국적인 것을해야 할 때 몇 가지 보호 된 방법 "hooks"도 제공됩니다. 자세한 내용은 source code documentation를 참조하십시오.
29.4.5 JSP 제한사항
임베디드 서블릿 컨테이너를 사용하는 (그리고 실행 가능한 아카이브로 패키지 된) Spring Boot 애플리케이션을 실행할 때, JSP 지원에는 몇 가지 제한이 있습니다.
Jetty와 Tomcat에서는 war 패키징을 사용하면 작동합니다. 실행 가능한 war은
java -jar
로 시작될 때 작동하며 모든 표준 컨테이너에도 배포 할 수 있습니다. JSP는 실행 가능한 jar를 사용할 때 지원되지 않습니다.Undertow는 JSP를 지원하지 않습니다.
사용자 정의
error.jsp
페이지를 작성해도 error handling를 위한 기본 뷰가 대체되지 않습니다. 대신 Custom error pages를 사용해야합니다.
설정하는 방법을 볼 수있는 JSP sample이 있습니다.
Last updated