본문 바로가기

Development

Struts 1.x Spring 1.x iBatis 2.3 연동시 체크해야할 xml 들

이번 프로젝트를 진행하면서 사용하는 프레임워크들인데 새로운 컨텍스트를 만들어낼 때마다 자꾸 xml 을 빠뜨려 장기 기억차원에서 정리해본다.

우선 새로운 액션을 만들면 다음의 추가 클래스들을 준비해야한다.

TwitterAction 이라 가정하고 나열해보자
  1. TwitterAction.java
  2. TwitterForm.java
  3. TwitterVo.java
  4. TwitterService,java + TwitterServiceImpl.java
  5. TwitterDao.java + TwitterDaoImpl.java
이제 각 프레임워크를 연결해주는 세팅 작업을 해야한다. 

스트럿츠의 폼 객체를 할당 받는 TwitterForm 은 struts-config.xml 의 <form-beans> 에 추가해주어야한다.
액션 매핑을 외부파일로 둔다면 매핑 파일을 추가해주어야한다.
스프링 플러그인을 스트럿츠에 추가하여 사용한다면 해당 내용의 xml 파일도 추가해야한다.
SQL 매퍼를 위한 맵 파일도 선언해주어야한다.
  1. struts-config-xml 
  2. struts-config-twitter.xml (액션매퍼)
  3. spring-servlet-twitter.xml (객체생성, 트랜젝션)
  4. sql-map-config.xml
  5. sql-twitter.xml (SQL 문장)
그러면 struts-config.xml 에 추가할 내용을 살펴보자

외부 xml 파일에 매핑할 내용을 담아놓은 후 

액션 매핑을 위해 엔티티들 선언한다.

- struts-config.xml

<!ENTITY struts-config-twitter     SYSTEM "struts-config/struts-config-twitter.xml">

<action-mappings>
    &struts-config-twitter;
</action-mappings>

스프링의 트랜젝션을 사용하기 위해 플러그인 항목에 스프링 서블릿 내용을 추가한다.

- struts-config.xml

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation"
  value="/WEB-INF/classes/com/lgfs/resource/application-context.xml
           ,/WEB-INF/spring-servlet/spring-servlet-twitter.xml" />
</plug-in>

매핑을 담당하는 xml 은 아래처럼 해당 액션 메소드와 뷰 파일을 연결해준다.

- struts-config-twitter.xml

<action path="/twitter" type="org.springframework.web.struts.DelegatingActionProxy" 
           name="twitterForm" parameter="cmd" scope="request" validate="false">
        
    <forward name="ajaxResult"      path="/mobile/common/ajaxResult.jsp" />
    <forward name="twitter"             path="/mobile/twitter/twitter.jsp"/>
    <forward name="twtLogin"         path="/mobile/twitter/twtLogin.jsp"/>
    <forward name="success"         path="/mobile/main/success.jsp"/>
    <forward name="failure"             path="/mobile/common/failureException.jsp"/>

</action>   

객체 생성과 트랜젝션을 당담할 스프링 xml 파일을 추가한다.

- spring-servlet-twitter.xml

<?xml version="1.0" encoding="EUC-KR"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
    <bean id="twitterDao" class="com.lgfs.mobile.persistence.TwitterDaoImpl">
        <property name="sqlMapClient">
            <ref bean="sqlMapClient"/>
        </property>
    </bean>    
    
    <bean id="twitterService" parent="baseTransactionProxy"> 
        <property name="target"> 
            <bean class="com.lgfs.mobile.service.TwitterServiceImpl"> 
                <property name="twitterDao"><ref bean="twitterDao"/></property> 
            </bean> 
        </property> 
    </bean>   
     
    <bean name="/twitter" class="com.lgfs.mobile.action.TwitterAction">
         <constructor-arg index="0" ref="twitterService"/>
    </bean>

</beans>

iBatis 를 위한 sql-map-config 파일에 해당 sql 을 담은 xml 파일을 추가한다.

- sql-map-config.xml

<sqlMapConfig>
    <settings enhancementEnabled="true"
                  useStatementNamespaces="true"   />
    <sqlMap resource="com/lgfs/mobile/persistence/twitter.xml"/>    
</sqlMapConfig>

정리해보니 별거 없는데 실제 사용할 때는 뭐 이리 많은지 복잡해보인다.