본문 바로가기
SPRING

스프링 설정에 관하여(web.xml,servlet-context.xml,root-context.xml)

by brilliant-growth 2023. 11. 24.

web.xml

 

was(톰캣)에게 servlet에 대한 정보는 줘야하는데 이때 쓰이는 파일이다

WAS가 처음 구동될떄 web.xml을 읽어 웹어플리케이션 설정을 구성한다

DispatcherServlet을 등록해주면 스프링 설정 파일을 지정한다

	<!-- 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>
    
	<!-- 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</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

 

DispatcherServlet

dispatcher는 항공기 운항 관리자(관제사),배차 담장자 라는뜻

servlet에 대합해보면 servlet Container로부터 들어오는 요청을 관제하는 컨트롤러다

 

아래 부분은 모든 요청을 DispatcherServlet이 처리하도록 서블릿 매핑을 설정한다.

	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

 

url-pattern은 *.do,/*,/이런식으로 많이 혼용해서 사용했는데

*.do는 무의미한 확장자로 옛날에 사용하던 방식이고

/*는 톰캣(conf)에 있는 기본 web.xml의 .jsp를 처리하는 설정파일을 무시해버리게 되므로

/를 사용하는게 맞다

 

여기서 servlet-mapping을 /로 사용하게 되면 /*를 사용하는것과 마찬가지로

/*를 사용하는 것과 마찬가지로 톰캣에 있는 / 설정을 무시해버리게 되는 것이다.

여기서 한가지 알아둬야할 부분은 .jsp든 .css든 .js든 파일에 직접 접근하는 경우는 없다.

요청은 톰캣이 받게되고 서블릿에 패턴을 요청해서 처리하게 되는데 이 설정을 뭉개버린 것이다.

servlet-context.xml에 다음과 같은 코드를 통해 이 문제를 해결할 수 있다.

<mvc:default-servlet-handler />

설정을 추가하면 default-servlet-handler가 빈(Bean)으로 추가된다.

매핑되는 핸들러가 없다면 default-servlet-handler가 요청을 처리하게 된다.

 

또는 이 방법으로도 해결할 수 있다.

<mvc:resources mapping="/resources/**" location="/resources/"/>

 

root-context : 이 context에 등록되는 Bean들은 모든 context에서 사용되어 진다.(공유가 가능하다)

servlet-context : 이 context에 등록되는 Bean들은 servlet-container에만 사용되어진다.

 

@Controller는 servlet-context에 등록하고

@Service와 @Repositoryroot-context에 등록하라고 하는 이유가 이것때문인 것 같다.

 

 

servlet-context.xml

 

web.xml에서 DispatcherServlet 등록 시 설정한 파일이다.

앞서 설명한 것 처럼 설정 파일을 이용해서 스프링 컨테이너를 초기화시킨다.

코드를 하나 하나 짚어나가보자.

 

아래 코드는 Annotation을 활용할 때 기본적인 Default 방식을 설정해준다고 한다.

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

 

의존성을 주입하기 위해서는 xml이나 @Configuration을 이용해서 빈을 등록 해줘야 하는데

이런 번거로움을 해결해준다.

해당 패키지를 스캔해서 애노테이션을 명시한 클래스를 빈으로 등록해준다.

<context:component-scan base-package="com.board.controller" />

 

컨트롤러에서 return "home"; 을 했을때

 /WEB-INF/views/home.jsp가 나올 수 있는게 이 설정 덕분이다.

viewResolver는 사용자의 요청에 대한 응답 view를 렌더링 하는 역활이다.

prefix는 렌더링 시 handelr에서 반환하는 문자열의 앞에 붙여줄 문자열을 의미하고

suffix는 뒷쪽에 붙는 문자열이다.

<!-- 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>

 

root-context.xml

 

스프링 프로젝트 생성 시 root-context.xml에는 특별한 설정이 없다.

공통적으로 사용하려는 Bean을 그때그때 사용하면 되는 것 같다. 

 

출처) [Spring] 스프링 설정 - web.xml, root-context.xml, servlet-context.xml 역할(Servlet, DispatcherServlet이란) — 이상한 개발자 (tistory.com)

'SPRING' 카테고리의 다른 글

db 이중화 작업(springBoot,mybatis)  (0) 2023.11.24
MVC 패턴 구현 순서  (1) 2023.11.24
Context란?  (1) 2023.11.24
로그인시 사용하는 HttpServletRequest와 HttpSession  (0) 2023.11.13
ModelAttribute,RedirectAttributes  (0) 2023.11.13