태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


'Action'에 해당되는 글 6건

  1. 2008/05/14 [webwork] xwork.xml에서 하나의 action에 default method설정하는 법
  2. 2007/12/27 Struts의 Action과 Webwork의 Action의 차이점!
  3. 2007/11/12 ActionForm사용하기
  4. 2007/11/11 ActionServlet, RequestProcessor
  5. 2007/11/11 ActionForm의 종류
  6. 2007/11/11 Action의 종류
2008/05/14 17:55

[webwork] xwork.xml에서 하나의 action에 default method설정하는 법

<action name="list" class="tester.action.TesterEntryInfoAction" method="list">
   <result name="list">/tester/entryinfo/list.jsp</result>
  </action>
  <action name="detail" class="tester.action.TesterEntryInfoAction" method="detail">
   <result name="detail">/tester/entryinfo/detail.jsp</result>
  </action>
  <action name="addmodify" class="tester.action.TesterEntryInfoAction" method="addmodify">
   <result name="detail">/tester/entryinfo/detail.jsp</result>
  </action>
Trackback 0 Comment 0
2007/12/27 18:30

Struts의 Action과 Webwork의 Action의 차이점!

  • Struts
    • Singleton - Action 인스턴스는 단 하나만 존재. 따라서 thread-safe 하게 구현해야 함.
    • Servlet API 에 종속적임 (HttpServletRequest, HttpServletResponse 를 직접적으로 사용)
  • WebWork
    • None-Singleton - 매 reqeust 마다 객체가 새로 생성됨. thread-safe 일 필요가 없음.
    • Servlet API 에 종속적이지 않으며 POJO 기반.

'Framework' 카테고리의 다른 글

Struts의 Action과 Webwork의 Action의 차이점!  (0) 2007/12/27
webwork를 이용하기 위한 최소 lib  (0) 2007/12/23
Quartz  (0) 2007/12/20
Trackback 0 Comment 0
2007/11/12 00:03

ActionForm사용하기

• ActionForm의 역할

     • HTML 폼("<input type='text' name='phone'/>" 형식)으로 부터 받은 입력은 ActionForm 빈으로 전달
       되고(ActionForm 객체에 대해 setPhone(request.getAttribute(“phone”) 과 같은 호출이 일어난다), 프
       라퍼티(파라미터)에 대한 검증이 끝나면 폼으로 부터 받은 입력 값을 잘 정돈된 자바빈 데이타로 만들어
       Action 에 전달한다.


     • 주의: ActionForm 객체를 직접 이용해서 작업을 수행(비지니스 프로세스 수행 - 모델 부분)을 해서는 안
       된다! - 모델 부분은 컨트롤러와 뷰와 완전히 분리된 상태로 작성해야 한다. ActionForm은 컨트롤러에 속
       한다.


• ActionForm 을 구현하려면..
    • org.apache.struts.action.ActionForm 클래스를 상속 받아야 한다.

    • 각 프라터티는 HTML Form의 Input의 name과(<input name=””/>) 같은 이름을 가져야 한다.

    • 각 프라퍼티별로 Setter와 Getter가 있으면 된다. Setter와 Getter가 꼭 둘 다 있을 필요는 없다.

    • 각 프라퍼티는 되도록 String 과 boolean 형으로 만든다. 잘못 입력한 데이터를 다시 사용자의 입력화면
       에 보여주려면 잘 못 입력한 데이타가 String 으로 보전되어 있어야 하기 때문이다. ActionForm의 프라퍼
       티를 int 등의 형으로 만들면 사용자가 잘못 입력한 데이터 중에서 숫자가 아닌 부분이 모두 사라지게 되
       기 때문에 무엇을 어떻게 잘 못 입력했는지 알 수 없게 된다.

    • 각 프라퍼티들을 ActionForm 객체에 채우기 전에 먼저 초기화 작업을 거치고 싶다면 “public void reset
      (ActionMapping mapping, HttpServletRequest request)” 메소드를 구현해야 한다.

    • 파라미터 값을 ActionForm에서 Action으로 전달하기 전에 유효성 검증 과정을 거치려면 “public
       ActionErrors validate(ActionMapping mapping, HttpServletRequest request)” 메소드를 구현해야 한
       다. (ActionErrors를 리턴한다는 것 주의)

    • struts-config.xml에 다음과 같은 부분을 추가하여, ActionForm을 등록한다. 등록된 ActionForm은 여러
      Action에서 사용될 수도 있다.

     ex)
          <struts-config>
              <form-beans>
                  <form-beans name="폼의이름"  type="myproject.form.FormClass"/>
              </form-beans>
          </struts-config>

