'Struts2'에 해당되는 글 7건

  1. 2014.12.11 태그 라이브러리
  2. 2014.12.11 리절트 개요와 종류
  3. 2014.12.11 스트럿츠2 아키텍쳐
  4. 2014.12.11 도메인 오브젝트
  5. 2014.12.11 Action
  6. 2014.12.11 struts.xml
  7. 2014.12.11 web.xml

태그 라이브러리

Posted by 단순대왕 Struts2 : 2014. 12. 11. 16:08

7. 태그 라이브러리

struts2 태그는 일반 태그(Generic Tag)와 사용자 인터페이스 태그(UI Tag)로 나뉜다. 일반 태그는 컨트로 태그

(Control Tag)와 데이터 태그(Data Tag)로 구성된다. 사용자 인터페이스 태그는 태스크 폼 태그(Form Tag)

넌 폼 태그(Non-Form Tag)로 구성된다.

- 일반 태그

  - 컨트로 태그: if~elseif~else, append, generator, iterator, merge, sort, subset

  - 데이터 태그: a, action, bean, date, debug, i18n, include, param, push, set, text, url, property

- 사용자 인터페이스 태그

  - 폼 태그: checkbox, checkboxlist, combobox, datetimepicker, doubleselect, head, file, form, hidden, label

            optiontransferselect, optgroup, password, reset, select, submit, textarea, textfield, token, updownselect

  - -폼 태그: checkbox, checkboxlist, combobox, datetimepicker, doubleselect, head, file, form, hidden, label,

               optiontransferselect, optgroup, password, reset, select, submit, textarea, textfield, token,

               updownselect, actionerror, actionmessage, component, div, fielderror, table, tabbedPanel,

               tree, treenode

 

7.1. 태그 라이브러리 설정

<%@ taglib prefix=”s” uri=”/struts-tags” %>

[형식]

<s:tagName name=”property” />

 

7.2. OGNL

OGNL Object Graph Navigation Language의 약어. OGNL 표현식을 사용하여 밸류스택에 저장된 여러

액션 객체의 정보를 얻어온다.

밸류스택은 XWork와 스트럿츠2의 동적 컨텍스트 기반의 핵심 부분으로 객체의 스택이다.

스트럿츠2에서는 액션이 실행될 때마다 액션을 스택 상에 저장하여 밸류스택이 구축된다.

액션이 실행되는 동안 밸류스택에 쌓인 여러 개의 액션 객체의 정보를 스트럿츠2의 태그 라이브러리는

OGNL 표현식으로 얻어온다.

)

아이디: <input type=”text” name=”userid” value=”${userid}” />

==

<s:textfield label=”아이디” name=”userid” value=”%{userid}” />

스트럿츠2에서는 %{…} 내에 기술된 내용을 OGNL 표현식으로 평가한다.

 

[Login.java]

public class Login extends ActionSupport{

  private String userid;

  private String username;

  private String message;

 

[Login.jsp]

<%@ tablib prefix=”s” uri=”/struts-tags” %>

<s:property value=”username” />

<s:property value=”message” />

<s:textfield label=”아이디” name=”userid” value=”%{userid}” />

 

- OGNL 참조 개체

  - application

  - session

  - value stack

  - request

  - parameters

  - attr

OGNL은 액션 컨텍스트의 객체를 참조하기 위해 #application, #session, #request, #attr, #parameters와 같이

#기호를 사용한다.

)

<s:property value=”#session.user” />

  

'Struts2' 카테고리의 다른 글

리절트 개요와 종류  (0) 2014.12.11
스트럿츠2 아키텍쳐  (0) 2014.12.11
도메인 오브젝트  (0) 2014.12.11
Action  (0) 2014.12.11
struts.xml  (0) 2014.12.11
  

리절트 개요와 종류

Posted by 단순대왕 Struts2 : 2014. 12. 11. 15:59

6. 리절트 개요와 종류

리절트는 struts2 프레임워크에서 액션이 실행된 이후에 사용자에게 어떠한 결과를 보여주어야 하는지를 결정한다.

리절트를 사용하기 위해서는 액션이 반환하는 특정한 문자열을 사용하는데 이는 리절트를 식별하기 위한 용도로

사용되며 이를 리절트 코드라 한다.

리절트 코드에 따른 리절트 설정은 <result/>요소에 의해서 이루어진다.

- name: 액션 메소드에서 리턴한 문자열을 지정한다. 디폴트는 success

- type: struts-default 패지키에 선언되어 있는 result-type을 사용하여 리절트 타입을 지정한다. 디폴트 dispatcher

)

