2014년 9월 3일 수요일

[심심풀이]다중 애플리케이션(Multi-Application)[자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]

다중 애플리케이션(Multi-Application) 

 스트럿츠 1.1이상에서는 다중 애플리케이션 사용이 가능 합니다. 

애플리케이션의 모듈이 동일한 웹애플리케이션의 일부 이지만 서로 독립적입니다. 

다중 애플리케이션을 사용하는 이유는 업무를 좀 더 조직화, 세분화 할 수 있다는 장점이 있습니다. 

쇼핑몰을 개발하는데 상품의 디스플레이 부분과 쇼핑카트를 구현 하는 부분을 별도의 다중 애플리케이션으로 구성 하는 것이 가능 합니다. 이렇게 하는 이유는 상호 독립적이고 수평적인 개발이 가능하도록 하기 위해서 입니다. 


기본 애플리케이션이 아닌 모듈은 config/ 로 시작 합니다. 

config/ 다음에 오는 부분은 애플리케이션 모듈의 접두어가 되며 프레임웍 전반을 걸쳐클라이언트의 요청을 처리하는데 사용 됩니다. 

아래에 간략히 방법을 설명 하고 예제를 만들어 보도록 합니다. 
(이클립스에서 톰캣 애플리테이션으로 Login이라는 프로젝트를 작성 후… 별도의 test라는 독립된 애플리케이션을 만들려고 합니다.) 

1.        웹 애플리테이션의 web.xml 파일에 다중 애플리케이션을 위한 설정을 합니다. 

<servlet> 
          <servlet-name>action</servlet-name> 
          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
          <init-param> 
                        <param-name>config</param-name> 
                        <param-value>/WEB-INF/struts-config.xml</param-value> 
          </init-param> 
          <init-param> 
                  <param-name>config/test</param-name> 
                  <param-value>/WEB-INF/struts-test-config.xml</param-value> 
          </init-param> 
          <load-on-startup>1</load-on-startup>                
        </servlet> 


2.        이번에 어떻게 모듈(애플리케이션)을 Switch하는지 알아 봅니다. 

두 가지의 큰 방법이 있는데 아래와 같습니다. 

-        forward를 이용하는 방법 

struts-config.xml에서 test 애플리케이션으로 스위칭을 하기 위해서 forward를 이용합니다. 

유심히 볼 부분은 contextRelative가 true가 되어 있다는 것이다. 이 값은 하나의 웹 애플리테이션을 사용 하는 경우에는 false(path 설정 시 기준을 애플리케이션을 기준으로)  이지만 다중 웹 애플리케이션을 사용 하기 위해서는 true(path 설정 시 기준이 context가 기준)로 설정 합니다. 

즉 아래에서 test 라는 또 하나의 애플리케이션을 가리킬 때 /test/mysubmit과 같이 컨텍스트를 기준으로 경로를 사용 했습니다. (현재 톰캣 프로젝트를 하나 만들었죠^^ Login 이라는 것을…) 

<struts-config> 
... 
<global-forwards> 
<forward name="toModuleB" 
contextRelative="true" 
path="/test/mysubmit" 
redirect="true"/> 
... 
</global-forwards> 

</struts-config> 



- org.apache.struts.actions.SwitchAction를 이용하는 방법 

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



이제 예제를 만들어 보도록 하겠습니다. 예제는 개념을 익히기 위해 최대한 간단히 작성 했습니다. 


[처리흐름] 

Login이라는 톰캣 프로젝트(웹애플리케이션)를 하나 만들고 별도의 독립적인 test라는 애플리케이션을 만들어 struts-config.xml과는 별도로 struts-test-config.xml을 만들어 보겠습니다. (물론 둘은 업무적으로 어떤 연관성을 가지지는 않고 있습니다. 예문에서는 단지 다중 애플리케이션을 설정하고 로딩 하는 것만 살펴 볼테니까요…) 

사용자가 /Login/login.jsp를 실행 합니다. 

실행 화면은 다음과 같습니다. (간단히 ID와 PASSWORD만 입력 받고 submit 버튼을 누릅니다.) 

  

Submit 버튼을 누르면 이 액션을 /toTest라는 path로 넘어갑니다. 이 요청을 우선 Login 애플리케이션에서 받습니다. 

<action 
                path="/toTest" 
                type="login2.toTest" 
                validate="false"  
                name="loginForm"              
        /> 

위와 같이 설정이 되어 있습니다. 그래서 login2.toTest 라는 클래스가 실행을 하겠죠… 

toTest.java 에서는 간단히 위에서 설명한 2번 방법대로 forward를 이용하여 test라는 애플리케이션으로 스위칭을 해 버립니다. 

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 
                                
                //sub application인 test로 버네기 위해 forward 이용 
                return (mapping.findForward("toTest")); 
                
        } 

위에서 return (mapping.findForward("toTest")); 부분의 처리를 위해 당연히 “toTest” 라는 forward가 있어야 겠죠^^ 

메인 설정 파일인 struts-config.xml에서 아래와 같이 정의하고 있습니다. 

<forward name="toTest" 
                contextRelative="true" 
                path="/test/mysubmit.do" 
                redirect="true"/> 