• ActionMessages의 역활
      ActionMessages의 역활은 기본적으로 컨트롤러(그중에서도 ActionForm과 Action)에서 수행도중 발생한 오류나 기타 메시지들을 저장한후 뷰 단에서 보여 줄 수 있도록 하는 역활을 한다.    

      이제, ActionForm과  ActionMessages를 기본적으로 사용한 얘제를 보여준다. 사용자가 넘긴 username과 password 파라미터가   빈 값이거나 공백등을 포함한다면 ActionForm에서 오류가 발생하여 다시 로그인 폼으로 돌아가서 잘못된 부분에 대한 에러 메시지를 출력하는 예제이다.    

        또한 로그아웃 기능을 포함하고, 로그인 폼은 POST방식으로 전달되도록 하며, 몇몇 JSP 페이지들은 Action이 불필요하더라도  모든 JSP가 스트럿츠 컨트롤러를 통해 보여질 수 있도록 설정한 예제이다.

      • WEB-INF/config/struts-config.xml을 다음과 같이 작성한다.
         ex)
           <?xml version="1.0" encoding="UTF-8" ?>
           <struts-config>
                 <form-beans>    <!-- Login2를 위한 ActionForm 설정 -->
                      <form-bean name="login2Form" type="strutsguide.forms.Login2Form"></form-bean>
                 </form-beans>
                 <global-forwards>  <!-- Login2 의 로그인 폼 화면으로 이동하기 위한 global forward -->
                      <forward name="login2Form" path="/login2/loginForm.do" redirect="true" />
                 </global-forwards>
                 <action-mappings>
                      <action path="/Welcome" forward="/Welcome.jsp" />

                      <!-- // Login2를 위한 Action Mapping 시작 -->
                      <!-- 로그인 폼 화면 출력 액션 -->
                      <action path="/login2/loginForm" forward="/login2/loginForm.jsp" />
                      <!-- 로그인을 수행하는 액션 -->
                      <action path="/login2/login" type="strutsguide.actions.Login2Action" name="login2Form"

                                          validate="true" scope="request" input="/login2/loginForm.jsp">
                      </action>
                      <!-- 로그 아웃 수행 액션 -->
                      <action path="/login2/logout" type="strutsguide.actions.LogoutAction" />
                      <!-- // Login2 를 위한 Action Mapping 끝 -->
                      <action path="/login1/logInForm" forward="/login1/logInForm.jsp" />
                      <action path="/login1/logIn" type="strutsguide.actions.Login1Action" validate="false">
                           <forward name="success" path="/login1/logInSuccess.jsp" redirect="true" />
                           <forward name="fail" path="/login1/logInFail.jsp" />
                      </action>
                </action-mappings>

                <!--
                    login2에서 메시지 출력에 사용할 프라퍼티 파일.
                    strutsguide.resource 패키지의 application.properties 파일임을 의미한다.
                 -->
                 <message-resources parameter="strutsguide.resources.application" />
           </struts-config>


      • loginForm.jsp 다음과 같이 작성
<%@page contentType="text/html; charset=euc-kr"%>
<%@taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html"%>
<%@taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean"%>
<%@taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic"%>

<html:html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
      <title>로그인 폼</title>
    </head>
    <body>
        <h1>로그인 폼</h1>


        <logic:present name="userInfo" scope="session">
            <%-- session 스코프에 "userInfo" 라는 Attribute가 존재하면 이 부분이 실행된다. --%>
            <b>이미 로그인 하셨습니다.</b><br />
            로그인한 사용자명 : <bean:write name="userInfo" property="userName" scope="session"/><br />
            전화번호 : <bean:write name="userInfo" property="phone" scope="session"/><br />
            이메일 : <bean:write name="userInfo" property="email" scope="session"/><br />
           <html:link action="/login2/logout">로그아웃하기</html:link>
        </logic:present>
        <logic:notPresent name="userInfo" scope="session">
           <-- session 스코프에 "userInfo"라는 Attribute가 존재하지 않으면 이 부분이 실행된다.--%>
           <b>로그인 하십시오.</b><br/>
        </logic:notPresent>
        <!-- 폼의 데이터를 "login.do"로 전송한다. -->
        <html:form action="/login2/login" method="POST" focus="username">
        <html:messages id="msg" message="true">
        <%--
              ActionMessages.GLOBAL_MESSAGE 키로 저장된 ActionMessage 객체가 없다면 이 부분은 실행되지 않는다.
          --%>
            <b><bean:write name="msg"/></b> <br />
         </html:messages>


          Username : <html:text property="username"/>


         <html:messages id="msg" property="invalidUsernameError">
             <%--invalidUsernameError 라는 키로 저장된 ActionMessage 객체가 없다면 이 부분은 실행되지 않는다. --%>
             <b><bean:write name="msg"/></b>
          </html:messages>
          <br />


          Password : <html:password property="password" redisplay="false"/>


         <html:messages id="msg" property="invalidPasswordError">
             <%-- invalidPasswordError 라는 키로 저장된 ActionMessage 객체가 없다면 이 부분은 실행되지 않는다. --%>
             <b><bean:write name="msg"/></b>
         </html:messages>
         <br />
         <html:submit value="로그인"/> &nbsp; <html:reset value="초기화" />
         </html:form>
      </body>
   </html:html>


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