<result name=”success” type=”dispatcher”>/helloWorld.jsp</result>

리턴한 문자열이 success이면 dispatcher 타입의 result가 실행한다. dispatcher helloWorld.jsp를 포워딩한다.

 

리절트 타입

설명

chain

어떤 한 액션을 다른 액션에 체이닝한다.

dispatcher

기본 리절트 타입으로 jsp를 랜더링한다.

freemarker

Freemarker 템플릿을 랜더링한다.

httpheader

설정된 HTTP 헤더 응답을 반환한다.

redirect

사용자에게 특정한 리다이렉션한다.

redirectAction

특정 액션으로 리다이렉션한다.

stream

Raw data를 브라우저로 전달한다. 파일이나 그림에 대한 다운로드 기능을 구현할 때 사용.

velocity

벨로시티 템플릿을 랜더링한다.

xslt

XML을 브라우저 화면에 랜더링한다. XSL 템플릿을 통해 변환한다.

plaintext

컨텐트를 플레인 텍스트로 반환한다.

 

6.1. 사용자 정의 리절트

사용자 정의 리절트 타입을 생성하기 위해서 Result 인터페이스를 사용한다.

Result 인터페이스는 Serializable을 확장하고 execute() 메소드를 갖는다. 리절트는 액션 인보케이션에 의해서

액션이 실행되고 난 후에 실행된다.

ActionInvocation 파라미터는 사용자에게 넘겨줄 최종적인 응답을 생성하기 위해서 알아둘 필요가 있는 모든

결과를 제공한다.

 

6.2. chain - 체인 리절트를 활용한 액션 체인

액션을 실행한 후에 다른 액션에서 이전 요청의 정보와 액션의 상태 값을 유지하여 계속해서 사용해야 할

경우가 생긴다. 이러한 경우에는 액션 체인을 사용하여 다른 액션을 호출할 수 있다.

특정 액션이 다른 액션을 호출하려면 액션끼리 체인을 형성해야 하는데 이러한 경우 사용하는 것이

체인 리절트이다.

구현) struts.xml

<struts>

<package name="ActionResult" extends="struts-default">

<action name="UserRegFormChain">

<result>/form/userRegForm.jsp</result>

</action>                   

<action name="UserRegLoginAction" class="action.UserActionModelDrivenPreparable">

  // 인터셉터의 순서 중요

<interceptor-ref name="prepare" />

<interceptor-ref name="modelDriven" />

<interceptor-ref name="params" />

 

<result name="success" type="chain">

<param name="actionName">LoginAction</param>

<!--<param name="namespace">/</param>-->

</result>

</action>

<action name="LoginAction" class="action.LoginAction">

<interceptor-ref name="chain" />

<interceptor-ref name="params" />

<result name="success">/form/userRegSuccess.jsp</result>

</action>

</package>   

</struts>

 

6.3. dispatcher redirect 리절트 타입

Dispatcher는 스트럿츠2의 기본 리절트 타입으로 jsp와 같은 웹 리소스로 포워딩한다.

redirect 리절트 타입은 response.sendRedirect(“…”) 메소드를 호출한 것과 같은 효과.

redirect 리절트 타입은 리다이렉트할 URL을 응답으로 웹 브라우저에 보낸다. URL로 새롭게 서버와 연결이

되므로 request가 새롭게 생성되는 것을 의미한다. 웹브라우저에 나타나는 URL도 바뀐다.

반면 dispatcher request가 유지된다. 서버와 새롭게 연결되는 것이 아니므로 처음 접속했던 request 정보를

가지고 있다. Dispatcher는 요청 처리를 다른 웹 리소스로 위임하는 것이므로 웹 브라우저에 요청 URL

바뀌지 않는다.

 

6.4. redirectAction 리절트 타입

redirectAction 리절트 타입은 actionName 파라미터를 사용하여 리다이렉트 대상이 될 액션 이름을 지정한다.

구현)

<action name=”UserRegAction” class=”action.UserRegAction”>

  <interceptor-ref name=”params”/>

  <result name=”success” type=”redirectAction”>

    <param name=”actionName”>LoginAction</param>

    <param name=”userId”>${userId}</param>

    <param name=”message”>${message}</param>

  </result>

    </action>

    <action name=”LoginAction” class=”action.LoginAction”>

      <interceptor-ref name=”params”/>

      <result name=”success”>/userRegSuccess.jsp</result>

    </action>

'Struts2' 카테고리의 다른 글

