헬로 월드

From JCFWiKi

Jump to: navigation, search
  • 스트럿츠2를 이용해서 Hello World 라는 메세지를 브라우저에 표시합니다. 스트럿츠2를 사용한 JSP, Action 클래스, 그리고 struts.xml의 설정까지의 작성을 간단히 경험해 볼수 있습니다.



[편집] 코드


  • 우선 화면을 개발합니다. 화면을 개발하기 위한 JSP에서 스트럿츠 태그 라이브러리를 선언하고 사용하는 것을 볼 수 있습니다.
  • JSP 파일은 web/tutorial/helloWorld.jsp 라고 작성합니다.
helloWorld.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
 
<html>
	<head>
		<title>Hello World!</title>
	</head>
	<body>
		<h2><s:property value="message" /></h2>
	</body>
</html>


  • 다음으로 액션 클래스를 작성합니다. 액션 클래스는 일반 자바 클래스 이며, ActionSupport는 부가적으로 상속을 받게 되며, 상속받지 않아도 상관 없습니다. 여기서는 일반 POJO 클래스임이 중요하며, UI와의 데이터 연동을 위해서 message라는 액션 클래스의 맴버 변수와 함께 getter/setter 메소드가 존재하는 것을 살펴 볼 수 있습니다.
  • 자바 클래스는 src/tutorial/HelloWorld.java 로 작성합니다.
HelloWorld.java
package tutorial;
import com.opensymphony.xwork2.ActionSupport;
 
public class HelloWorld extends ActionSupport {
 
    private String message;    
 
    public String execute() throws Exception {
        message = "Hello World~";
        return SUCCESS;
    }
 
    public void setMessage(String message){ this.message = message; }
    public String getMessage() { return message; }
}


  • 마지막으로 클라이언트로부터의 요청을 액션 클래스가 처리하도록 설정하는 struts.xml 설정 파일을 작성합니다. 액션의 선언은 항상 특정 패키지 내에 존재하는 것을 확인할 수 있으며, 액션 태그는 리절트 태그를 가질 수 있는 것을 볼 수 있습니다.
  • struts.xml 파일은 src/struts.xml 로 작성합니다.
struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="tutorial" extends="struts-default">
        <action name="helloWorld" class="tutorial.HelloWorld">
            <result>/tutorial/helloWorld.jsp</result>
        </action>
        <!-- Add your actions here -->
    </package>
</struts>
실행화면
실행화면



[편집] 동작 방법


  • 클라이언트로부터의 요청은 아래와 같이 스트럿츠2 내부적으로 처리가 됩니다.
    • 1. 서블릿 컨테이너는 웹서버를 통해서 helloWorld.aciton 요청을 받게 됩니다. web.xml의 정의에 따라 스트럿츠2 필터 디스패처에게 받은 요청을 넘겨주게 됩니다. 따라서 필터 디스패처는 스트럿츠2의 진입지점이 되는 것입니다.
    • 2. 스트럿츠는 helloWorld에 매핑되는 액션 정의를 찾아서 실제 수행되어야 할 액션 클래스를 객체화 하고 기본 메소드(execute())를 호출합니다. 수행된 액션 클래스의 메소드는 액션 클래스의 message 프라퍼티에 스트링 값을 넣고, 'success'라는 스트링을 반환합니다.
    • 3. 리턴된 리절트는 액션 메소드 수행후, 어디로 요청을 분기해야 하는지 확인하기 위해서 result의 이름을 반환된 스트링 값에 일치하째는 첫번째 리절트 정의를 가지고 째,