ActionForm사용하기  (0) 2007/11/12
ActionServlet, RequestProcessor  (0) 2007/11/11
ActionForm의 종류  (0) 2007/11/11
Action의 종류  (0) 2007/11/11
Trackback 0 Comment 0
2007/11/11 23:50

ActionServlet, RequestProcessor

ActionServlet 
: 사용자의 요청을 받는 단일 진입점의 역할, 모든 클라이언트의 요청이 ActionServlet 을 거친다.
:  web.xml, struts-config.xml 파일 설정에 따라 모듈별로 정의된 RequestProcessor 의 인스턴스를 생성하고, process() 메소드 호출.
:  Struts 1.1  이후로는 ActionServlet은 설정파일의 초기화를 담당하고 RequestProcessor 가 컨트롤의 역할.

1) ActionServlet 의 초기화
: ActionServlet 이 수행하는 대부분의 처리는 서블릿 컨테이너가 init() 메소드를 호출할 때 발생
    - 내부초기화 작업
    - web.xml 에 설정된 서블릿 초기화 파라메터 조회
    - web.xml 파일로부터 servlet-mapping 을 조회, struts-html 의 form 태그에서 정확한 URL을 구할 수 있다.
    - default module 정보를 조회 : 일반적으로 struts-config.xml 이다.
    - 모듈에 정의된 리소스를 초기화하여 ServletContext 에 저장하고, 데이터소스, 플러그인 초기화
    - 추가모듈정보가 있다면 디폴트모듈과 동일하게 초기화.

2) RequestProcessor 의 요청 처리 절차
: 최초조회시 생성되어 ServletContext에 저장되고, 다음부터는 재활용됨.
: ActionServlet 이 조회된 RequestProcessor 의 process() 메서드를 호출하면 다음 처리절차를 거친다.

    - HTTP 요청이 multi-part/form-data 형식으로 POST 된 경우 HttpServletRequest 를 대치하는 새로운 요청래퍼를 생성.
    - 요청 URL을 분석하여 ActionMapping 에 사용할 path 값을 추출
    - Locale 정보를 설정하여 세션에 저장.  struts-config.xml 파일의 <controller>요소의 locale 속성이 "false" 라면 매번 새로 생성.    
   - 요청의 컨텐츠 타입과 인코딩 설정
    - struts-config.xml 파일의 <controller> 요소의 캐시 설정에 따라 설정.
    - processPreprocess() 메소드를 호출
    - path 값으로 ActionMapping 을 검색하고 사용자가 요청을 수행할 Role 을 가지고 있는지 검사.
    - ActionMapping 에 설정된 ActionForm 을 찾아 스코프가 세션으로 지정되어있는지 검사한다.
    - 요청 파라메터들을 ActionForm 에 설정하고 validate() 메서드를 호출,
        * 에러가 있다면 ActionErrors 객체를 요청하여 요청스코프에 저장하고 ActionMapping 의 input 속성에 지정된 리소스로 포워드
    - struts-config.xml 파일의 <action> 요소에 설정된대로 리소스를 포워드(forward)하거나 포함(include)한다
    - Action 인스턴스를 검색하고 execute() 메소드를 호출, 이때의 리턴값을 ActionForward 에 설정된 리소스로 포워드

 

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

ActionForm사용하기  (0) 2007/11/12
ActionServlet, RequestProcessor  (0) 2007/11/11
ActionForm의 종류  (0) 2007/11/11
Action의 종류  (0) 2007/11/11
Trackback 0 Comment 0
2007/11/11 23:46

ActionForm의 종류

13-1. DynaActionForm
- 수많은 속성과 각 속성의 getter/setter 메서드들을 일일이 코딩한 클래스가 필요하지 않음.
- struts-config.xml 파일에 속성들과 타입을 선언하면 실행시에 속성들과 getter/setter 메소드들이 동적으로 생성됨.
    --> java.util.Map을 통해 속성의 정의되고 java.util.Map에 접근할 수 있는 get/set 메서드를 제공