태그 라이브러리  (0) 2014.12.11
스트럿츠2 아키텍쳐  (0) 2014.12.11
도메인 오브젝트  (0) 2014.12.11
Action  (0) 2014.12.11
struts.xml  (0) 2014.12.11
  

스트럿츠2 아키텍쳐

Posted by 단순대왕 Struts2 : 2014. 12. 11. 15:58

5. 스트럿츠2 아키텍쳐

struts2 프레임워크는 모든 요청을 필터인 FilterDispacher가 처리하게 된다. FilterDispatcher는 요청이 들어오면

ActionProxy 인스턴스가 생성하고 액션 실행을 위임한다.

ActionProxy는 인터셉터와 리절트 등 액션 실행 구성을 읽어서 ActionInvocation을 초기화하고 실행한다.

ActionInvocation은 실질적인 인터셉터와 액션 리절트의 실행을 담당한다.

 

- 스트럿츠2 필터 디스패처

  필터 기반으로 액션 요청을 처리하는 스트럿츠2 프레임워크는 어떠한 처리를 할 것인지가 web.xml에 의해 결정.

- 설정 관리자/ 액션 매퍼

  사용자의 요청이 들어올 때, 어떠한 액션이 URL로 매핑될 것인지에 대해 결정하기 위해 설정 관리자와

  액션 매퍼를 사용한다.

  설정 관리자(Configuration Manager) struts.xml 파일을 사용하여 초기화된다.

  필터 디스패처는 액션 요청 처리를 위해 액션 매퍼의 도움을 받아서 보내진 요청이 스트럿츠2 액션을 위한

  요청인지의 여부를 판다.

  액션 매퍼(Action Mapper)를 통해 액션 요청으로 판단되면 액션 프록시(ActionProxy)에게 제어를 위임한다.

  요청된 이름과 일치되는 액션이 발견되지 않으면 오류를 반환한다.

- Action Proxy/ Action Invocation/ Action Context

  액션 프록시는 액션 실행을 위해 제공되는 대행자이다. 액션 프록시는 액션 프록시 팩토리 인스턴스를

  사용하여 필터 디스패처에 의해 생성되고, struts.xml 파일을 사용하여 초기화되는 설정 관리자를 참조한다.

  액션 프록시는 액션 인보케이션을 생성하고, 액션 인보케이션은 액션 실행에 앞서 인터셉터를 찾아서 호출.

  액션 프록시는 액션 인보케이션의 invoke() 메소드를 호출한다.

  액션 인보케이션은 인터셉터 스택 중 실행할 다음 인터셉터가 있다면, 그 인터셉터의 intercept() 메소드를 호출.

  인터셉터의 intercept() 메소드는 파리미터로 넘어온 액션 인보케이션의 invoke() 메소드를 다시 호출하여 체인을

  형성한다. 액션 인보케이션이 더 이상 호출할 인터셉터가 없으면 액션을 실행한 다음 리절트를 실행한다.

 

5.1. 인터셉터란?

인터셉터는 스트럿츠 프레임워크 내부의 소스 코드를 수정하지 않으면서도, 공통 관심 기능이 수행되어

프레임워크에 적용되도록 한다.

인터셉터는 액션과 서로 느슨하게 연결하기 때문에 인터셉터와 액션의 기능이 서로 간편하게 통합될 수 있다.

인터셉터는 특정 액션이 수행되는 것을 가로채서 액션이 수행되기 이전이나 이후에 특정 행동들을 수행한다.

 

5.1.1. <package> - <interceptors />

- 인터셉터를 위한 요소. <package>를 시작할 때는 그 package에 소속된 action들이 사용할 interceptor

먼저 정의하는데, 이를 <interceptors>안에 기술한다.

      )

      <package>

        <interceptors>

          <interceptor>             - 인터셉터 스택에서 참조할 인터셉터를 등록하는 요소

          <interceptor-stack>      - <interceptor-ref> 요소를 이용하여 이미 정의된 인터셉터들을 여러 개씩

                                          묶어서 하나의 이름으로 참조할 수 있도록 하는 인터셉터 스택을 정의하는 요소.

          <interceptor-ref>         - 액션 실행 전/후로 실행될 인터셉터를 지정할 때 사용

        </interceptors>

      </package>

 

5.1.2. <package> - <interceptors> - <interceptor>

- 인터셉터를 등록하는 요소. name class 속성이 필요.

 

5.1.3. <interceptor-ref> <interceptor-stack>

- <interceptor-ref> 요소는 액션의 실행 전/후로 실행될 인터셉터를 지정할 때 사용한다.

<interceptor-stack>요소는 <interceptor-ref>요소를 이용하여 이미 정의된 인터셉터들을 여러 개씩 묶어서

