📌web.xml
- 셋팅에 관한 정보들은 외부에서 쉽게 접근할 수 없는 WEB-INF폴더 안에 생성 한다.
- 스프링 프로젝트가 실행되면 가장 먼저 web.xml을 읽어 들이게 되고 위에서부터 차례로 태그를 해석하기 시작한다.
- 설정을 위한 xml이다.
- 여러 xml파일을 인식하도록 각 파일을 가리켜 준다.
- 웹 어플리케이션 서버(WAS)가 최초로 구동 될 때(톰캣이 최초로 구동이 될 때) 각종 설정을 정의한다.
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
- context-param 태그 내에 root-context로 모든 서블릿과 필터들이 공유함으로 root-context.xml을 정의한다.
- 즉, 스프링의 환경설정 파일인 root-context.xml을 가장 먼저 참조한다는 것
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
- listener 태그로 모든 서블릿과 필터들에 공유되는 스프링 컨테이너를 생성한다.
- 즉, listener로서 root-context에 정의 되어있는 것들을 모든 서블릿과 필터가 공유할 수 있게 해준다는 것.
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
/WEB-INF/spring/spring-security.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
- servlet-context.xml을 가르킨다.
- <servlet-name>은 이 프로젝트에서 설정한 appServlet이다.
- <servlet-class>에서 DispatcherServlet을 spring framework에 맞춘다.
- /WEB-INF/spring/appServlet/servlet-context.xml을 참조 즉, xml 파일 안에 정의된 객체들을 로딩한다.
- <load-on-startup> 은 가장 우선순위를 뜻함
<!-- 현재 웹 애플리케이션에서 받아들이는 모든 요청에 대해
appServlet이라는 이름으로 정의되어 있는 서블릿을 사용하겠다. -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- - appServlet에 대한 url-pattern을 정의함
📌root-context.xml
- 스프링의 환경설정 파일이다.
- 처음에 프로젝트 생성시에는 아무 내용도 없다.
- root-context.xml은 공통빈을 설정하는 곳으로 주로 View 지원을 제외한 bean을 설정한다.
- 즉, servlet-context.xml 과는 다르게 view와 관련되지 않은 객체를 정의한다.
- Service, Repository(DAO), DB등 비즈니스 로직과 관련된 설정을 해준다.
DispatcherServlet
- Model 파트와 Controller파트 View파트를 조합하여 브라우저로 출력해주는 역할을 수행하는 클래스
- 참고
http://egloos.zum.com/springmvc/v/504151#type=comment&page=3
📌servlet-context.xml
- web.xml에서 DispatcherServlet(스프링에 내장된 컨트롤러)로 이동하고,
/WEB-INF/spring/appServlet/servlet-context.xml을 참조한다.
- 웹 어플리케이션에서 클라이언트의 요청을 받기 위한 컨텍스트 설정이며, 요청과 관련된 객체를 정의한다.
- url과 관련된 Controller나, 어노테이션, ViewResolver(컨트롤러에서 view 정보에 대해 설정하는 것),
Interceptor, MultipartResolver 등의 설정을 한다.
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<annotaiton-driven>
- 어노테이션을 사용가능하도록 설정한다. = 어노테이션 사용한다고 정의
- servlet중에 Controller로 이용하기 위해 @Controller를 설정한 클래스들이 있는데, 이 클래스들이 Contoller로서 로딩하기 위해서 필요하다.
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
- HTML 리소스 디렉토리 정의
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
- ViewResolver(뷰리졸버 = 뷰해석기)로 jsp와 name 을 매핑한다.
- Controller에서 return으로 페이지를 넘길 때, 경로상의 문제로 return "WEB-INF/view/index.jsp"라는 불편한 코드보다,
return "index"라고 편하게 표시하기 위해서 prefix(접두어 : 디렉토리)와 suffix(접미어 : 확장자)를 미리 설정해주어서 jsp파일로 연결해 준다.
<context:component-scan base-package="com.shop.controller" />
<!--com.shop.controller는 예시다-->
<context:component-scan base-package="..." />
- spring에서 먼저 component-scan을 한다.
- 어떤 클래스가 component 요소를 가지고 있는지 확인하여.context에 bean을 등록시키는 일을 한다.
- controller가 scan 대상인 component를 가진 annotation임을 알 수 있다.
- 즉, 베이스 패키지(base-package) 하위 모든 어노테이션(annotation)을 스캔해서 빈(bean)으로 등록하겠다는 의미.
'Spring > spring 공부' 카테고리의 다른 글
[Spring공부] DAO와 MyBatis Mapper xml의 쿼리문과의 매핑 원리 (0) | 2022.04.01 |
---|---|
[Springboot] 3. 스프링부트 동작원리 (0) | 2022.03.07 |
[Springboot] 2. JPA 개념 잡기 (0) | 2022.03.07 |
[Springboot] 1. 스프링의 핵심 (0) | 2022.03.07 |
[Spring수업복습] 2022-02-09(수) - 5~7교시 (0) | 2022.02.09 |