본문 바로가기
Framework/Struts

초보강좌

by windrises 2008. 2. 10.
잘도설명되있군, 나를위한거란다...

돌아댕기다 퍼논건데.. 어디더라..

초보을 위한 스트럿츠(struts) 기초 강좌 - 1부


# 강좌를 시작하며 #
1부에서는 스트럿츠의 가장 기본인 Action mapping 을 직접 따라 해보고
스트럿츠의흐름을 이해하도록 합시다.
그리고 스트럿츠를 처음 시작하는 사람의 이해를 돕기 위해서 화면 캡처부분을
많이 추가 했습니다.
강좌의 원할한 진행을 위해 존칭은 생략 하겠습니다.


# 스트럿츠란 #
모델1 방식
직접 jsp을 호출하는 방식이다. jsp에는 DB연결부터 모든 비지니스 로직과
실제 브라우저상에 보여줄 프리젠테이션 레이어 부분이 같이있다.
물런 Beans을 사용하면 DB부분은 따로 뺄수 있지만. 각각의 jsp 가
호출된다면 모델1 방식이다.

모델2(MVC) 방식
모델1의 가장 큰 단점은 jsp 소스가 길어진다는것이다. 모든것을 jsp가 주도로
처리 하니 당연한 일이다.그로므로서 개발 속도는 빠를지언정 나중에 그소스를
다시 보거나 유지보수할땐 힘들어지는 경우가 많다.그래서 등장한것이 모델2
MVC(model - Controller - view) 방식이다.모든 요청은 Controller 맞고 비지니스
로직은 model이 담당하고 jsp는 view의 역활로 결과를 화면상에 뿌려주는 역활이다.
모델1에서 jsp 혼자 했던 일을 각각의 역활을 나눠주는것이다. jsp는 훨씬 가벼워졌고
비지니스로직과 프리젠테이션 레이어를 분리하므로서 비지니스로직을 재사용도 가능해졌고
유지보수에 많은 장점을 가지게 된다.

스트럿츠(struts) Framework
모델2 도 Controller 가 너무 복잡해지고 재사용이 거의 불가능 해지는 단점이 있다
그래서 그런 단점을 보완하고 모델1의 장점과 모델2의 장점을 모아서 스트럿츠를 만들었다.
스트럿츠는 가장 널리 쓰이는 Framework중에 하나이다.


# 기본 환경 #
JDK 1.5
Tomcat 5.5
struts-1.3
이클립스 3.2 (wtp 포함 all-in-one)


# 환경 세팅 #
1 기본 환경 세팅
http://www.jspclub.co.kr/board/view.jsp?div=study&no=700&npage=1
위 강좌를 보고 이클립스 세팅을 마친다.
참고로 필자는 이클립스의 workspace 는 c:\dev 로 했고 프로젝트 명은 myjsp로
했다.

2 struts 라이브어리 다운
http://struts.apache.org/download.cgi#struts135
struts-1.3.5-lib.zip 을 다운 받는다.

3 다운받은 라이브어리 WEB-INF/lib 안에 넣는다.



# WEB-INF/web.xml 에서 struts 설정 부분 추가 #
web.xml 부분에 확장자가 *.do 패턴으로 오는것은 모두 org.apache.struts.action.ActionServlet 을
호출하라는 부분을 추가 하는 부분이다.
<!--Standard  Action  Servlet  Configuration  -->    
<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>debug</param-name>  
             <param-value>2</param-value>    
    </init-param>  
       <init-param>    
          <param-name>detail</param-name>    
          <param-value>2</param-value>    
    </init-param>    
    <load-on-startup>2</load-on-startup>    
</servlet>    

<!--  Standard  Action  Servlet  Mapping  -->    
<servlet-mapping>    
    <servlet-name>action</servlet-name>  
       <url-pattern>*.do</url-pattern>    
</servlet-mapping>




# WEB-INF/struts-config.xml 파일 추가 #
스트럿츠의 config파일이다.




# WEB-INF/struts-config.xml 에 action-mapping 내용 추가 #
위의 web.xml에 의해 호출된 ActionServlet은 struts-config.xml 정보를 읽어 처리 되어진다.
action 패스가 /Index 이면 examples.IndexAction 클래스의 excute 메소드를 호출한다.
<?xml  version="1.0"  encoding="UTF-8"?>    

<!DOCTYPE  struts-config  PUBLIC    
"-//Apache  Software  Foundation//DTD  Struts  Configuration  1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">    
<struts-config>    
    <action-mappings>
      <action  path="/Index"  type="examples.IndexAction">
                <forward  name="success"  path="/index.jsp"  />
        </action>
      </action-mappings>
</struts-config>  
  



# examples 페키지 추가 #
examples라는 패키지를 만든다 .