하나의 이름으로 참조할 수 있도록하는 인터셉터 스택을 정의하는 요소.

)

<interceptor-stack name=”basicStack”>

  <interceptor-ref name=”exception” />

  <interceptor-ref name=”servletConfig” />

  <interceptor-ref name=”prepare” />

  <interceptor-ref name=”checkbox” />

  <interceptor-ref name=”params” />

  <interceptor-ref name=”conversionError” />

</interceptor-stack>

 

5.1.4. <default-interceptor-ref>

- 디폴트 네임스페이스처럼 디폴트 인터셉터가 존재한다.

 

5.1.5. 인터셉터 설정

- 스트럿츠2 struts-default.xml에서 다양한 인터셉터를 미리 만들어 두었지만, 개발자가 원하는 형식으로

직접 설정하여 사용할 수 있다.

설정) struts.xml

<interceptors>

  <interceptor name=”timer” class=”com.opensymphony.xwork2.interceptor.TimerInterceptor” />

  <interceptor name=”logger” class=”com.opensymphony.xwork2.interceptor.LoggingInterceptor” />

</interceptors>

<action name=”HelloWorldAction” class=””>

  <interceptor-ref name=”timer” />

  <interceptor-ref name=”logger” />

</action>

HelloWorldAction 액션이 실행되기 전/후로 실행될 인터셉터를 지정하기 위해서 <interceptor-ref> 요소를

사용한다. 이렇게 설정된 인터셉터는 설정 파일에 기술되는 순서대로 호출되며, 사용자 요청에 대해 적용.

수행(execute() 메소드를 통해)이 끝나면 해당 함수 호출은 설정 파일에 기술된 인터셉터의 순서에 따라

역순으로 올라간다. 메모리 할당 제거를 비롯하여 액션 처리를 마무리한다.

ActionInvocation 객체인 invocation invoke() 메소드를 호출하여 Action을 수행하고 Interceptor에 기술된

액션 후 처리를 진행한다. 진행순서가 역순이다.

 

5.1.6. 커스텀 인터셉터

- 스트럿츠2는 커스텀 인터셉터를 위해서 Interceptor 인터페이스를 제공한다.

Interceptor 인터페이스는 init() – 인터셉터를 초기화, destroy() – 인터셉터에서 사용한 리소스를 반환,

Intercept() – 액션 수행하기 전에 수행할 일과 액션 수행 후에 할 일을 기술하고, 그 경계선에는

전달인자이며 ActionInvocation 객체인 invocation invoke() 메소드를 호출한다.

Init(), destroy()는 대체로 요청할 때마다 인스턴스를 생성하는 것이 아니라 미리 인스턴스를 띄워놓고

서비스하는 용도로 사용된다.

 

- 커스텀 인터셉터를 위한 AbstractInterceptor 추상 클래스

인터셉터에 특별히 초기화하거나 종료 시 자원을 반납할 필요가 없다면 init()destroy()를 오버라이딩하여

구현하는 것이 불편하기에 AbstractInterceptor 클래스를 제공한다.

AbstractInterceptor 클래스는 Interceptor 인터페이스의 구현 클래스로 init(), destroy() 메소드를 오버라이딩한

후 아무런 구현도 하지 않았다.

 

5.1.7. 인터셉터 종류

-

인터셉터

설명

alias

앨리어스 인터셉터는 실행될 때 넘어온 요청 파라미터의 이름을 다른 이름으로 사용할 수

있도록 한다.

chaining

체인 인터셉터는 이전에 실행된 액션의 속성을 현재 액션에서 사용하도록 한다.

많은 경우 이 인터셉터는 리절트 체인과 함께 사용된다.

checkbox

체크박스가 체크되지 않은 상태에서도 체크박스의 상태값을 넘겨줄 수 있도록 한다.

체크를 하지 않은 체크박스는 false 상태로 인식한다.

conversionError

타입 변환 오류가 발생할 경우 오류 메시지를 등록하도록 한다.

createSession

HTTP 세션을 자동으로 생성한다.

debugging

개발자에 따라 커스터마이즈된 다양한 디버깅 화면을 제공한다.

exeAndWait

백그라운드에서 액션이 실행되는 동안 사용자로 하여금 잠시 대기하도록 하는 화면을

보여주는 인터셉터이다.

exception

액션 실행 중에 발생한 예외 케이스에 대해 결과에 반영한다.

자동으로 예외 처리 핸들러에 리다이렉션 하도록 한다.

fileUpload

파일 업로드 기능을 지원하는 인터셉터이다.