- form-bean 요소에 등록할 때 form-property라는 하위 요소를 포함해야 함 (initial 속성을 지정 - 안 하면 숫자는 0, 객체는 null)
- validate() 메소드는 DynaActionForm에서 기본 검증을 수행 안하므로,  validate()를 재정의해야만 함

13-2. Map-backed ActionForm
- ActionForm에 전달될 요청 파라미터를 예측할 수 없는 경우에 사용
- ActionForm 의 속성을 Map으로 선언한 후, 실행 시 동적으로 생성된 파라미터를 담도록 할 수 있다.

13-3. List-backed ActionForm
- Map-backed ActionForm 과 유사
- Map 대신 List 를 사용, String 형태의 key 대신 int 형식의 index를 사용
- "value"라는 이름의 요청 파라미터만 처리 : 길이를 알 수 없는 배열형일 때 유용

 

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

ActionForm사용하기  (0) 2007/11/12
ActionServlet, RequestProcessor  (0) 2007/11/11
ActionForm의 종류  (0) 2007/11/11
Action의 종류  (0) 2007/11/11
Trackback 0 Comment 0
2007/11/11 23:45

Action의 종류

다른 형태의 Action
12-1. ForwardAction
- 단순히 특정 페이지로 포워드하는 일만 수행하는 ForwardAction
- <action>요소의 parameter 속성으로 지정된 페이지로 포워드
- ForwardAction을 이용하지 않고, <action>요소의 forward 속성을 이용하는 방법도 있음

12-2. IncludeAction
- ForwardAction과 동일한 결과
- 지정된 JSP를 수행하고 컨트롤이 RequestProcessor로 돌아오느냐 아니냐?의 차이
- Request Processor가 해야할 모든 작업을 마친 후 수행한다는 점은 동일
- <action> 요소의 include 속성을 이용해도 동일한 결과

12-3. LocaleAction
- 사용자의 로케일은 웹 브라우저에 의해 HTTP Header에 담겨 전송되는 Accept-Language의 값에 따라 자동으로 판별된다.
- 사용자의 로케일 정보는 Globals.LOCALE_KEY  이름으로 세션에 저장되어 재사용됨.
    1)  controller 요소의 locale 속성을 "false" 로 설정하면 요청이 있을 때마다 검사하도록 할 수 있음.
    2)  세션에 저장된 로케일을 변경하고자 할 때 LocaleAction 사용 - "language", "country"값에 따라 로케일 생성
    3) 프로그램상에서 명시적으로 새로운 로케일 생성 후 Globals.LOCALE_KEY 의 이름으로 세션에 저장

12-4. DispatchAction
- 하나의 서비스에 관련된 여러 개의 작은 Action들을 하나의 클래스에 모으는 것.
- struts-config.xml 파일의 action 요소에 메서드를 선택할 때 사용할 요청 파라미터의 이름을 parameter 속성을 통해 지정
- execute() 호출하면 DispatchAction 의 설정에서 parameter 속성으로 지정된 요청 파라미터의 값을 확인하여 동일한 이름의 메서드를 찾아 호출

12-5. LookupDispatchAction
- DispatchAction 의 서브클래스로 하는 일이 유사.
- 파라미터의 값을 리소스 번들에서 검색하여 리소스 번들의 키를 검색한 후, 검색된 키에 매핑된 메서드를 호출
- getKyeMethodMap() 메소드를 구현해야 한다 : 리소스 번들의 키와 메서드 명을 매핑한 java.util.Map을 반환하는 메소드.
- struts-config.xml 파일의 message-resources 요소에 해당 키로 정의된 값이 있어야 함
- 리소스 번들을 검색할 때 사용되는 요청 파라미터의 이름을 parameter 속성을 통해 지정

12-6. MappingDispatchAction
- DispatchAction 의 서브클래스로 하는 일이 유사하나 메소드별로 각각 서로 다른 ActionMapping을 선언한다는 차이
- 매소드의 선택이 action 요청의 parameter 속성에 의해 결정

12-7. SwitchAction
- 현재 작업 중인 모듈에서 다른 모듈로 모듈을 전환하고, 새로운 모듈 내의 URI로 포워드한다.
    prefix : 전환해야 하는 모듈명
    page : 전환 후 포워드할 상대 URI

 

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

ActionForm사용하기  (0) 2007/11/12
ActionServlet, RequestProcessor  (0) 2007/11/11
ActionForm의 종류  (0) 2007/11/11
Action의 종류  (0) 2007/11/11
Trackback 0 Comment 0