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