# IndexAction class 추가 #



# IndexAction class 비지니스 로직 부분추가 #
struts-config.xml 정보에 의해 호출된 excute 안에서 request 에 title 이란 이름으로
"나의 첫번째 struts 성공" 이라고 request attribute에 추가 한다.
return mapping.findForward("success"); 이부분은 struts-config.xml 에 정의된 매핑이름이
success 일경우 index.jsp 파일로 Forward 시켜준다
package  examples;

import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;

import  org.apache.struts.action.Action;
import  org.apache.struts.action.ActionForm;
import  org.apache.struts.action.ActionForward;
import  org.apache.struts.action.ActionMapping;

public  class  IndexAction  extends  Action  {

        public  ActionForward  execute(
                ActionMapping  mapping,
                ActionForm  form,
                HttpServletRequest  request,
                HttpServletResponse  response)
                throws  Exception  {
        
         request.setAttribute("title",  "나의  첫번째  struts  성공");

                return  mapping.findForward("success");

        }

}



# index.jsp 추가 #



# index.jsp 내용 #
examples.IndexAction 에서 넣은 request attribute 부분을 출력한다.
<%@  page  language="java"  contentType="text/html;  charset=EUC-KR"
        pageEncoding="EUC-KR"%>
<%=request.getAttribute("title")  %>




# 추가된 파일들 #



# 톰켓 서버 시작 #


# 결과 확인 #
"나의 첫번째 struts 성공" 이란 글씨가 보이면 성공이다.


초보을 위한 스트럿츠(struts) 기초 강좌 - 2부


# 강좌를 시작하며 #
지난 1부 강좌에서는 struts 의 Action Mapping 의 흐름을 알아봤다.
이번에는 controller 에 대해 알아본다. 1부 강좌를 성공적으로 마친 분이라면
쉽게 따라 할수 있을것이다.



# controller #
RequestProcessor 란?
MVC 모델의 C에 해당되는 controller를 struts 에서도 쉽게 쓸수 있다.
이에 해당되는 클레스는 RequestProcessor 이다

왜 RequestProcessor 가 필요한가?
1부에서 해본 struts는 하나의 actiion 에 Action Class가 mapping되고 거기에 관련 jsp
로 forward 시켜주는것을 배웠다. actiion이 많아 지면 그만큼Action Class도 많아진다.
근데 만약에 모든 Action Class에 request에 한글 인코딩을 해줘야 한다고 생각해보자.
수많은 Action Class를 모두 추가 할것인가? 하지만 걱정할것 없다. 모든 Action Class가
실행되기전 RequestProcessor 을 거치기 때문이다.이처럼 모든 Action Class가 실행되기전
해야할 작업에대해 RequestProcessor을 상속받아서 하면된다.



# WEB-INF/struts-config.xml 에 controller 설정 부분 추가 #
1부서 사용했던 struts-config.xml 에 controller 부분을 추가 한다.processorClass을 정의 하는 부분이다
<?xml  version="1.0"  encoding="UTF-8"?>  

<!DOCTYPE  struts-config  PUBLIC    
"-//Apache  Software  Foundation//DTD  Struts  Configuration  1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">  
<struts-config>  
    <action-mappings>
      <action  path="/Index"  type="examples.IndexAction">
                <forward  name="success"  path="/index.jsp"  />
        </action>
      </action-mappings>
   
    <controller>
      <set-property property="processorClass"
            value="controller.MyRequestProcessor"/>
    </controller>

</struts-config>




# controller 페키지 추가 #
controller라는 패키지를 만든다 .




# MyRequestProcessor class 추가 #




# MyRequestProcessor 의 내용 #
RequestProcessor 을 상속받은 MyRequestProcessor는 모든 Action 이 실행되기전
호출되는 processPreprocess 메소드안에 한글인코딩 부분을 추가한다.
package controller;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class MyRequestProcessor extends RequestProcessor{

  protected boolean processPreprocess(HttpServletRequest request,
      HttpServletResponse response){
   
    try{
      request.setCharacterEncoding("euc-kr");
    }catch(Exception e){}
   
    System.out.println("모든 Action이 실행되기 전에 한글 인코딩을 해줬습니다.");
   

    return true;
  }

   }




# 추가된 파일들 #




# 톰켓 서버 시작 #



# 결과 확인 #
"나의 첫번째 struts 성공" 이란 글씨가 보이면 성공이다.



# MyRequestProcessor가 실행되었는지 확인 #
console 창에 "모든 Action이 실행되기 전에 한글 인코딩을 해줬습니다." 이란 글씨가 보이면 성공이다.

'Framework > Struts' 카테고리의 다른 글

Struts 기본환경설정  (0) 2008.01.03