본문 바로가기

JAVA

이클립스에서 Spring + iBatis + Oracle 로 화면 출력하기

출처 : http://blog.paran.com/oraclejava/27191393

열심히 인터넷 뒤져서 찾은 예제다.
또 열심히 카피&페이스트 신공을 발휘해서 이클립스에 넣어 줬다.
된장 안된다.

2일간 완전한 삽질의 종결이다.
자세히 읽어 보니...
90%는 될꺼고, 10% 안될꺼란다. <<-- 초짜가 제일 두려워하는 말이다.
황당...

또 찾았다. 구굴링... 또 구굴링...
비슷한 예제들이 많다.
이것저것 짜집기 시작.
결국 되었다.

능력: 자바 초짜다.
주로 Unix C 가 주 밥벌이다.
자바는 프레임웍이 너무 많아서 정신 하나도 읍다.
어디 부터 어디가 스프링꺼고, 오디가 iBatis것인지도 구분이 안된다.
java의 표준 함수가 어딘지도 모르것다.
한마디로 우왕좌왕...

일단 여기저기서 짜 맞추었다.
1단계 데이터 가져오기 성공(?)
2단계 데이터 입력 하기.(진행중)


원본을 변형했는데, 그에 대한 말이 없어서 그냥 진행 했습니다.
게시물에 대한 항의들어 오면 바로 삭제 합니다.
--------------------------------------------------------------------------------------------------




iBatis + Spring을 이용한 미니 방명록 작성하기

------------------------------------------------------------------------
1. Eclipse에서 ibatistest 라는 톰캣 프로젝트 생성
-------------------------------------------------------------------------


------------------------------------------------------------------------
2. iBatis 설치
------------------------------------------------------------------------
 http://ibatis.apache.org/javadownloads.cgi
 lib아래 ibatis-2.3.0.677.jar 파일을 WEB-INF/lib에 위치

------------------------------------------------------------------------
3. 기타 jar 파일들 (log4j, commons 관련, spring framework 관련)은 아래와 같다. 적절히 추가하자.
------------------------------------------------------------------------

commons-collections-3.2.jar
commons-dbcp-1.2.1.jar
commons-dbcp-1.2.1.jar
commons-logging.jar
commons-pool-1.3.jar
jstl.jar
log4j-1.2.9.jar
ojdbc14.jar
spring.jar
spring-webmvc.jar

------------------------------------------------------------------------
4. /WEB-INF/web.xml
------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>ibatistest</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>guestbook</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>guestbook</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 인코딩 필터 설치 , POST, GET 파라미터용 한글이 안깨지도록 한다. -->
<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>

</web-app>


------------------------------------------------------------------------
5. /WEB-INF/guestbook-servlet.xml
------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<bean id="guestbookController" class="guestbook.controller.GuestbookController">
<property name="guestbookManager" ref="guestbookManager" />
</bean>

<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="list.do">guestbookController</prop>
</props>
</property>
</bean>

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

</beans>




------------------------------------------------------------------------
6./WEB-INF/applicationContext.xml
------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="/WEB-INF/sqlMapConfig.xml"/>
</bean>

<bean id="guestbookDao" class="guestbook.dao.GuestbookDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>

<bean name="guestbookManager" class="guestbook.service.GuestbookManagerImpl">
<property name="guestbookDao" ref="guestbookDao" />
</bean>

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.1.100:1521:orcl</value>
</property>
<property name="username">
<value>scott</value>
</property>
<property name="password">
<value>tiger</value>
</property>
</bean>

</beans>



------------------------------------------------------------------------
7. /WEB-INF/log4j.xml
------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p - %m%n"/>
</layout>
</appender>
</log4j:configuration>

>> 이거 에러 나면, 같은 곳에 "log4j.dtd" 파일 만들어줄것. 내용은 없는 빈파일이다.

------------------------------------------------------------------------
8. 실습용 테이블 작성
------------------------------------------------------------------------

Oracle에서 scott/tiger로 로그인 후

SQL>
create table guestbook (
no number constraints pk_guestbook_no primary key,
password varchar2(10),
name varchar2(20),
subject varchar2(100),
content varchar2(500),
write_date varchar2(20)
);

테이블 생성할 때 PK이름 위에서 처럼 주세요… 나중에 SEELCT에서 그 이름으로 힌트 사용합니다.

실습을 위해 데이터 한 건 입력하시구요…

SQL> insert into guestbook values (1,'1111','이종철','연습','연습입니다.',to_char(sysdate,'yyyymmdd'));

SQL> Commit;

------------------------------------------------------------------------
9. WEB-INF/src/sqlMapConfig.xml
------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<typeAlias alias="GuestbookVo" type="guestbook.vo.GuestbookVo" />
<sqlMap resource="guestbook.sql" />
</sqlMapConfig>

------------------------------------------------------------------------
10. /WEB-INF/src/guestbook/vo/GuestbookVo.java
------------------------------------------------------------------------

package guestbook.vo;

