struts2] struts2 + ibatis 활용한 게시판1-1
struts2 + ibatis 를 활용한 게시판
- struts2 framework 와 ibatis를 연동한 게시판 구축
- struts2 action클래스와 paging처리하는부분은 2페이지에 걸쳐 작성
1. 환경설정
- struts2,ibatis,oracle library 등록(web-inf/lib)
2. struts.xml
- aciton 등록
3. web.xml
- struts환경에서는 사용자가 action요청시 가장 먼저 FilterDispatcher가 호출되고 위에 그림처럼
배치관리자로 인해 struts.xml 파일과 struts.properties 파일이 자동으로 호출되게 된다
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4. DaoService.java
- 데이타베이스 접속하기위한 DaoManager 를 반환하는 DaoService클래스 작성
- 싱글턴패턴으로 만들어서 하나의 DaoManager를 공유
* struts.xml
- 반드시 src 기본경로에 존재하여야 struts에서 인식할수있다.
- web.xml에서 등록한 필터가 읽혀진후 해당 xml문서가 읽혀진다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC '-//Apache Software Foundation//DTD Struts Configuration 2.0//EN'
'http://struts.apache.org/dtds/struts-2.0.dtd'>
<struts>
<package name="defalut" extends="struts-default" namespace="">
<action name="list" class="action.ListAction">
<result>/list.jsp</result>
</action>
</package>
</struts>
* DaoService.java
- DaoService는 한번만 읽혀져서 하나만 생성되어 DaoManager는 한개만 생성된다.
package dao;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.dao.client.Dao;
import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.DaoManagerBuilder;
public class DaoService {
private static DaoManager daoManager;
private static DaoManager getDaoManager(){
String daoXmlResouce = "dao.xml"; //src폴더에 dao.xml
Reader reader = null;
if(daoManager ==null) //static으로 선언되어있기때문에 null 체크를 해서 null일경우만 생성
try {
reader = Resources.getResourceAsReader(daoXmlResouce); //dao.xml파일로부터 읽음
daoManager = DaoManagerBuilder.buildDaoManager(reader);
} catch (Exception e) {
e.printStackTrace();
}
return daoManager;
}
//실제 서버에서 dao객체가 필요할 경우 호출하는 메서드
public static Dao getDao(Class inter){
return getDaoManager().getDao(inter);
}
}
* dao.xml
- 사용하고자하는 dao interface 및 dao를 구현하고 있는 dao 를 명시
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE daoConfig PUBLIC "-//ibatis.apache.org//DTD DAO Configuration 2.0//EN" "http://ibatis.apache.org/dtd/dao-2.dtd">
<daoConfig>
<context id="sqlMap">
<transactionManager type="SQLMAP">
<property name="SqlMapConfigResource" value="config/SqlMapConfig.xml"/>
</transactionManager>
<dao interface="dao.Bbs" implementation="dao.BbsImpl"/>
</context>
</daoConfig>
* SqlMapConfig.xml
- 사용하는 database 환경설정이 필요한 파일이다(여기서는 oracle을 사용)
<!DOCTYPE sqlMapConfig PUBLIC '-//ibatis.apache.org/DTD SQL Map Config 2.0//EN'
'http://ibatis.apache.org/dtd/sql-map-config-2.dtd'>
<sqlMapConfig>
<properties resource="config/sqlMapConfig.properties" />
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" /> //라이브러리(odbc14.jar)파일이 필요
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${user}" />
<property name="JDBC.Password" value="${pwd}" />
</dataSource>
</transactionManager>
<sqlMap resource="config/bbs.xml" />
</sqlMapConfig>
* SqlMapConfig.properties
- 보안을 위해 db접속정보를 따로 파일로 만들어둠
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:ORCL
user=SCOTT
pwd=TIGER
* Bbs.java(Interface)
- 사용자가 호출할수 있는 기능적요소들을 명시
package dao;
import java.util.ArrayList;
import vo.BbsVO;
public interface Bbs {
public ArrayList<BbsVO> getAllBbs();
}
* BbsImpl.java
- 위의 인터페이스를 구현하고 SqlMapDaoTemplate 를 상속받는 클래스
- 반드시 디폴트 생성자만 있으면 안되고 반드시 SqlMapDaoTemplate를 상속받고
DaoManager를 인자로 받는 생성자를 만들어야 한다.
- struts환경에서 여기에 정의된 메소드를 호출하게되면 결과를 받을수 있게 된다.
ex> getAllBbs()
* BbsVO.java
- DataBase에 있는 컬럼명과 동일한이름으로 멤버 변수로 정의
- 정의된 멤버변수의 setter/getter 메서드를 정의
* bbs.xml
- SqlMapConifg.xml 안에 <sqlMap>에 정의된 xml문서
- 이 안에 정의된 <select> 요소의 속성 id는 값은 BbsImple.java클래스의 queryForList("") 이안에
들어가는 인자값(String)과 동일해야 한다. ex> select id="selectAllBbs"
<?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="memo">
<typeAlias alias="bbsvo" type="vo.BbsVO"/>
<select id="selectAllBbs" resultClass="bbsvo">
select * from bbs_t order by idx desc
</select>
</sqlMap>
* ListAction.java
- struts 액션 클래스로서 ActionSupport를 상속
- pojo기반으로 사용하게되면 session처리하는데 어려움이 있기때문에 ActionSupport를 상속
- ListAction에서 ibatis DaoService에 정의된 메소드를 호출하게되면 해당 객체를 얻어낼수있다.
ex> Bbs bbs = (Bbs)DaoService.getDao(Bbs.class);