본문 바로가기

Spring 정리/Spring MVC 5

프로젝트 세팅(web.xml, servlet-context.xml)

반응형

<web.xml>

 

셋팅에 관한 정보들은 외부에서 쉽게 접근할 수 없는 WEB-INF폴더 안에 생성하도록 한다.

 

DispatcherServlet을 spring framework에 맞게 web.xml에 재정의한다. 초기 설정은 크게 2부분으로 나뉜다.

 

<web.xml>


<!-- 현재 웹 애플리케이션에서 받아들이는 모든 요청에 대해 appServlet이라는 이름으로 정의되어 있는 서블릿을 사용하겠다. -->
<servlet-mapping>
	<servlet-name>appServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

servlet을 mapping(연결)해주는 코드이다.

url중에서도 /에 대하여 servlet 설정을 한다. /은 맨 처음 페이지에 들어왔을 때를 의미한다.

즉, appServlet은 처음에 페이지에 접속되면 기본적으로 지정되는 servlet이다.

이제 이 servlet-name에 정의된 appServlet이 무슨 역할을 하는지도 정의 해주어야 한다.

 

<web.xml>

<!-- 요청 정보를 분석해서 컨트롤러를 선택하는 서블릿을 지정한다. -->
<servlet>
	<servlet-name>appServlet</servlet-name>
	<!-- Spring MVC에서 제공하고 있는 기본 서블릿을 지정한다. -->
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        
	<!-- Spring MVC 설정을 위한 xml 파일을 지정한다. -->
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/config/servlet-context.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<!-- Bean을 정의할 xml 파일을 지정한다. -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/config/root-context.xml</param-value>
</context-param>

servlet을 정의하는 코드이다.

servlet-name은 우리가 만든 appServlet이며, <servlet-class>에서 DispatcherServlet을 spring framework에 맞춘다.

 

spring에 맞게 DispatcherServlet을 정의한 후, 이제 spring에 맞게 servlet 부가설정이 필요하다.

1. servlet의 각종 경로 2. servlet Bean 설정

 

1. servlet-context.xml

<init-param>을 통해 Spring MVC 설정을 위한 xml파일의 위치를 알려준다. 

 

2. root-context.xml

xml에 servlet에 관한 설정도 있지만, Bean을 설정해주는 것도 필요하다.

따로 분리해서 root-context.xml에 만드는데 <context-param>에 만든다.

 

<web.xml>

<!-- 리스너설정 -->
    <listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
        <!-- 파라미터 인코딩 필터 설정 -->
    <filter>
    	<filter-name>encodingFilter</filter-name>
    	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    	<init-param>
    		<param-name>encoding</param-name>
    		<param-value>UTF-8</param-value>
    	</init-param>
    	<init-param>
    		<param-name>forceEncoding</param-name>
    		<param-value>true</param-value>
    	</init-param>
    </filter>
    
    <filter-mapping>
    	<filter-name>encodingFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>

<listener>를 설정하여 context생성에 대한 요청을 계속 기다린다.

 

<filter>에서는 encoding 방식을 UTF-8로 지정한다. 어떤 url로 와도 항상 encoding 하도록, /*로 경로를 설정한다.

encoding-UTF8이고 forceEncoding-true로 설정해 강제적으로 인코딩을 하도록 한다.

 

*mapping이 총 2번 사용되었다.

 - url경로에 따라 내가 설정하고 싶은 것을 정할 때 사용하는 것 같다. 2번 모두 /를 써서 모든 상황에 따라 만들었다. 

 - 처음에는 appServlet을 mapping시켜 spring framework에서 Dispatcherservlet을 지정하였다.

 - 두번째는 encodingFilter를 mapping시켜 항상 encoding형식을 UTF-8로 하도록 지정하였다.

 

<servlet-context.xml>

	<!-- 스캔한 패지키 내부의 클래스 중 Controller 어노테이션을 가지고 있는 클래스들을 Controller로 로딩하도록 한다 -->
	<annotation-driven/>
	
	<!-- 스캔할 bean들이 모여있는 패키지를 지정한다. -->
	<context:component-scan base-package="kr.co.softcampus.controller"/>
	
	<!-- Controller의 메서드에서 반환하는 문자열 앞 뒤에 붙힐 경로 정보를 셋팅한다. -->
	<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>
	
	<!-- 정적파일(이미지, 사운드, 동영상, JS, CSS 등등) 경로 셋팅 -->
	<resources mapping="/**" location="/resources/"/>

<annotation-driven/>

servlet중에 Controller로 이용하기 위해 @Controller를 설정한 클래스들이 있다.

이 클래스들이 Contoller로서 로딩하기 위해서 필요하다.

 

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

spring에서 먼저 component-scan을 한다. 어떤 클래스가 component 요소를 가지고 있는지 확인하여.

context에 bean을 등록시키는 일을 한다. controller가 scan 대상인 component를 가진 annotation임을 알 수 있다.

 

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

Controller에서 return으로 페이지를 넘길 때, 경로상의 문제로 return "WEB-INF/view/index.jsp"라는 불편한 코드보다,

return "index"라고 편하게 표시하기 위해서 prefix와 suffix를 미리 설정해주어서 jsp파일로 연결해 준다.

 

<root-context.mxl>

root-context에는 bean에 대한 설정을 하기 떄문에 초기에는 아무 코드도 필요 없다.

반응형

'Spring 정리 > Spring MVC 5' 카테고리의 다른 글

파라미터에 객체를 주입받기  (0) 2020.05.25
파라미터 추출하기  (0) 2020.05.25
URL Mapping  (0) 2020.05.24
프로젝트설정(not Xml, but Java)  (0) 2020.05.24
프로젝트 세팅(pom.xml)  (0) 2020.05.23