2014년 12월 9일 화요일

Struts의 Controller[자바,스프링프레임워크3/4,스프링4/3교육학원,Spring Framewok4/3,Spring교육]

Struts의 Controller는 Model2(MVC Model)에서 사용자의 요청을 비즈니스 로직을 처리하는 클래스에 전달하고 비즈니스 로직의 수행결과에 따라 적당한 프리젠테이션 로직을 호출하는 역할을 수행한다. 

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 

Front Controller Pattern은 웹 애플리케이션 전체에 걸친 보안, 로깅, 국제화, 세션 관리 등의 컨트롤 로직을 하나의 단일 컨트롤러 역할을 수행하는 서블릿을 통해 구현하며 모든 요청에 대한 일관성 있는 제어를 제공하는데 Struts에서 Front Controller는 ActionServlet이 담당한다. 

  

Struts의 ActionServlet은 javax.servlet.http.HttpServlet 클래스를 상속 받았으며 HTTP 요청을 스트럿츠의 적절한 핸들러에게 보내는 역할을 수행하는데 웹 애플리케이션이 초기화 될 때 외부 설정 파일(struts-config.xml)을 읽어 들여 ModuleConfig  객체를 생성한다. ActionServlet은 사용자의 요청(request)이 있을 때 마다 가로채 ModuleConfig 객체를 검색하여 모듈 별로 정의된 RequestProcessor에 요청의 처리를 위임 한다. 

  

Struts1.1 이전 버전에서는 ActionServlet이 요청을 받아 핸들러를 호출하는 유일한 클래스 였지만 1.1 버전 이후 부터는 ora.apache.struts.action.RequestProcessor 라는 클래스가 추가되어 클라이언트의 요청을 처리 할 수 있게 되었다. (ActionServlet이 struts_config.xml 파일을 초기화 한 후 RequestProcessor의 process() 메소드를 호출하는데 인자로 request, response를 전달한다. 

  

RequestProcessor는 다음과 같은 절차에 따라 사용자의 요청을 처리한다. 

  

-      RequestProcessor는 요청 경로에 따라 ActionMapping을 조회한다. 

-      ActionMapping에 정의된 ActionForm을 생성하고 사용자의 요청과 함께 전달된 파라미터를 저장한다. 

-      ActionMapping에 정의된  Action의 execute() 메소드를 호출하는데 이때 ActionForm을 파라미터로 전달한다. 

-      Action은 ActionForm에 저장된 파라미터에 따라 모델 계층에 사용자가 요청한 작업을 수행하도록 의뢰한다. 

-      Action은 모델 계층에서 수행된 결과에 따라 ActionMapping에 정의된 ActionForward를 찾아 반환한다. 

-      RequestProcessor는 Action에서 반환된 ActionForward의 수행 결과에 따라 VIEW를 호출한다. 

  

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 

  

RequestProcessor는 클라이언트의 요청을 받게 되면 URI를 사용하여 어떤 Action이 주어진 요청을 처리할 것인지를 ActionMapping에 따라 결정 하는데 이때 struts-config.xml 파일에 설정된 Action 태그에 설정된 내용을 확인 합니다. URI는 Action 설정의 path 속성과 일치해야 한다. 

  

아래 struts-config.xml 파일의 내용을 참고하기 바란다. 

  

<action          

            path="/LoginSubmit" 

            type="login2.LoginAction" 

            name="loginForm"                        

            validate="true" 

            input="/login.jsp" 

        /> 

  

만약 login.jsp에서 HTML의 <form> tag에 action=/LoginSubmit 이라고 한 후 submit 버튼을 누르게 되면 struts-config.xml의 action의 path와 일치함을 알고 login2.LoginAction 클래스를 실행시킴으로써 Action을 처리하게 되는 것 이다. 

  

RequestProcessor는 주어진 입력 값 들을 한꺼번에 자바 빈즈로 묶을 수 있는데 이 자바 빈은 스트럿츠 ActionForm 클래스의 서브클래스로 구성 됩니다. 이를 폼빈(FormBean) 이라고 하며 struts-config.xml 파일에서 <form-bean> 이라는 태그에서 설정을 하게 된다. 

  

아래는 struts-config.xml 파일에서 설정 예이다. 

  

<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> 

  

이때 <action> 태그의 name과 <form-bean>의 name이 일치함을 기억하자! 

  

다른 자바 서블릿과 마찬가지로 Struts의 ActionServlet 역시 웹 애플리케이션의 배치 스크립트(web.xml)에 정의를 해야 하는데 그 내용은 아래와 같다. 

  

<!-- ActionServlet Congif ================================--> 

      <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> 

            <load-on-startup>1</load-on-startup>          

      </servlet> 

      

      

      <!-- ActionServlet Mapping ====================================--> 

      <servlet-mapping> 

            <servlet-name>action</servlet-name> 

            <url-pattern>*.do</url-pattern> 

      </servlet-mapping> 

  

확장자가 .do 로 넘어오는 요청은 ActionServlet으로 서비스 함을 의미한다. 





 [100%환급,실무전문]빅데이터/SQL/자바/스프링/안드로이드/닷넷C… 오라클자바…12-272788
 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육…오라클자바…12-112023
53 [평일100%환급7건]웹퍼블리싱,자바&JSP,안드로이드,C#닷넷,SQL기… 오라클자바…03-151830
52 [주말]C#,ASP.NET마스터 오라클자바…01-312000
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-312945
50 [주말주간]자바&웹,jQUERY,스프링프레임워크,마이바티스 오라클자바…01-311537
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정-… 오라클자바…01-191859
48 [평일야간,주말]안드로이드개발자과정(Android기초실무) 오라클자바…01-111734
47 [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… 오라클자바…01-032300
46 [100%환급,실무전문]빅데이터/SQL/자바/스프링/안드로이드/닷넷C… 오라클자바…12-272788
45 [평일주간]NoSQL,MongoDB,빅데이터기초과정 오라클자바…12-191950
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141930
43 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… 오라클자바…12-112023
42 [평일주간]빅데이터하둡기초과정(BigData Hadoop) 오라클자바…12-091575
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011800
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-012016
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011451

댓글 없음:

댓글 쓰기