Struts 1 - 스트럿츠 1의 다양한 Action Class 들 part 3

Published on: 2009. 6. 30. 00:05 by louis.dev


1.SwitchAction




Context 내에 여러 개의 모듈이 있을 때  현재 작업중인 모듈에서 다른 모듈로 전환하고 새로운 모듈내의 포워드 하는 일을 수행한다. struts1 의 가장 핵심적인 Action중의 하나라고 할 수 있다.

[struts1의 Groupping 과 Module]
struts1에서의 그룹핑을 사용해서 하는 방법이 가장 쉬운 방법 중에 하나다 . web.xml에
-----------------------------------------------------------------------------------------------
<init-param>
  <param-name>config</param-name>  
  <param-value>
   /WEB-INF/struts-config.xml,
   /WEB-INF/struts-config-dispatch.xml,
   /WEB-INF/struts-config-mapping.xml,
   /WEB-INF/struts-config-lookup.xml  
  </param-value>  
 </init-param>
-----------------------------------------------------------------------------------------------
다음과 같은 방법으로 xml 파일을 모아두면 그룹핑 방식으로 struts를 구성하는 것이다. 또한 module로 나누는 방식은
web.xml에서
-----------------------------------------------------------------------------------------------
<init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/config/struts-config.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/dispatchModule</param-name>
   <param-value>/WEB-INF/config/struts-dispatchModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/lookupModule</param-name>
   <param-value>/WEB-INF/config/struts-lookupModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/mappingModule</param-name>
   <param-value>/WEB-INF/config/struts-mappingModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/uploadModule</param-name>
   <param-value>/WEB-INF/config/struts-uploadModule.xml</param-value>
  </init-param>
-----------------------------------------------------------------------------------------------
이런식으로 한번에 선언하지 않고 나누어 선언 할 수 있다.

특징:
그룹핑을 하면 각 설정xml파일안의 이름들이 같으면 안되나 module별로 나누면 같은 이름이 있어도 된다.
즉 그룹핑 에서는 <action path="">의 path명이 모든 xml 파일이 같으면 안되나 module방식에서는 같아도 상관이 없다.

작성방법
1)web.xml 에 module별로 xml파일을 설정한다

-----------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>struts1</display-name>
 
  <servlet>
   <servlet-name>action</servlet-name> <!-- 아무이름이나 하면 된다. -->
   <servlet-class>  <!-- 클래스 지정 -->
    org.apache.struts.action.ActionServlet
   </servlet-class>
   

 <!-- switch Action module types -->
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/config/struts-config.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/dispatchModule</param-name>
   <param-value>/WEB-INF/config/struts-dispatchModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/lookupModule</param-name>
   <param-value>/WEB-INF/config/struts-lookupModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/mappingModule</param-name>
   <param-value>/WEB-INF/config/struts-mappingModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/uploadModule</param-name>
   <param-value>/WEB-INF/config/struts-uploadModule.xml</param-value>
  </init-param>

  
   </servlet>
 
  <servlet-mapping> <!-- url 패턴 설정 -->
   <servlet-name>action</servlet-name> <!-- *.do로 들어오면 servlet-name이 action 실행 -->
   <url-pattern>*.do</url-pattern>
  </servlet-mapping>
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
-----------------------------------------------------------------------------------------------
모듈화를 위해 다음과 같이 모듈로 설정한다.

여기서 중요한 부분은

<init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/config/struts-config.xml</param-value>
  </init-param>
이부분과 같지 config는 기본적으로 있어야 하며

<init-param>
   <param-name>config/dispatchModule</param-name>
   <param-value>/WEB-INF/config/struts-dispatchModule.xml</param-value>
  </init-param>
위의 빨간색 이름은 동일해야 한다. 또한 param-name의 빨간색 부분은 jsp페이지의 이름이 prefix인 hidden값으로 보내는 value와 같아야 해당 모듈이 실행된다.

2) 각각의 config.xml파일을 생성한다.

<action path="/toModule"
                type="org.apache.struts.actions.SwitchAction"/>

이부분은 각각의 config.xml파일에 모두 존재해야 한다.

3) jsp페이지에서 name 이 prefix와 page인 hidden값을 생성하고 각각을 파라미터로 넘겨준다.

<input type="hidden" name="prefix" value="/mappingModule">
<input type="hidden" name="page"   value="/register.do">


prefix로 전달되는 value는 web.xml파일에 설정된 mappingModule을 사용하겠다는 것이고 page는 그 모듈안에 있는 어떠한 action을 사용할지를 적어 주면 된다.