티스토리 뷰
우리의 최종 목표는 화면 전환(페이지 이동)을 해보고 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(디스패처 서블릿)이란? 디스패처 서블릿의 개념과 동작 과정 (81) | 2017.11.10 |
[Spring] web.xml 서블릿 버전 DTD 정리 (0) | 2017.11.04 |
[Spring] Spring 개발환경 설정 (8) | 2017.11.04 |
[Spring] Maven 기반의 Spring 프로젝트 만들기 (0) | 2017.11.02 |