티스토리 뷰
우리의 최종 목표는 화면 전환(페이지 이동)을 해보고 DB에서 값을 꺼내 출력을 해보는 것으로 잡겠습니다. 그렇게 하기 위해서 꼭 필요한 단계가 지금하는 내용인데, 이번에는 dispatcher-servlet을 web.xml에 등록하고, pom.xml, web.xml을 수정하는 작업을 해보도록 하겠습니다. 현재 일하는 곳에서 준 템플릿을 바탕으로 그것에 정의된 클래스를 사용하는 관계로 필수적이지만 초보자 수준에서는 불필요한 라이브러리 등이 들어갈 수 있습니다.(물론 저도 초보입니다ㅎㅎ)
1. dispatcher-servlet 설정하기
기본적으로 우리가 만드는 것은 웹페이지이기 때문에, 우리는 화면을 제어할 수 있어야 합니다.
그러기 위해서 화면의 제어를 앞장서서 담당하는 dispatcher-servlet에 대해서 알아보도록 하겠습니다.
(dispatcher-servlet이 뭔지 모르신다면 여기 혹은 servlet이 뭔지 모르신다면 여기를 참고해주세요.)
먼저 소스코드를 보여드리고 아래에서 설명드리도록 하겠습니다.
[ dispatcher-servlet.xml ]
< ?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd ">
<mvc:annotation-driven />
<context:component-scan base-package="com.s4c.stg.*">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" />
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
dispatcher-servlet은 webapp/WEB-INF/config 폴더에 생성하면 됩니다.
위에 적은 xmlns관련된 내용은 아래의 bean에서 사용하기 위한 클래스를 사용하기 위해 명시해주는 것이므로 빠짐없이 적어주어야 합니다! 여기에 추가된 <mvc:annotation-driven>은 우리가 Annotation을 활용할 때 기본적인 Default 방식을 설정해준다고 합니다. 그러므로 없어도 크게 상관 없다고 합니다.
그다음에 추가된 내용은 <context:component-scan>과 관련된 내용입니다. 일반적으로 스프링에서 클래스를 만들고 *의존성 주입은 @Autowired를 통해 (클래스 생성을) 처리합니다. 그런데 @Autowired를 하기 위해서는 application-context.xml에 해당클래스 모두를 bean으로 등록해두어야 되는데, 이러한 과정이 번거로우므로<context:component-scan>을 이용하여 처리하게 해주는 것입니다. base-pacakge = "com.s4c.stg.*"라고 나와있는데, 이것은 com.ndc.stg.으로 시작하는 패키지 모두를 등록하겠다는 것입니다.(모든 자바 클래스 패키지가 이것으로 시작하게 만들면 참 편하겠죠??) 그 다음의 objectMapper는 뷰 이름으로부터 사용할 View Object를 맵핑해줍니다. 여기서는 /WEB-INF/views/ 폴더의 .jsp로 끝나는 파일들을 찾아서 매핑해준다는 뜻입니다.
2. web.xml 수정하기
[web.xml]
우리가 dispatcher-servlet.xml을 만들긴 했지만 이것을 프로젝트에 묶어주지않았습니다. 그러므로 현재는 dispatcher-servelt을 사용할 수 없는데, 이것을 사용하기 위해서는 web.xml에 등록해주어야 합니다. 그래서 이것과 추가적으로 web.xml에 등록해야하는 내용을 한번에 처리하도록 하겠습니다!
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>Archetype Created Web Application</display-name>
<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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/dispatcher-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/config/spring/context-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
</web-app>
제일 먼저보면 <filter>라는 속성으로encodingFilter라는 것을 추가해주었습니다. 대충 내용을 보면 대충 감이 오시겠지만 인코딩을 UTF-8로 설정하여 필터링하겠다는 설정입니다. 그리고 아래의 filter-mapping은 어떠한 클래스들에 대하여 utf-8로 인코딩을 할 것인지 명시해주었는데 /의 형식으로 시작하는 url에 대하여 UTF-8로 인코딩을 할 것이라고 명시를 했습니다. 그리고 이제 <servlet>으로 시작하는 내용이 보이는데, web.xml에 dispatcher라는 서블릿을 추가해주겠다는 것이고, dispatcher servlet의 서블릿에서만 사용할 수 있는 초기화 파라미터로 (<init-param>) contextConfigurationLocation을 주고 있습니다. contextConfigurationLocation이라는 것은 contextLoader가 <param-value>의 위치에 있는 설정 파일을 읽어들이겠다는 것이고 그 파일이 dispatcher라는 서블릿으로 만들겠다는 것입니다. 그리고 아래에는 <context-param> 가 다시 나오고 있는데 설정파일이 dispatcher-servlet 말고도 datasource나 transcation 등도 있을 수 있으므로 그것들을 읽기 위해서 적어주었고, WEB-INF/config/spring 폴더의 context-로 시작해서 .xml로 끝나는 파일을 읽어들이겠다고 명시하였습니다. 즉, context-spring.xml 이나 context-root.xml과 같은 형식의 파일들을 읽겠다는 것입니다. <listener> 내용은 Spring에서 어떤 이벤트를 받기 위해서 대기하는 객체라고 이해하면 될 것 같습니다.
이전에 했던 내용을 그대로 따라오고 계시다면 아래와 같이 네모된 영역을 수정하면 됩니다.(파일들의 경로를 설정해주는 것은 꼭 제가 설정했던 위치가 아니여도 다른 파일들과 잘 맞춰주기만 한다면 어느 위치에 있든지 상관이 없습니다.)
3. pom.xml 수정하기
[pom.xml]
위에서 정의한 라이브러리들의 class들이 여럿 필요한데 그 내용들을 모두 추가한 제 pom.xml을 올리도록 하겠습니다. (일일이 치는 것도 좋지만 에러를 피하기 위해서 복사하여 붙여넣는 것도 좋은 방법입니다!)
아래에는 <dependencies> 부터 </dependencies> 까지 추가해두었습니다.
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<!-- thumbnail -->
<dependency>
<groupId>com.jhlabs</groupId>
<artifactId>filters</artifactId>
<version>2.0.235-1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JSR 330 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>privided</scope>
</dependency>
<!-- Inject Annotation dependency -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- Mybatis Dependencies -->
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- Spring dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
이제 겨우 기본이 되는 설정들을 마무리하였고, 다음 장에서는 MyBatis(마이바티스)와 Datasource(데이터 소스)에 대해서 설정을 해보도록 하겠습니다. 필수적인 내용이므로 천천히 완벽이해하면서 따라오세요~
관련 포스팅
Dispatcher Servlet 설정하기 (3/5)
'Spring' 카테고리의 다른 글
| [Spring] Mybatis, Datasource 설정 (4) | 2017.11.15 |
|---|---|
| [Spring] Dispatcher-Servlet(디스패처 서블릿)이란? 디스패처 서블릿의 개념과 동작 과정 (82) | 2017.11.10 |
| [Spring] web.xml 서블릿 버전 DTD 정리 (0) | 2017.11.04 |
| [Spring] Spring 개발환경 설정 (8) | 2017.11.04 |
| [Spring] Maven 기반의 Spring 프로젝트 만들기 (0) | 2017.11.02 |