i18n

사용자 세션에 따라서 선택된 지역화 설정을 유지한다.

store

ValidationAware 인터페이스를 구현함으로써 메시지를 저장하고 검색한다.

필드 에러나 액션에서 발생하는 에러 메시지를 저장한다.

scopedModelDriven

ScopedModelDriven 인터페이스를 구현하는 액션을 위해서 특정 스코프에 해당하는

모델 객체를 저장하고 검색하는 기능이다.

profile

액션에 로깅될 프로파일 정보를 제공한다.

Scope

세션 또는 어플리케이션 스코프에서 액션의 상태를 저장하고 검색한다.

servletConfig

다양한 서블릿 기반 정보에 대해 접근하는 액션을 제공한다.

staticParams

정적으로 정의된 값을 액션에 설정한다.

예를 들면, 액션 설정 시 param 태그를 사용하여 설정한 값들이 이에 해당한다.

roles

현재 유저가 설정된 역할 중 하나에 해당할 때에만 액션이 실행되도록 한다.

token

중복된 폼 전송을 방지하기 위해서 올바른 토큰을 가지고 있는지를 체크한다.

tokenSession

토큰과 유사하다. 하지만, 올바르지 않은 토큰이 주어진 경우는 전송된 데이터를 세션에

저장한다.

validation

액션에 전달할 데이터를 검증하는 기능을 제공한다.

 

5.1.8. 인터셉터 스택 종류

-

인터셉터 스택

인터셉터

설명

BasicStack

Exception, servletConfig, prepare,

checkbox, params, conversionError

최소 환경에서 사용될 인터셉터

Validation WorkflowStack

basicStack, validation, workflow

이전에 실해된 액션의 속성을 현재

액션에서 사용하도록 한다.

많은 경우에 이 인터셉터는 결과 타입

(result type) chain 과 함께 사용된다.

fileUploadStack

fileUpload, basicStack

기본 스택에 파일 업로딩 기능 추가

modelDrivenStack

modelDriven, basicStack

기본 스택에 모델 기능 추가

chainStack

Chain, basicStack

기본 스택에 체인 기능 추가

i18nStack

i18n, basicStack

기본 스택에 지역화 유지 기능 추가

paramPrepareParamsStack

Exception, alias, params, servletConfig,

Prepare, i18n, chain, modelDriven,

fileUpload, checkbox, staticParams,

params, conversionError, validation,

workflow

Pre-action 메소드 호출을 포함하는

복잡한 스택을 제공한다.

Params 인터셉터는 두 번 적용된다.

먼저 prepare() 메소드가 호출되기 이전에

파라미터를 제공하며, 두 번째는 prepare

단계에서 검색된 객체들에게 파라미터를

다시 제공하려 할 때 사용된다.

defaultStack

Exception, alias, servletConfig, prepare,

i18n, chain, debugging, profiling,

modelDriven, scoped, ModelDriven,

fileUpload, checkbox, staticParams,

params, conversionError, validation,

workflow

디버깅과 프로파일링을 포함하는 완전한

스택 기능을 제공

executeAndWaitStack

execAndWait, defaultStack

실행과 대기 스택을 제공한다.

 

'Struts2' 카테고리의 다른 글

태그 라이브러리  (0) 2014.12.11
리절트 개요와 종류  (0) 2014.12.11
도메인 오브젝트  (0) 2014.12.11
Action  (0) 2014.12.11
struts.xml  (0) 2014.12.11
  

도메인 오브젝트

Posted by 단순대왕 Struts2 : 2014. 12. 11. 15:58

4. 도메인 오브젝트

struts2 프레임워크는 MVC 패턴을 지향하므로 모델 영역을 액션 클래스로부터 분리하는 것이 바람직하다.

액션 클래스 내부에 비즈니스 로직을 구현하면 다른 곳에서 비즈니스 로직을 재사용하기 어려워지기 때문에,

액션에서는 비즈니스 로직을 수행하기보다는 비즈니스 로직을 전담하는 별도의 도메인 오브젝트를 정의한다.

액션에서는 사용자의 요청 파라미터로부터 서비스 호출에 필요한 데이터를 모아 서비스를 호출하는 역할만 수행.

 

주의)

UI Page에서 도메인 오브젝트에 직접 값을 세팅하기 위해서 텍스트 상자의 이름을 user.userId, user.userPw,

user.userName로 지정해야 한다.

 

구현) model을 사용하는 경우 validate 확인

