DispatcherServlet과 CharacterEncodingFilter 설정
Bean 정의파일에 설정한 내용을 바탕으로 DispatcherServlet을 설정한다. 먼저 web.xml에 설정하는 방법을 알아보고, Servlet3.0 이후의 환경에서 사용할 수 있도록 WebApplication Initializer를 사용한 방법도 알아본다.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Sample MVC</display-name>
<!-- 1번 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/META-INF/spring/beans-biz.xml
</param-value>
</context-param>
<!-- 2번 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 3번 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 5번 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/META-INF/spring/beans-webmvc.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 4번 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 6번 -->
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
<!-- 7번 -->
<filter>
<filter-name>characterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
우선 웹 컨테이너상에 DI 컨테이너를 배치하는 설정이 1번 , 2번 이다. DI컨테이너를 웹컨테이너상에 작성하는 Listner가 2번이고,
<!-- 2번 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
어떤 Bean정의 파일을 가지고 DI 컨테이너를 만들 것인가를 지정하는 파라미터가 1번이다.
<!-- 1번 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/META-INF/spring/beans-biz.xml
</param-value>
</context-param>
다음으로 스프링 MVC중심이 되는 DispatcherServlet의 정의가 3번 , 4번이다. 3번에서 DispatcherServlet을 서블릿으로 정의하고
<!-- 3번 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
4번에서 DispatcherServlet에 대한 경로를 설정한다. 스프링MVC에서 웹 애플리케이션을 구축할 때는 정적 리소스 설정에서도 설명한 것처럼 기본적으로 컨텍스트 루트에 매핑시키는 경우가 대부분이다.
<!-- 4번 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
5번은 DispatcherServlet에서 작성하는 DI컨테이너의 Bean 정의 파일을 지정하고 있다. 스프링의 MVC의 베이스를 한 웹 애플리케이션에서는 ContextLoaderListener와 DispatcherServlet의 양쪽에서 DI 컨테이너를 작성할 수 있어서, 후자가 전자를 참조하는 형태가 된다.
즉, ContextLoaderListener의 DI 컨테이너에서 관리되고 있는 Bean을 DispatcherServlet의 DI컨테이너에서 관리되고 있는 Bean에 인젝션 할 수 있지만 반대로는 되지 않는다. 일반적으로 ContextLoaderListener의 DI컨테이너에서 비즈니스 층 이하의 Bean을 관리하고, DispatcherServlet의 DI컨테이너에서는 프레젠테이션 층 이상의 Bean을 관리한다.
6번은 스프링 MVC의 뷰에서 HTML의 이스케이프 실시에 대한 설정이다. < , > 등의 문자를 이스케이프 처리 해준다.
<!-- 6번 -->
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
7번은 characterEncodingFilter 설정이다. 이 필터를 설정하면 자동으로 HttpServlertRequest의 setCharacterEncoding 메서드를 실행해 적절한 문자 코드를 지정해 준다.
<!-- 7번 -->
<filter>
<filter-name>characterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
1.참고할만한 포스팅 : ContextLoaderListener 원리와 ContextLoaderListener를 이용한 설정
@RequestMapping의 여러설정
@RequestParam의 여러설정
@Controller 메서드 인수로 지정가능한 오브젝트
참고: 스프링 4입문 (한빛미디어)
'웹개발 > 스프링' 카테고리의 다른 글
스프링 개발전 설정파일 작성하기 - part1 (0) | 2020.11.14 |
---|---|
스프링 4 MyBatis 연동 (0) | 2020.11.12 |
스프링 4 MVC - part 2 (0) | 2020.11.11 |
스프링 4 MVC - part 1 (0) | 2020.11.10 |
스프링 4 비즈니스 로직 설계와 트랜잭션 (0) | 2020.11.09 |