Spring으로 방명록 애플리케이션을 구현하는 시리즈입니다.
- [Spring] 방명록 애플리케이션 (1) - 환경 설정
- [Spring] 방명록 애플리케이션 (2) - 준비 단계 ( 스프링 활용하기 )
- [Spring] 방명록 애플리케이션 (3) - 구현
- [Spring] 방명록 애플리케이션 (4) - 정적 파일 처리 ( DefaultServletHandler )
- [Spring] 방명록 애플리케이션 (5) - 뷰 객체 생성 ( ViewResolver )
- [Spring] 방명록 애플리케이션 (6) - 예외 처리 ( ExceptionHandler )
- [Spring] 방명록 애플리케이션 (7) - 3 Layer Architecture와 Service 계층
- [Spring] 방명록 애플리케이션 (8) - 커넥션 풀 ( Connection Pool ) DBCP
- [Spring] 방명록 애플리케이션 (9) - Mybatis 환경 설정
- [Spring] 방명록 애플리케이션 (10) - Mybatis 적용
이번 주제에서는 JSP/Servlet에서 만들었던 방명록 애플리케이션을 스프링으로 구현하려 합니다.
이 글에서는 방명록 애플리케이션을 구현하는데 필요한 환경 설정을 하겠습니다.
아래의 설정 파일들은 스프링의 동작 과정을 살펴보면서 말씀 드렸던 코드입니다.
설정 내용이 이해가 안되시면 이전 글을 참고해주시기 바랍니다. ( 링크 )
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.victolee</groupId>
<artifactId>guestbook</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 변수 -->
<properties>
<org.springframework-version> 4.2.1.RELEASE </org.springframework-version>
</properties>
<!-- 라이브러리를 추가 -->
<dependencies>
<!-- Spring core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Spring Web ( Servlet / Anotation ) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>webapp</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>guestbook</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- Context parameter ( 전역 파라미터 ) -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Context Loader Listner -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Front Container - DispatcherServlet -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xs http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<context:annotation-config />
<context:component-scan base-package="com.victolee.guestbook.repository">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Repository" />
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Service" />
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Component" />
</context:component-scan>
</beans>
spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 빈 설정을 어노테이션 기반으로 하겠다는 설정태그 -->
<context:annotation-config />
<!-- 스캐닝 할 기준 패키지 -->
<context:component-scan base-package="com.victolee.guestbook.controller" />
</beans>
GuestBookDAO 와 GuestBookVO 파일은 JSP/Servlet 에서 방명록 애플리케이션을 만들 때 사용했던 파일 그대로 입니다.
( GuestBookDAO 클래스에는 추가적으로 @Repository 어노테이션만 작성해주세요. )
링크를 참고하셔서 테이블 구조와 코드를 확인하셔야 이후의 내용들을 그대로 적용이 가능할 것입니다.
src/main/java/com.victolle.guestbook.controller / GuestBookController.java
@Controller public class GuestBookController { @Autowired private GuestBookDAO guestbookDAO; @RequestMapping("/main") public String main() { return "/WEB-INF/views/index.jsp"; } }
간단하게 views/index.jsp 파일을 만들어서 아무 내용이나 작성해주시고
http://localhost:8080/guestbook/main 을 요청하셔서 잘 응답이 되면, 방명록 애플리케이션을 만들 준비가 된 것입니다 !
Encoding Filter
추가적으로 설정해둘 것이 있는데, 이 부분은 별도의 설명이 필요할 것 같아서 따로 분리했습니다.
JSP/Servlet에서 요청 객체 request의 문자열 encoding을 위해 Servlet에서 아래의 코드를 매 번 작성했었습니다.
request.setCharacterEncoding("utf-8");
꼭 필요하지만 매 번 반복되는 상투적인 코드는 한 번에 처리하는 것이 좋습니다.
그래서 문자열 인코딩 같은 경우는 요청이 올 때 필터( Filter )를 한 번 거쳐서 인코딩하면 좋을 것 같습니다.
스프링에서는 문자열 인코딩을 해주는 클래스가 존재하기 때문에, 설정 파일에서 설정을 해주기만 하면 요청 문자열에 대한 인코딩 처리가 됩니다.
web.xml에 코드 추가
<!-- Encoding Filter -->
<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>
이렇게 설정을 해주면 일일이 인코딩을 할 필요 없이 스프링의 CharacterEncodingFilter 객체가 모든 요청에 대해 UTF-8로 인코딩을 해줍니다.
이제 기본 설정 파일을 모두 작성했습니다.
다음 글에서는 방명록 애플리케이션을 구현하기 위해 필요한 스프링의 기본 기능들을 알아보도록 하겠습니다.