액 션 인터페이스를 구현하는 것은 옵션이다. 만약 액션이 구현되지 않는다면, 프레임워크는 execute method 를 찾기위해 리플렉션(reflection)을 사용할 것이다. 만약 설정파일에 기술된 execute method 가 없고, 다른 method도 없다면 프레임워크는 예외를 발생시킬 것이다.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 implementedpublic String execute() throws Exception;
}
그것은 아래와 같다.
액 션 클래스는 어떠한 다른 클래스나 인터페이스를 상속하지 않는다는 것을 주목하라. 액션의 처리과정에서 invoked 메서드는 "execute" 메서드이다. "execute" 메서드는 파라미터가 없고 문자열객체를 반환한다. 그러나 스트럿츠 2 액션에서 문자열 객체와 다른 반환 타입들을 가질 수 있다. 헬퍼 인터페이스를 사용가능합에 따라 (헬퍼 인터페이스는 "success", "none', "error", "input", "login" 과 같은 상수로서 공통적인 결과를 제공한다.)
액션 클래스는 보통 모델로서 행동하고 리퀘스트 객체와 입력 파라미터에 의존한 특별한 비즈니스 로직을 실행한다. 스트럿츠의 이전 버전에서(스트럿츠2.0이전), 액션 클래스는 org.apache.struts.Actions의 확장이고 4개의 파라미터를 테이크하는 Action.execute() 매서드를 오버라이드해야만 한다고 알려져있다.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에서 액션 인스턴스는 각각의 요구에 대해 생성된다. 이것은 공유되지 않으며 요청이 완전히 처리된 후 폐기된다.
<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>
SSISO Community