Tomcat + Spring Framework + iBatis 를 설치해야할 일이 생겨 하는 김에 여기에 정리해놓고자 한다.
1. 톰캣 다운로드
http://tomcat.apache.org/download-70.cgi 에서 Core zip 버전을 받으면 된다. (Linux경우 tar.gz)
ex) http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.33/bin/apache-tomcat-7.0.33.zip
다운로드 후 압축 해제하면 설치는 끝.
편의상 압축 푼 후 해당 tomcat 디렉토리를 c:\tomcat7 로 이동시켜주겠다.
2. Project 생성
IDE는 이클립스를 사용한다.
여기서는 Dynamic Web Project를 생성해서 사용하겠다.
이후엔 Project Name 만 설정하고 맨 마지막까지 Next한 후 마지막 창에서 web.xml 을 생성한다는 체크박스에 체크하고 Finish해준다.
위와 같이 프로젝트가 생성이 되었으면 성공이다.
3. Spring Framework lib 다운로드.
Maven을 사용하면 편하지만 원시적(?)으로 직접가서 lib를 다운로드 하겠다.
http://www.springsource.org/download/community 에 접속하면 zip파일이 있으니 다운로드 하면 된다.
(자신의 jdk버전에 맞는 가장 최신버전)
다운로드 후 압축해제.
아래와 같이 파일 list가 보인다.
우리가 사용할 곳은 libs 디렉토리이다.
libs안의 jar파일을 모두 다 사용하는 건 아니고 필요한 jar파일들만 사용하면 된다.
기본적인 beans, core, jdbc, context, context-support, expression, aop, tx와 spring mvc를 사용할것이므로 web, webmvc도 이클립스의 WEB-INF/lib로 드래그 하여 복사해 준다.
4. Server 생성 (Eclipse)
아래의 과정은 Eclipse내에서 개발하고 바로 Tomcat을 실행시켜 브라우저에서 확인이 가능하고 디버깅도 가능하게 하는 작업이다.
OK를 누르면 Eclipse내에 Server라는 탭이 하나 생성이 될 것이다.
Tomcat v7.0 선택 (좀 전에 Tomcat download 한 버전에 맞게 선택하면 된다.)
Next 하면 아래 창이 뜬다.
Tomcat installation directory : 에서 Browse..를 클릭하여 좀전에 download한 Tomcat디렉토리를 선택해 주고 Next.
지금 만들고 있는 서버와 매칭시킬 프로젝트를 선택하면 된다.
프로젝트를 Add하고 Finish하면 끝.
생성완료.
위 Tomcat v7.0 Server at localhost 를 더블클릭하면 아래와 같은 창이 나온다.
맨 아래의 Module 탭을 선택하자.
선택한 후 Edit 버튼을 클릭하면 아래 창이 뜬다.
Path를 /로 수정하고 OK를 클릭한다.
위 Tomcat v7.0 Server at localhost 에 마우스 우클릭해서 Start나 Debug를 선택해주자.
상태가 Debugging으로 변한 걸 확인 할 수 있다.
브라우저로 확인해보자.
http://localhost:8080/ (톰캣이 기본포트가 8080인데 설정을 변경했다면 해당 포트로 접속해보면 된다.)
페이지를 찾을 수 없다는 에러 페이지인데.. 이 에러는 Tomcat에서 내보내는 에러 페이지이니 톰캣은 정상적으로 구동된 걸 확인 할 수 있다.
Eclipse에서 개발하고 바로 Eclipse내에서 이렇게 Server를 구동해서 확인 및 디버깅을 할 수 있다.
5. Spring Framework에 의존된 library들 다운받기
- jakarta taglibs standard (Spring mvc에서 사용하는 lib)
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 에서 zip 파일 다운로드 후 압축해제 하면 lib 디렉토리 안에 jstl.jar, standard.jar 파일 있음.
두 파일을 WEB-INF/lib 안으로 드래그 하여 복사해줌.
- apache common logging (Spring core에서 사용하는 lib)
http://commons.apache.org/logging/download_logging.cgi 에서 binaries zip 파일 다운로드 후 압축해제하면 디렉토리 안에 commons-logging-x.x.x.jar 파일 있음.
이 파일도 WEB-INF/lib 안으로 드래그 하여 복사해줌.
- codehaus jackson (Spring mvc에서 json변환시 사용하는 lib)
http://wiki.fasterxml.com/JacksonDownload 에서 1.x 버전을 받아야 함.
받아서 WEB-INF/lib 안으로 드래그 하여 복사해줌.
6. spring mvc 설정
- web.xml
...
<!-- Spring Config Setting : bean 설정하는 xml 파일 위치 지정 -->
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/*-context.xml </param-value> </context-param> <!-- Spring Config Setting --> <!-- listener Register : Spring Framework이 로딩되게 listener를 설정함 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- listener Register --> <!-- Spring-MVC Config Setting : Spring MVC 관련 설정 --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/spring-servlet.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <!-- Spring-MVC Config Setting -->
...
- WEB-INF/config/application-context.xml
...
// 컨트롤러가 리턴하는 객체를 JSON포맷의 메시지로 변환하게 하는 Converter 설정.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> </list> </property> </bean>
...
- spring-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:p="http://www.springframework.org/schema/p " xsi:schemaLocation="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-3.1.xsd ">
<!-- component scan --> <context:component-scan base-package="trust .controller" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- component scan --> </beans>
- TestController
package trust.controller;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
@Controller public class TestController { @RequestMapping(value="/test") <- URL이 /test일 경우 실행하게 함. @ResponseBody <- 해당 메소드가 리턴하는 객체를 JSON포맷의 메시지로 변환하게 하는 Annotation public String testView() { return "aa"; } }
결과
7. iBatis 연동
MyBatis 로 이름이 바꼈다.
http://blog.mybatis.org/
http://code.google.com/p/mybatis/downloads/detail?name=mybatis-spring-1.1.2-SNAPSHOT-bundle.zip&can=1&q = 에서 lib 다운로드
(mybatis-spring-1.1.2-SNAPSHOT.zip)
zip 파일 압축해제하면 aopalliance-1.0.jar, mybatis-3.1.1.jar, mybatis-spring-1.1.2-SNAPSHOT.jar 가 있다.
이 파일들을 WEB-INF/lib 안에 드래그 해서 넣어준다.
mysql을 사용할 것이므로 Connector도 받아야 한다.
http://www.mysql.com/products/connector/ 에서 JDBC용 커넥터를 다운받아 WEB-INF/lib 안에 넣어준다.
(mysql-connector-java-5.1.22-bin.jar)
- WEB-INF/config/mybatis-context.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 " xsi:schemaLocation="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-3.1.xsd ">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>/WEB-INF/config/mybatis.properties </value> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="/WEB-INF/config/mybatis-config.xml"/> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory"/> </bean> </beans>
- WEB-INF/config/mybatis.properties
jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/DB명?autoReconnect=true jdbc.username=사용자계정 jdbc.password=비밀번호
- WEB-INF/config/mybatis.config
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "HTTP://mybatis.org/dtd/mybatis-3-config.dtd ">
<configuration> <settings> <setting name="cacheEnabled" value="false" /> <setting name="useGeneratedKeys" value="true" /> <setting name="defaultExecutorType" value="REUSE" /> </settings> <mappers> <mapper resource="../sqlMap/sqlMapper.xml" /> </mappers> </configuration>
- WEB-INF/sqlMap/sqlMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd "> <mapper namespace="네임스페이스"> <select id="쿼리id" parameterType="int" resultType="int"> select count(*) from 테이블명 </select> </mapper>
sqlMapper 작성 방법 : http://www.mybatis.org/core/sqlmap-xml.html
WEB-INF/config/mybatis-context.xml 파일은 Spring이 로딩되면서 자동으로 읽게끔 설정을 web.xml에 해뒀으니 로딩이 될 것이다.
8. DAO 작성
import java.util.List;
import org.mybatis.spring.support.SqlSessionDaoSupport;
public class UserGameLogDAO extends SqlSessionDaoSupport { public List selectLogList() { return getSqlSession().selectList("네임스페이스.쿼리id"); } }
- application-context.xml
...
<bean class="UserGameLogDAO" name="userGameLogDAO"> <property name="sqlSessionTemplate" ref="sqlSessionTemplate" /> </bean>
...
DAO를 호출하면 DB를 정상적으로 조회해 오는 걸 볼 수 있을 것이다.