public class UserRegAction  extends ActionSupport {

private User user;

public User getUser() {return user;}

public void setUser(User user) {this.user = user;}         

@Override

public String execute() throws Exception {

UserDao uerDao=new UserDao();

uerDao.create(user);

return SUCCESS;

}

@Override

public void validate(){

if(user.getUserId() == null || "".equals(user.getUserId())){addFieldError("userId", "required user ID.");}

if(user.getUserPw() == null || "".equals(user.getUserPw())){addFieldError("userPw", "required user PWD.");}   

}

}

4.1. ModelDriven Preparable 인터페이스 활용

도메인 오브젝트가 요청 파라미터 값을 얻어오되 입력 폼에서 도메인 오브젝트 명을 명시적으로 기술하지

않아도 되도록 ModelDriven 인터페이스를 사용한다.

이렇게 ModelDriven 인터페이스를 구현한 액션 클래스는 도메인 오브젝트와의 결합도가 낮아진다.

 

- ModelDriven 인터페이스

  도메인 오브젝트에 접근하기 위한 방법으로 ModelDriven 액션을 사용한다.

  ModelDriven 액션 클래스를 생성하기 위해서는 ModelDriven 인터페이스를 구현한다.

 

구현)

 public class UserRegAction implements Action, ModelDriven{

    User user = new User();

    public User getUser(){ return user; }

    @Override

    public String execute() throws Exception{ … }

    @Override

    public Object getModel(){

return user;

 }

}

  <action name=”” class=””>

    <interceptor-ref name=”modeDriven” />

  </action>

 

- Preparable 인터페이스

  Preparable 인터페이스는 액션 메소드(execute)를 실행하기 전에 다른 로직을 실행하고 싶을 때 사용한다.

  Preparable 인터페이스를 구현한 클래스에는 prepare() 메소드를 오버라이딩해야 한다.

  이 메소드는 액션 메소드가 실행하기 전에 수행되어야 하는 로직을 기술한다.

 

구현)

 public class UserRegAction implements Action, ModelDriven, Preparable {

    User user;

    public User getUser(){ return user; }

    @Override

    public String execute() throws Exception{ … }

    @Override

    public void prepare() throws Exception{

      user = new User();

    }

    @Override

    public Object getModel(){ return user; }

}

  <action name=”” class=””>

    <interceptor-ref name=”prepare” />

<interceptor-ref name=”modeDriven” />

  </action>

 

주의) struts.xml 파일 작성시 <interceptor-ref /> 순서 중요

<action name="UserActionModelDrivenPreparable" class="action.UserActionModelDrivenPreparable">

<interceptor-ref name="params" />            // 모델 생성시 값 없음

 

<interceptor-ref name="prepare" />

<interceptor-ref name="modelDriven" />

 

<interceptor-ref name="params" />            // 모델 생성시 값 정상

 

<result name="input">/form/userRegForm.jsp</result>

<result name="success">/form/userRegSuccess.jsp</result>

</action>

'Struts2' 카테고리의 다른 글

리절트 개요와 종류  (0) 2014.12.11
스트럿츠2 아키텍쳐  (0) 2014.12.11
Action  (0) 2014.12.11
struts.xml  (0) 2014.12.11
web.xml  (0) 2014.12.11
  

Action

Posted by 단순대왕 Struts2 : 2014. 12. 11. 15:57

3. 액션

struts.xml 파일에 의해서 특정한 URL로 요청하게 되면 액션 객체가 인스턴스화되면서 실제적인 비즈니스 로직을

처리하게 된다.

- POJO

- com.opensymphony.xwork2.Action 인터페이스 구현

- com.opensymphony.xwork2.ActionSupport 클래스 상속

 

3.1. Action 인터페이스 구현

- ERROR: 액션 실행에 실패하여 에러 페이지로 돌아간다.

- INPUT: 입력 값이 부족하거나 문제가 있어 입력 페이지로 돌아간다.

- LOGIN: 로그인을 하지 않아서 액션을 실행할 수 없으므로 로그인 페이지로 돌아간다.

- NONE: 액션이 성공적으로 실행은 되었지만, 화면을 보여주지 않는다.

- SUCCESS: 액션이 성공적으로 실행되어 결과 화면을 사용자에게 보여준다.

 

3.1.1. 파라미터 값 전달하기 – params 인터셉터(interceptor) 사용

- 인터셉터는 액션의 호출을 동적으로 가로채는 객체로써 다양한 기능을 제공한다.

  params 인터셉터는 요청 파라미터와 동일한 이름을 가진 액션 프로퍼티에 값을 저장하는 역할을 한다.

)

<package name="Actioninterface" extends="struts-default">

