Spring/spring 공부

[Spring공부] servlet-context.xml/ root-context.xml/ web.xml 차이 정리하기

개발자하소서 2022. 4. 7. 18:26
728x90
반응형
SMALL

📌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>
-  DispatcherServlet이 모든 요청을 가로챌 수 있도록 등록한다
- 특정 url으로 변경하여 사용가능하다 ex) *.do -->

- - appServlet에 대한 url-pattern을 정의



📌root-context.xml

 

- 스프링의 환경설정 파일이다.

처음에 프로젝트 생성시에는 아무 내용도 없다.

- root-context.xml은 공통빈을 설정하는 곳으로 주로 View 지원을 제외한 bean을 설정한다.

- 즉, servlet-context.xml 과는 다르게 view와 관련되지 않은 객체를 정의한다.

- Service, Repository(DAO), DB 비즈니스 로직과 관련된 설정을 해준다.

 

 

 

 

출처 : https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc

 

 

 DispatcherServlet 

출처 : http://egloos.zum.com/springmvc/v/504151#type=comment&page=3

- Model 파트와 Controller파트 View파트를 조합하여 브라우저로 출력해주는 역할을 수행하는 클래스

 

- 참고

http://egloos.zum.com/springmvc/v/504151#type=comment&page=3

 

@MVC와 DispatcherServlet에 대해서

이전 장까지 MyBatis와 커넥션풀의 활용, 그리고 트랜잭션에 대해 상세히 알아보았습니다. 개인적으로 이 정도의 환경이라면 소, 중형 서비스 구축에는 문제없을 정도로 환상적인 제작환경이 구

egloos.zum.com

 


📌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)으로 등록하겠다는 의미.


 

728x90
반응형
LIST