public class GuestbookVo {
private int no;
private String password;
private String name;
private String subject;
private String content;
private String write_date;

public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getWrite_date() {
return write_date;
}
public void setWrite_date(String write_date) {
this.write_date = write_date;
}
}



------------------------------------------------------------------------
11. /WEB-INF/src/guestbook/dao/GuestbookDao.java
------------------------------------------------------------------------

package guestbook.dao;


import guestbook.vo.GuestbookVo;
import java.util.List;

public interface GuestbookDao {
public List<GuestbookVo> getContents();
}


------------------------------------------------------------------------
12. /WEB-INF/src/guestbook/dao/GuestbookDaoImpl.java
------------------------------------------------------------------------

package guestbook.dao;

import guestbook.vo.GuestbookVo;
import java.util.List;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

public class GuestbookDaoImpl extends SqlMapClientDaoSupport implements GuestbookDao {

@SuppressWarnings("unchecked")
@Override
public List<GuestbookVo> getContents() {
return (List<GuestbookVo>) getSqlMapClientTemplate().queryForList("getContents");
}
}



------------------------------------------------------------------------
13. /WEB-INF/src/guestbook.sql을 작성
------------------------------------------------------------------------

column을 java에 있는 bean에 매핑하기 위해서 만드는 데 getContents는 Dao에서 호출하는 이름과 같아야 한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Guestbook">
<resultMap id="resultGuestbook" class="GuestbookVo">
<result property="no" column="no" />
<result property="name" column="name" />
<result property="subject" column="subject" />
<result property="content" column="content" />
<result property="write_date" column="write_date" />
</resultMap>
<select id="getContents" resultMap="resultGuestbook">
SELECT /*+ index_desc(guestbook pk_guestbook_no) */
no, name, subject, content, write_date
FROM guestbook
WHERE no is not null
</select>
</sqlMap>



------------------------------------------------------------------------
14. /WEB-INF/src/guestbook/service/GuestbookManager.java 작성
------------------------------------------------------------------------

package guestbook.service;

import guestbook.vo.GuestbookVo;
import java.util.List;

public interface GuestbookManager {

public List<GuestbookVo> getContents();
}


------------------------------------------------------------------------
15. /WEB-INF/src/guestbook/service/GuestbookManagerImpl.java 작성
------------------------------------------------------------------------

package guestbook.service;

import java.util.List;
import guestbook.vo.GuestbookVo;
import guestbook.dao.GuestbookDao;

public class GuestbookManagerImpl implements GuestbookManager{

GuestbookDao guestbookDao;

public void setGuestbookDao(GuestbookDao guestbookDao) {
this.guestbookDao = guestbookDao;
}

public List<GuestbookVo> getContents() {
return guestbookDao.getContents();
}
}

------------------------------------------------------------------------
16. 이번에는 Controller를 작성한다.
------------------------------------------------------------------------

/WEB-INF/src/guestbook/controller/GuestBookController.java

GuestbookManager를 통해 Database에서 데이터를 가져와 ModelAndView를 리턴 하는데 contentslist 라는 객체를 list.jsp로 넘겨주게 된다.

package guestbook.controller;

import guestbook.service.GuestbookManager;
import guestbook.vo.GuestbookVo;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class GuestbookController implements Controller {

private GuestbookManager guestbookManager;

public void setGuestbookManager(GuestbookManager guestbookManager) {
this.guestbookManager = guestbookManager;
}

public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {

List<GuestbookVo> contentslist = guestbookManager.getContents();

return new ModelAndView("list", "contentslist", contentslist);
}
}


------------------------------------------------------------------------
17. /WEB-INF/jsp/list.jsp
------------------------------------------------------------------------

Tomcat 5.5 아래()Tomcat 5.0) 에서 JSTL을 사용하실 때 1번과 같은 방법으로 Taglib을 기술했지만 5.5이상에서는 2번과 같은 방법으로 JSTL Taglib을 사용해야 합니다.

1. <%@ uri="http://java.sun.com/jstl/core" prefix="c" %>
2. <%@ uri="http://java.sun.com/jstl/core_rt" prefix="c" %>


[ibatistest/list.jsp]
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<c:forEach var="contentslist" items="${contentslist}">
<div>
<p>이름 : ${contentslist.name}</p>
<p>제목 : ${contentslist.subject}</p>
<p>내용 : ${contentslist.content}</p>
<p>작성일 : ${contentslist.write_date}</p>
</div>
<hr />
</c:forEach>


------------------------------------------------------------------------
18. [결과확인]http://localhost/ibatistest/list.do 또는http://localhost:8080/ibatistest/list.do
------------------------------------------------------------------------

이름 : 이종철
제목 : 연습
내용 : 연습입니다.
작성일 : 20080511


'JAVA' 카테고리의 다른 글

[펌] Spring - iBatis Integration  (0) 2012.03.27
[펌] log4j.properties 설정  (0) 2012.03.27
이클립스 설정 정리  (0) 2012.02.29
자바의 스마트카드 이론  (0) 2012.02.20
iBatis 와 spring 연동  (0) 2012.02.17