<action name="AI" class="tutorial.ActionInterface">

    <interceptor-ref name="params" />

    <result name="success">/helloWorld.jsp</result>

</action>

</package>

      <interceptor-ref />요소는 <interceptor />요소를 참조한다.

      Params에 대한 <interceptor /> struts-default.xml에 정의되어 있다.

 

3.1.2. sturts2의 한글 처리

      Tomcat server.xml에서 <Connector />요소에 useBodyEncodingForURI=”true” 속성을 설정한다.

      클라이언트에서 온 get/post 모두 리퀘스트에 설정된 character set으로 처리한다.

      추가)

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

<init-param>

<param-name>struts.il8n.encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

 

3.2. ActionSupport 클래스 상속

ActionSupport 클래스는 Action 인터페이스 외에도 Validateable, ValidationAware, TextProvider, LocaleProvider

인터페이스도 함께 구현되어 있다.

Validateable ValidationAware 인터페이스는 데이터의 검증을 위한 기능을 제공한다.

    TextProvider LocaleProvider 인터페이스는 여러 언어를 지원하는 웹 사이트를 개발할 때 필요하다.

    또한 파일 경로, DB URL properties 파일을 작성하여 ActionSupport 클래스가 지원하는 getText() 메소드를

    사용하여 사용할 수 있다.

 

3.2.1. 유효성 검사 (Validation)

- ActionSupport 클래스는 Validateable 인터페이스의 validate() 메소드와 ValidationAware 인터페이스의

addFieldError() 메소드와 함께 사용하여 유효성 검사 기능을 제공한다.

 

<package name="ActionSupportClass" extends="struts-default">

<action name="UserRegForm">

<result>/form/userRegForm.jsp</result>

</action>

 

<action name="UserRegAction" class="tutorial.ActionSupportClass">

<interceptor-ref name="params" />

<interceptor-ref name="workflow" />

<result name="input">/form/userRegForm.jsp</result>

<result name="success">/form/userRegSuccess.jsp</result>

</action>

</package>

 

<workflow /> 인터셉터는 액션에 정의한 validate() 메소드를 호출한 후에 에러가 있으면

return INPUT;을 리턴하고, 에러가 없으면 액션에 정의한 execute() 메소드를 호출한다.

'Struts2' 카테고리의 다른 글

리절트 개요와 종류  (0) 2014.12.11
스트럿츠2 아키텍쳐  (0) 2014.12.11
도메인 오브젝트  (0) 2014.12.11
struts.xml  (0) 2014.12.11
web.xml  (0) 2014.12.11
  

struts.xml

Posted by 단순대왕 Struts2 : 2014. 12. 11. 15:56

2. struts.xml

struts.xml 파일은 struts2 프레임워크에서 웹 어플리케이션 내의 처리 흐름을 결정하는 설정 파일.

<struts></struts> 요소 하위에 include, package, constant, bean 등의 요소를 가질 수 있다.

 

2.1. <struts> -  <include> 요소

원하는 설정 부분을 별도의 파일로 독립시키고 원하는 파일만 선택적으로 통합하여 관리할 수 있게 하는 요소.

struts.xml 설정 파일에 필요한 요소들을 서로 다른 파일에 분리해서 작성한 후, 이를 통합하도록 하는 기능

 

2.2. <struts> -  <package> 요소

    액션, 리절트, 인터셉터에 대한 설정을 패키지 단위로 묶는 작업을 한다.

    name, extends, namespace, abstract 속성을 가진다.

    <result-types/>, <interceptors/>, <default-interceptor-ref/>, <default-action-ref/>, <global-result/>,

    <global-exception-mappings/>, <action/> 요소를 포함할 수 있다.

 

    - <package name=””> 속성     

- <package extends=””> 속성

      다른 패키지를 상속할 때 사용한다. 상속받을 패키지의 이름을 extends 속성 값으로 지정한다.

      상속받게 되면 부모 패키지의 모든 설정을 물려받고 동일한 설정이 존재하면 오버라이드한다.

- <package namespace=””> 속성

      요청 URL의 액션 이름을 찾기 위해 사용한다. 요청 URL의 중간 경로로 생각하면 되는데, 액션 앞에

      접두어로 사용된다.

      ) http://localhost/ch3      /tutorial     /HelloWorld.action

                        [컨텍스트][네임스페이스][액션]

      <package name=”” namespace=”tutorial” extends=”struts-default”></package>

     

      namespace는 사용자가 직접 지정하는 사용자 정의 네임스페이스 외에도 디폴트 네임스페이스와

      루트 네임스페이스가 있다.

      <package> 요소에 namespace 속성을 생략하면 디폴트 네임스페이스이다.

      네임스페이스가 존재하지 않으면 default package에 지정한 액션을 실행한다.

      요청 URL이 컨텍스트패스 바로 뒤에 액션 URL형태로 입력하면 루트 네임스페이스를 찾는다.

      루트 네임스페이스는 namespace 속성에 “/”을 지정한다. <package… namespace=”/” …></package>    

