1. web.xml이란
- DD(Deployment Descriptor:배포 설명자)라고도 불린다
- Web Application의 설정파일
- Web Application 실행 시 메모리에 로드된다
- 즉, 웹 애플리케이션을 실행시킬 때 참조할 설정들을 정의해놓은 것!
- 모든 웹 프로젝트는 이 설정파일을 갖고 있고, 위치는 WEB-INF 폴더 아래에 있다
2. web.xml의 주요 역할
- DispatcherServlet
- ContextLoaderListener
- Filter
2-1. DispatcherServlet
: 클라이언트의 요청을 처음으로 받는 클래스
- 클라이언트의 요청을 받아 요청을 처리해줄 수 있는 컨트롤러를 찾아 실행시킨다
- 이후 클라이언트에게 보여질 View를 찾고,
- 응답데이터와 View를 클라이언트에게 전달한다
- 요청을 처리할 컨트롤러를 찾는 일은 Handler Mapping이라는 객체가 처리한다
- 요청경로를 이용해 컨트롤러 객체를 반환한다
- 컨트롤러를 실제로 실행시키는 것은 Handler Adpater라는 객체가 처리한다
- 컨트롤러가 실행되면, 개발자가 구현한 비즈니스 로직을 거쳐 응답데이터가 추출된다
- 실행된 Controller는 리턴할 데이터와 View를 Handler Adapter에게 리턴한다
- Handler Adapter는 데이터와 View를 ModelAndView 형태로 DispatcherServlet에게 리턴한다
- 클라이언트에게 보여질 view를 찾는 일은 viewResolver 객체가 처리한다
최종적으로, viewResolver가 리턴한 View 객체에 응답 데이터를 넣어 클라이언트에게 리턴한다
그림으로 참고자료 추가하기
2-2. ContextLoaderListener
- Dispatcher Servlet은 클라이언트의 요청을 처리하는 객체
- 웹 애플리케이션의 규모가 커진다면, 클라이언트의 요청 또한 다양해질 것이고, 이를 처리할 Dispatcher Servlet도 늘어날 가능성이 있다
- 다른 성격을 가진 서블릿에는 그에 맞는 각각의 설정이 적용돼야 한다
- 반면, 모든 서블릿이 공통으로 가져야할 설정들도 있다
- 즉, Servlet Context 단위가 아닌 Application Context 단위의 설정이 필요한데, 이를 ContextLoaderListener 객체가 처리한다
- ContextLoaderListener의 역할
- ContextLoaderListener와 DispatcherServlet은 각각 WebApplicationContext를 생성
- 이렇게 스프링에서 사용되는 Context 간의 계층 관계를 연결해주는 부분
- 웹 어플리케이션이 시작되고 종료되는 시점에 Servlet Context가 생성하는 이벤트를 연결
- ContextLoaderListener의 역할
- 참고로, Application Context는 Web application의 Context며, 모든 Servlet들이 참조가 가능한 부모 Context이다
2-3. Filter
- 클라이언트에서 온 요청을 Dispatcher Servlet이 받기 전 거치는 부분이 있다. 그게 바로 이 Filter 객체이다
- 예를 들어, 스프링 시큐리티 필터가 적용되어 있으면, 인가 및 인증처리를 먼저 하고
- 인코딩 필터가 적용되어 있다면 클라이언트의 요청 데이터를 인코딩하는 작업이 먼저 이뤄진 후,
- Dispatcher Servlet에게 필터링 된 데이터가 전달된다
3. 예제로 보는 web.xml
<web-app>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/root-context.xml</param-value>
</context-param>
<!-- Dispatcher Servlet 생성
클라이언트의 요청을 처리하는 Dispatcher Servlet인 app1.
이 서블릿에 대한 설정파일로 app1-context.xml 설정 -->
<servlet>
<servlet-name>app1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app1-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- url-pattern : app1/주소로 요청되는 모든 요청을
app1 서블릿이 처리
+) 주소 확장자로도 처리 가능
ex) <url-pattern>*.free</url-pattern>-->
<servlet-mapping>
<servlet-name>app1</servlet-name>
<url-pattern>/app1/*</url-pattern>
</servlet-mapping>
</web-app>
참고 블로그
'Web' 카테고리의 다른 글
교차 출처 리소스 공유(CORS) (0) | 2023.11.22 |
---|---|
[debug] 디버깅 팁 정리 (feat. 웹 프로젝트) (0) | 2023.11.16 |