JAN's History
web.xml에 대해서 알아보자 ! (DispatcherServlet, BeanFactory) 본문
web.xml은 WebApplicaion의 Delpoyment Descriptor로써 XML형식의 파일입니다.
모든 Web Application은 반드시 하나의 web.xml을 가지고 있어야 하며 위치는 WEB-INF 폴더 안에 있습니다.
Web.xml에 작성되는 내용
1. ServletContext의 초기변수
2. 서블릿 및 jsp에 대한 정의 및 매핑
<예시>
<servlet>
<servlet-name>MyServlet1</servlet-name>
<servlet-class>com.example.MyServlet1</servlet-class>
</servlet>
<servlet>
<servlet-name>MyServlet2</servlet-name>
<servlet-class>com.example.MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet1</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyServlet2</servlet-name>
<url-pattern>/anotherservlet</url-pattern>
</servlet-mapping>
3. MimeType매핑
4. Session의 대한 유효시간
5. welcome file list
6. 오류 핸들러
<error-page>
<error-code>404</error-code>
<location>/error404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>
출처: https://jake-seo-dev.tistory.com/436 [제이크서 위키 블로그:티스토리]
web.xml 파일은 웹 애플리케이션의 설정을 정의하는 중요한 파일이며, 이 설정은 애플리케이션의 동작 및 보안에 영향을 미칩니다. 최신 Java EE 및 Jakarta EE에서는 대부분의 설정을 어노테이션과 같은 다른 방식을 통해 XML 파일보다 더 간단하고 유연하게 처리합니다.
Spring MVC에서의 web.xml 역할
- DispatcherServlet
- ContextLoaderListener
- encodingFilter
DispatcherServlet
- FrontContoller + RequestController의 결합
- Spring에서 자동생성해준다.
- 클라이언트의 요청을 처음으로 받고 응답하는 객체.
- 클라이언트의 요청을 가로채서 컨트롤러에 보낸다.
ApplicationContext
- 컴포넌트를 스캔해서 자동으로 주입해준다 = IoC
- ApplicationContext는 싱글톤으로 관리되기 때문에 어디서든 접근하든 동일한 객체라는 것을 보장해준다.
ApplicationContext에는 2가지 종류가 있다.
servlet-applicationContext
servlet-applicationContext는 ViewResolver, Interceptor, MultipartResolver 객체를 생성하고 웹과 관련된 어노테이션 Controller, RestController를 스캔 한다.
============> 해당 파일은 DispatcherServlet에 의해 실행된다.
root-applicationContext
root-applicationContext는 해당 어노테이션을 제외한 어노테이션 Service, Repository등을 스캔하고 DB관련 객체를 생성한다. (스캔이란 : 메모리에 로딩한다는 뜻)
============> 해당 파일은 ContextLoaderListener에 의해 실행된다. ContextLoaderListener를 실행해주는 녀석은 web.xml이기 때문에 root-applicationContext는 servlet-applicationContext보다 먼저 로드 된다.
Bean Factory
필요한 객체를 Bean Factory에 등록할 수도 있다. 여기에 등록하면 초기에 메모리에 로드되지 않고 필요할 때 getBean()이라는 메소드를 통하여 호출하여 메모리에 로드할 수 있다. 이것 또한 IoC이다. 그리고 필요할 때 DI하여 사용할 수 있다. ApplicationContext와 다른 점은 Bean Factory에 로드되는 객체들은 미리 로드되지 않고 필요할 때 호출하여 로드하기 때문에 lazy-loading이 된다는 점이다.
요청 주소에 따른 적절한 컨트롤로 요청 (Handler Mapping)
GET요청 => http://localhost:8080/post/1
해당 주소 요청이 오면 적절한 컨트롤러의 함수를 찾아서 실행한다.
응답
html파일을 응답할지 Data를 응답할지 결정해야 하는데 html 파일을 응답하게 되면 ViewResolver가 관여하게 된다.
하지만 Data를 응답하게 되면 MessageConverter가 작동하게 되는데 메시지를 컨버팅할 때 기본전략은 json이다.
'Web' 카테고리의 다른 글
URL, URN, URI 그리고 서블릿 생명주기 (Servlet LifeCycle)에 대해 알아보자 (0) | 2024.04.26 |
---|---|
톰켓이란? (0) | 2024.04.24 |
TCP/IP, 소켓에 대해서 알아보자! (0) | 2024.04.22 |