- <package abstract=””> 속성

      패키지를 추상 패키지로 만들고자 할 때에는 abstract 속성 값을 true로 지정한다.

      추상 패키지는 액션이 없는 패키지이다.

      추상 패키지의 예로는 struts-default.xml struts-default 패키지가 있다.

 

2.2.1. <package> -  <action/> 요소

      - URL과 액션 클래스를 매핑한다.

      - 액션 수행 전, 후로 실행할 인터셉터를 설정한다.

      - 액션 수행 결과에 따른 <result>를 설정한다.

      - 액션 수행 시 예외가 발생할 경우 예외에 따른 <result>를 설정한다.

      - name 속성

        URL 요청 시 마지막 ‘/’ action을 제외한 부분에 기술할 액션 이름.

      - method 속성

        <action name=”TestWorld” class=”TestWorld” method=”test”>

        TestWorld 액션은 인스턴스화 되자마자 method 속성 값으로 기술한 test() 메소드를 호출한다.

        속성값을 지정하지 않으면 execute()를 기본 액션 메소드로 호출한다.

      속성

        <action name=”TestWorld” class=”TestWorld” method=”test”>

2.2.2. <package> -  <default-action-ref/> 요소

      사용자가 요청한 액션이 존재하지 않을 경우 500에러가 발생하는데 <default-action-ref/>요소로

      500 에러를 방지할 수 있다.

      모든 패키지는 자신이 디폴트 액션을 가질 수 있고, 하나의 네임스페이스는 하나의 디폴트 액션을

      가질 수 있다.

      )

      <package name=”tutorial” namespace=”/” extends=”sturts-default”>

        <default-action-ref name=”DefaultAction”/>

        <action name=””><result name=””></result></action>

      </package>

 

2.3. <struts> - <constant> 요소

    사용자가 필요한 프레임워크의 기능을 적합하게 변경하기 위해서 다양한 상수 형태의 프로퍼티를 갖는다.

    상수 정의 예) <constant>

    <struts>

      <constant name=”strtus.devMode” value=”true” />

    </struts>

    상수 정의 예) web.xml

    <filter>

      <init-param>

        <param-name>struts.devMode</param-name>

        <param-value>true</param-value>

      </init-param>

    </filter>

    상수 정의 예) sturts.properties

    struts.devMode = true

   

    스트럿츠는 default.properties 이름의 디폴트 프로퍼티 설정 파일을 제공한다.

    struts.properties 파일에 default.properties 값을 오버라이드하여 사용할 수 있다.

    

'Struts2' 카테고리의 다른 글

리절트 개요와 종류  (0) 2014.12.11
스트럿츠2 아키텍쳐  (0) 2014.12.11
도메인 오브젝트  (0) 2014.12.11
Action  (0) 2014.12.11
web.xml  (0) 2014.12.11
  

web.xml

Posted by 단순대왕 Struts2 : 2014. 12. 11. 15:56

1. web.xml

web.xml 파일은 배포 서술자(Deployment Descriptor)의 하나로써, 웹 어플리케이션의 기본적인 환경 설정을 위한

파일이다. 작성한 웹 어플리케이션을 컨테이너에서 실행하기 위해서는 배포라는 작업이 필요하다.

배포 서술자는 Java EE 스팩으로 웹 어플리케이션의 기본적인 설정을 위해 작성한 파일로써, 웹 어플리케이션의

배포와 관련된 정보를 제공하여 다른 컨테이너에서 별도의 설정 없이 운영할 수 있도록 하기 위해서 사용한다.

 

필터는 웹 어플리케이션 전반에 걸쳐 특정 URL이나 파일 요청 시 먼저 로딩되어 사전에 처리할 작업을

수행(필터링)하고 해당 요청을 처리하는 자바 웹 어플리케이션 유형 중 하나

'Struts2' 카테고리의 다른 글

리절트 개요와 종류  (0) 2014.12.11
스트럿츠2 아키텍쳐  (0) 2014.12.11
도메인 오브젝트  (0) 2014.12.11
Action  (0) 2014.12.11
struts.xml  (0) 2014.12.11
  
 «이전 1  다음»