이제 제어가 /test/mysubmit.do라는 액션으로 인해 test 라는 애플리케이션으로 넘어 가게 됩니다. 물론 위의 /test/mysubmit.do 는 struts-test-config.xml에서 정의를 하고 있습니다. 그 설정 내용은 다음과 같습니다. 

<action-mappings>            
        <!-- 현재의 설정 파일은 struts-test-config.xml 이므로... path에 "/test/mysubmit" 아님을 주의! --> 
        <action 
                path="/mysubmit"    
                type="login2.Welcome2"    
                validate="false"                  
        /> 
          
    </action-mappings> 


이제는 login2.Welcom2라는 클래스가 실행 되겠죠^^ 

그 내용은 단순히 result.jsp로 포워딩 시키는 일을 합니다. 

요기까지 입니다. 

그럼 이젠 전체 소스를 확인 하도록 하죠…. 

==================================================================== 


------------------------------- 
/Login/test/login.jsp 
------------------------------- 
<%@ page pageEncoding="euc-kr" %> 
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 
<html> 
<body> 

<html:form action="/toTest" focus="id"> 
        <table>              
                <tr>                        
                        <th align="right">ID</th>                                              
                        <td><html:text property="id" value=""/></td> 
                </tr> 
                <tr> 
                        <th align="right">PASSWORD</th>                                              
                        <td><html:password property="pwd" redisplay="false"/></td> 
                </tr> 
                <tr>                      
                        <th></th> 
                        <td> 
                            <html:submit/> 
                            <html:reset/>                              
                        </td> 
                </tr>                                
        </table> 
</html:form> 
</body> 
</html> 


------------------------------- 
/WEB-INF/struts-config.xml 
------------------------------- 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> 
<struts-config> 
      
    <!-- ========== Form Bean Definitions ================================== --> 
    <form-beans> 
        <form-bean name="loginForm" type="login2.LoginForm">                  
            <form-property name="pwd" type="java.lang.String" /> 
            <form-property name="id" type="java.lang.String" />            
        </form-bean>            
    </form-beans> 
    
  
    <!-- ========== Global Forward Definitions =============================== --> 
    <global-forwards> 
        <forward name="toTest" 
                contextRelative="true" 
                path="/test/mysubmit.do" 
                redirect="true"/> 
    </global-forwards> 
    
    <!-- ========== Action Mapping Definitions =============================== --> 
    <!-- valiedate를 true라고 함으로써 LoginForm의 validate가 호출 됩니다.            --> 
    <action-mappings>            
        <action 
                path="/toTest" 
                type="login2.toTest" 
                validate="false"  
                name="loginForm"              
        />          
    </action-mappings>  
        
</struts-config> 



------------------------------- 
/WEB-INF/struts-test-config.xml 
------------------------------- 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> 
<struts-config> 
    
    <!-- ========== Global Forward Definitions =============================== --> 
    <global-forwards> 
        <forward name="success" path="/result.jsp"/> 
    </global-forwards> 
    
    <action-mappings>            
        <!-- 현재의 설정 파일은 struts-test-config.xml 이므로... path에 "/test/mysubmit" 아님을 주의!  메인 애플리케이션의 foreard에 기술한 /test/mysubmit에 의해 아래의 매핑과 연결됨, 결국 login2.Welcom2가 실행됨--> 
        <action 
                path="/mysubmit"    
                type="login2.Welcome2"    
                validate="false"                  
        /> 
          
    </action-mappings>                          
</struts-config> 


------------------------------- 
/WEB-INF/src/login2/toTest.java 
------------------------------- 
package login2; 

import org.apache.struts.action.Action; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.struts.action.ActionForm; 
import org.apache.struts.action.ActionForward; 
import org.apache.struts.action.ActionMapping; 


public class toTest extends Action {        
        
        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 
                                
                //sub application인 test로 보내기 위해 forward 이용 
                return (mapping.findForward("toTest")); 
                
        } 



------------------------------- 
/WEB-INF/src/login2/Welcome2.java 
------------------------------- 
package login2; 

import org.apache.struts.action.Action; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.struts.action.ActionForm; 
import org.apache.struts.action.ActionForward; 
import org.apache.struts.action.ActionMapping; 

import login2.Constants; 

public class Welcome2 extends Action {        
        
        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 
                                
                //성공적으로 처리 되었음, test 애플리케이션의 result.jsp로 보내버림...                return (mapping.findForward(Constants.SUCCESS)); 
                
        } 





------------------------------- 
/Login/test/result.jsp 
------------------------------- 
OK~




 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… 오라클자바…12-271702
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111219
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… 오라클자바…03-15981
52 [주말주간]C#, ASP.NET마스터 오라클자바…01-311134
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 오라클자바…01-31898
50 [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 오라클자바…01-31827
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191117
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111003
47 [평일야간,주말주간]JAVA,Network&WEB&Framework 오라클자바…01-031491
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… 오라클자바…12-271702
45 [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… 오라클자바…12-191246
44 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) 오라클자바…12-141244
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111219
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-09980
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011152
40 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… 오라클자바…12-011379
39 [평일야간,주말,주말야간]SQL기초에서실무까지(SQL기초,PLSQL,힌… 오라클자바…12-01869

댓글 없음:

댓글 쓰기