struts로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

struts로 검색한 결과
등록일:2008-03-16 11:46:41
작성자:
제목:Struts 2 Tutorial - 10.Struts 2 Action 소개


본 튜토리얼은 제가 struts 2를 공부할 목적으로 아래의 원문에 링크된 문서를 번역하여 정리한 것입니다.
원문: http://www.roseindia.net/struts/struts2/actions/struts2-actions.shtml



클라이언트의 요청이 액션의 이름과 일치할 때, 프레임워크는 struts.xml 파일로 부터 요청을 처리할 매핑을 사용합니다. 액션 매핑은 보통 스트럿츠 태그에 의해서 생성됩니다. 액션 태그(struts.xml 파일의 struts 루트 노드에 있는)는 이름을 가지고 액션을 구체화시키고 프레임워크는 기본 확장과 다른 필요한 요소들을 렌더링합니다.핸들러 클래스의 기본 엔트리 메소드는 액션 인터페이스로 정의된다.

스트럿츠 2 액션 인터페이스

모든 액션은 이 인터페이스로 구현된다. 그리고 그것은 execute() 메서드를 나타낸다. 실제 인터페이스를 구현하지 않고 이 인터페이스에 의해 같은 계약을 유지하는 POJO를 생성하는 것은 자유다.
package com.opensymphony.xwork2;
public interface Action {
//The action execution was a failure.
public final static String ERROR;
//The action execution require more input in order to succeed
public final static String INPUT;
//The action could not execute, since the user most was not logged in
public final static String LOGIN;
// The action execution was successful but do not show a view.
public final static String NONE;
//The action execution was successful.
public final static String SUCCESS;
	//the logic of the action is implemented
	public String execute() throws Exception;
}
액 션 인터페이스를 구현하는 것은 옵션이다. 만약 액션이 구현되지 않는다면, 프레임워크는 execute method 를 찾기위해 리플렉션(reflection)을 사용할 것이다. 만약 설정파일에 기술된 execute method 가 없고, 다른 method도 없다면 프레임워크는 예외를 발생시킬 것이다.
스트럿츠2 액션은 POJO(Plain Old Java Objects)로서의 액션클래스를 지향하는 간단한 구현을 이끈다. 액션의 가장 기본적인 사용법은, 항상 하나의 결과를 반환하는 작업을 수행하는 것이다.

그것은 아래와 같다.

public class NewAction {
public String execute() throws Exception {
// do the work
return "success";
}
}

액 션 클래스는 어떠한 다른 클래스나 인터페이스를 상속하지 않는다는 것을 주목하라. 액션의 처리과정에서 invoked 메서드는 "execute" 메서드이다. "execute" 메서드는 파라미터가 없고 문자열객체를 반환한다. 그러나 스트럿츠 2 액션에서 문자열 객체와 다른 반환 타입들을 가질 수 있다. 헬퍼 인터페이스를 사용가능합에 따라 (헬퍼 인터페이스는 "success", "none', "error", "input", "login" 과 같은 상수로서 공통적인 결과를 제공한다.)

액션 클래스는 보통 모델로서 행동하고 리퀘스트 객체와 입력 파라미터에 의존한 특별한 비즈니스 로직을 실행한다. 스트럿츠의 이전 버전에서(스트럿츠2.0이전), 액션 클래스는 org.apache.struts.Actions의 확장이고 4개의 파라미터를 테이크하는 Action.execute() 매서드를 오버라이드해야만 한다고 알려져있다.

기본적으로 액션은 HttpServletRequest, HttpServletResponse 과 같은 다양한 객체를 처리하는 것을 의미한다. 그러나 여기에서, 액션 클래스는 어떠한 객체 파라미터도 접근하지 않는다. 여기 중요한 한가지 이슈가 있다. - 작업을 할 때 필요한 어떤 객체를 어떻게 접근할 것인가? 해답은 "inversion of control"이나 "dependency injection" 패턴에 있다.

느슨하게 결합된 시스템을 제공하기 위해서, 스트럿츠 2는 dependency injection 혹은 inversion of control이라고 불리는 기술을 사용한다. dependency injedtion은 constructor injection, interface injection, setter injection에 의해서 구현될 수 있다. 스트럿츠2는 setter injection을 사용한다. 이것은 액션을 이용할 수 있는 객체의 소유를 의미하고,  단지 setter 메서드를 제공하는것이 필요하다.

ActionContext에 요청하거나 ServletRequestAware를 구현함으로써 얻을 수 있는 HttpServletRequest 과 같은 객체가 있다. ServletRequestAware 를 구현하는 것이 선호된다. 비즈니스 객체가 아닌 각각의 객체에 대응하는액션이 구현할 필요가 있는 인터페이스("aware" 인터페이스라고 알려진)가 있다.

inversion of control 을 잘 이해하기 위해서, 액션의 처리가 현재 요구 HttpServletRequest 객체에 접근을 요구하는 곳의 샘플을 살펴보자. dependency injediton 메카니즘은 이 예에서 인터페이스 injection으로 사용된다. interface injection 이름이 함축하고 있는 것처럼 구현이 필요한 인터페이스가 있다. 이 인터페이스는 setter 메서드를 포함한다. 그리고 차례로 액션에 데이터를 제공하기 위해서 사용된다. 이 예에서 우리는 ServletRequestAware interface를 사용하고 있다.
public interface ServletRequestAware {
    public void setServletRequest(HttpServletRequest request);
}

이 인터페이스를 구현할 때, 액션은 조금 변경된다. 그러나 지금 우리가 사용할 HttpServerRequest 객체를 가지고 있다.

public class NewAction implements addDependency {
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String execute() throws Exception {
// do the work using the request
return "SUCCESS";
}
}

스트럿츠2에서 액션 인스턴스는 각각의 요구에 대해 생성된다. 이것은 공유되지 않으며 요청이 완전히 처리된 후 폐기된다.

액션 매핑
액션 매핑은 결과 타입, 예외 처리자, 인터셉터 스택의 집합이다. 단지 name 어트리뷰트만 요구된다. 다른 어트리뷰트는 struts.xml 파일을 통해 기술된 패키지 스코프로서 제공될 수 있다.

이 액션을 위한 설정은 아래와 같다.
<action name="new" class="NewAction" >
<result>view.jsp</result>
</action>

" 네임" 어트리뷰트는 "/new.action"과 같은 액션을 실행하기 위한 URL 정보를 제공한다. ".action" 확장자는 "struts.properties" 설정파일안에서 설정된다. "클래스" 어트리뷰트는 풀패키지과 실행될 액션의 클래스 이름을 제공한다.

스트럿츠 2는 POJO로서 액션클래스를 처리하고 로직의 결과에 종속적인 다른 결과들을 반환할 수 있다. 다른 결과를 얻기 위해, 클래스를 아래와 같이 변경하는 것이 요구된다.

class NewAction {

public void String execute() throws Exception {
if ( its-ok() ) {
return "login";
} 
else {
return "none";
}}}

여기 두개의 다른 결과를 제공하는 클래스가 있다, 우리는 각각의 경우를 위해 strtus.xml 파일의 액션 태그를 설정해야만 한다. 설정을 아래와 같이 변경하라.

<action name="new"  class="NewAction" >
<result>login.jsp</result>
<result name="none">none.jsp</result>
</action>