본문 바로가기

Struts/Struts Programming

[Struts] Action 인터페이스를 구현한 액션

반응형

■ Action 인터페이스를 구현한 액션

 -. Action 인터페이스를 구현한 액션에서 execute( ) 메소드를 반드시 구현해야 한다.

    그 이유는 Action 인터페이스에 execute( ) 메소드가 추상 메소드로 정의되어 있기 때문이다.

 -. 스트럿츠 2에서는 액션 클래스가 인스턴스화되면서 자동 호출되는 기본 액션 메소드를 execute( ) 메소드로 정해 놓았다.

  Action 인터페이스를 구현한 액션 클래스

 package action;


 import com.opensymphony.xwork2.Action;


 public class HelloWorld02 implements Action {


       @Override

       public String execute( ) throws Exception {


             return SUCCESS;      // SUCCESS는 Action 인터페이스에 정의된 리턴코드를 사용한 것이다.

       }

 }


 -. Action 인터페이스의 execute( ) 메소드를 오버라이딩한 것이므로 메소드의 원형이 동일하다.

 -. execute( ) 메소드는 API document의 Action 인터페이스에서 살펴본 execute( )처럼 아큐먼트는 없고 리턴형이 String으로 되어 있다.

 -. Action 인터페이스를 구현한 액션 클래스가 POJO로 구현한 HelloWorld와 다른 점은 execute( ) 메소드의 리턴 값이

    'success'에서 SUCCESS로 바뀌었다는 것이다.

 -. 액션 메소드가 반환하는 문자열은 액션 실행이 끝난 후 어떤 리절트를 실행할지 결정하기 위해 사용되는 것을 리절트 코드라 한다.

 -. API document를 살펴보면 Action 인터페이스에 몇 가지 공통적으로 사용되는 리절트 코드(ERROR, INPUT, LOGIN, NONE, SUCCESS)가

    상수로 정의되어 있을을 살펴볼 수 있다.


리턴 코드

설                                   명

ERROR

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

INPUT

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

LOGIN

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

NONE

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

SUCCESS

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



 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Chapter04</display-name>
 
  <!-- 스트럿츠2의 핵심 컨트롤러 역할을 수행하는 FilterDispatcher 클래스로 struts2란 필터를 등록한다. -->
  <filter>
    <filter-name>struts2</filter-name>
    <!-- 스트럿츠2의 핵심 컨트롤러 역할을 수행하는 클래스 -->
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
 
  <!-- URL 확장자가 action일 때 FilterDispatcher 필터가 실행되도록 매핑한다. -->
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 HelloWorld02.java

package action;

import com.opensymphony.xwork2.Action;

public class HelloWorld02 implements Action {
   
    // HelloWorld02 액션에서도 HelloWorld 액션에서와 마찬가지로
    // set / get 메소드를 갖는 필드를 추가할 수 있다.
    // 스트럿츠 2의 액션은 자바 빈의 규칙을 따르기 때문에 필드에 대한 직접 접근하지 못하도록
    // private 멤버로 지정하고, 이를 public 멤버로 선언된 메소드를 사용하도록 한다.
    private String message;
    private String name = "Angel";
   
    // message 필드는 getter만 존재하므로 이 값을 외부에서 사용하기만 하고 변경하지 못하는
    // read only 프로퍼티가 된다.
    public String getMessage() {

        return message;
    }
   
    // 반면 name 필드는 외부에서 사용하기만 하고 변경하지는 못하도록 하기 위해서 setter만 정의해 둔다.
    public void setName(String name) {
       
        this.name = name;
    }
   
    @Override
    public String execute() throws Exception {
       
        this.message = "Hello, " + name + "!";
       
        return SUCCESS;
    }
}
 struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation/DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
   
<struts>
    <package name = "ch04" extends = "struts-default">
        <action name = "HelloWorld02" class = "action.HelloWorld02">
            <result name = "success">/helloWorld.jsp</result>
        </action>
    </package>
</struts>

 helloWorld.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>결과를 위한 JSP 페이지</title>
</head>
<body>
<h1>
${message}
</h1>
</body>
</html>

 출력화면 : http://localhost:8181/Chapter04/HelloWorld02.action


반응형