본문 바로가기
Develop/Spring+JPA

[Spring] web.xml 분석하기

by 연로그 2021. 2. 3.
반응형

<display-name>, <description>

<display-name>springTestProject</display-name>
<description>my spring test project~~~~</description>
  • <display-name>: 파일의 title. 보통 프로젝트명을 추가해 사용
  • <description>: 어떤 프로젝트를 위한 배포 서술자인지 기록
  • 주석과 비슷한 기능을 한다고 생각하면 된다.

 

<context-param>

<context-param>
	<param-name>fileName</param-name>
	<param-value>file:///${SMART_HOME}/conf/applicationcontext-*.xml</param-value>
</context-param>
  • 사용자가 직접 컨트롤하는 XML 파일 지정

 

<listener>

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  • 스프링 설정 정보 읽기

 

<servlet>

<servlet>
	<servlet-name>dispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/controller-*.xml</param-value>
	</init-param>
    
	<load-on-startup>2</load-on-startup>
</servlet>
  • servlet: java에서 동적 웹 프로젝트를 개발할 때, 사용자의 요청과 응답을 처리해주는 역할
  • DispatcherServlet
더보기

: Servlet Container에서 HTTP 프로토콜을 통해 들어오는 모든 요청을 처리하는 *Front Controller

(* front controller: 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아 처리해주는 컨트롤러. MVC 구조에서 함께 사용되는 패턴. )

- 서블릿 컨테이너(tomcat)에서 client의 요청을 받는데, 이때 제일 앞에서 서버로 들어오는 모든 요청을 처리하는 front controller를 Spring에서 정의한 것.

- 공통처리 작업을 Dipatcher Servlet이 처리하고 적절한 세부 컨트롤러로 작업을 위임해준다.

 

- 기존에는 모든 서블릿에 대해 url 매핑을 하려면 web.xml에 모두 등록해주어야 했다.

- Dispatcher Servlet 이후로 해당 어플리케이션으로 들어오는 모든 요청을 핸들링 해주며 작업을 편리하게 할 수 있어졌다.

 

  • <init-param>: 서블릿의 초기화 파라미터 (서블릿 초기화 작업에 필요한 데이터)
  • <load-on-startup>: 서블릿이 초기화되는 순서
더보기

- servlet은 브라우저에서 최초 요청시 init() 메소드를 실행한 후 메모리에 로드되어 기능을 수행한다. 최초 요청에 대해 실행시간이 길어지는 단점을 보완하기 위해 등장한 기능이 <load-on-startup>이다.

- 톰캣 컨테이너가 실행되며 미리 서블릿 실행

- 지정된 숫자가 0보다 크면 톰캣 컨테이너가 실행되며 서블릿이 초기화 된다.

- 지정 숫자 = 우선순위. 작은 숫자부터 초기화.

 

 

<filter>

<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>
</filter>

<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
  • filter: HTTP 요청과 응답을 변경할 수 있는 재사용 코드
  • <filter>: filter를 사용하기 위해선 어떤 필터가 어떤 자원에 대해 적용된다는 것인지 서블릿/JSP 컨테이너에 알려주기 위해 web.xml에 설정하는 것.
  • 어플리케이션에서 사용될 필터 지정
  • 위 예시와 같은 경우에는 /이하로 들어오는 모든 req에 encodingFilter를 적용한다. encodingFilter는 CharacterEncodingFilter를 사용하고, encoding 값은 UTF-8이라는 의미이다.

 

<session-config>

<session-config> 
	<session-timeout>30</session-timeout> 
</session-config>
  • Deployment Descriptor에서 n분 동안 요청이 없으면 세션 제거
더보기

Deployment Descriptor; DD; 배포 서술자

- /WEB-INF/web.xml

- 서버 시작 시 메모리에 로딩

- 클라이언트 요청에 대해 DD를 참조해 해당 서블릿에 매핑

 

 

<mime-mapping>

<mime-mapping>
	<extension>xls</extension>
	<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
  • 특정 파일 다운로드 시 파일이 깨져보일 때 정상적인 다운로드를 위해 설정

 

<error-page>

<error-page>
	<error-code>500</error-code>
	<location>/500.jsp</location>
</error-page>
  • error 발생 시 안내 페이지 지정

 

<welcome-file-list>

<welcome-file-list> 
	<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
  • 도메인으로만 접근했을 때 최초로 보여질 페이지

 


참조

myblog.opendocs.co.kr/archives/436

egloos.zum.com/springmvc/v/504151

java117.tistory.com/21

twofootdog.github.io/Spring-%ED%95%84%ED%84%B0(Filter)%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/

 

 

반응형

'Develop > Spring+JPA' 카테고리의 다른 글

[Spring] @JsonProperty  (2) 2021.03.08
[Spring] HiddenHttpMethodFilter  (0) 2021.02.04
[Spring] Interceptor  (0) 2021.01.29
[Spring Boot] Request method 'DELETE' not supported  (2) 2021.01.20
[Spring] <context:component-scan>에 대해  (0) 2021.01.07