2013년 8월 11일 일요일

[오라클자바커뮤니티 스트럿츠2교육]struts2 초간단 예제 - HelloWorld(1)

지금부터 간단예제 소스를 보도록 하겠습니다.
struts1과 설정이 같은 부분과 log4j설정등은 올리지 않았습니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


작성자 : 김길재


1. struts.xml
우선 struts-config.xml은 struts.xml로 이름이 변경되었습니다.
위치는 전과 다르게 WEB-INF/classes입니다.
-------------------------------------------------------
--------------- struts.xml------------------------------
-------------------------------------------------------
<?xml version="1.0" encoding="EUC-KR" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <!-- 동적메서드호출여부입니다.-->
    <constant name="struts.enable.DynamicMethodInvocation"
                  value="true" />
    <!-- 개발모드 사용여부입니다.-->
    <constant name="struts.devMode" value="true" />
       
    <!-- 인클루드가 가능합니다. 경로는 strus.xml과 같은 경로입니다. -->
    <include file="test.xml"/>

</struts>

2. test.xml
struts.xml에서 인클루드한 test.xml을 보도록 하겠습니다.
<?xml version="1.0" encoding="EUC-KR" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

        <constant name="struts.enable.DynamicMethodInvocation"
                              value="true" />
        <constant name="struts.devMode" value="true" />
 
                <!-- /test아래의 url에 해당하는 action입니다.-->
        <package name="test"
                              namespace="/test"
                              extends="struts-default">

                <!-- 한 액션파일에서 다수의 메서드호출-->
                                <!--  struts1의 DefaultAction과 같은 기능 -->
                <action name="*"
                                            method="{1}"
                                            class="test.TestAction">
                                        <!--  액션에서 request객체를 받는데 사용 -->
                        <interceptor-ref name="servlet-config" />
                                        <!-- 메서드에서 리턴하는 값과-->
                                        <!-- 파라미터 name의 값이 일치하면-->
                                        <!-- result태그의 값으로 포워딩-->
                        <result name="successTest">
                                                /test/test2.jsp
                                        </result>
                </action>

                <!-- 잘못된 주소일 경우에 거치게 되는 Action -->
                <action name="defaultAction">
                        <result>/common/wrongAction.jsp</result>
                </action>

        </package>
</struts>



3. TestAction.java
앞의 test.xml의 액션태그에서 본바와 같이 한 액션에서 /test/메서드명.action
을 호출하면 해당 메서드로 이동합니다.

-------------------------------------------------------
--------------- TestAction ------------------------------
-------------------------------------------------------

package test;

import javax.servlet.http.*;

import org.apache.struts2.interceptor.*;
import com.opensymphony.xwork2.*;

/**
 * Base Action class for the Tutorial package.
 */
public class TestAction extends ActionSupport implements ServletRequestAware {
       
       
    private HttpServletRequest request;

    /**
        *
        */
        private static final long serialVersionUID = 1L;

        public String test1()  throws Exception {
               
                System.out.println("/test/test1.action start");
               
                // request를 가져온다.
                String names = request.getParameter("name");
               
                System.out.println("name = " + names);
               
                System.out.println("/test/test.action end");
               
            return "successTest";
       
    }
       
        public String test2()  throws Exception {
               
                System.out.println("/test/test2.action start");
               
                // request를 가져온다.
                String names = request.getParameter("name");
               
                System.out.println("name = " + names);
               
                System.out.println("/test/test.action end");
               
            return "successTest";
       
    }

        public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

       
}


4. test1.jsp
시작페이지입니다.
-------------------------------------------------------
--------------- test1.jsp ------------------------------
-------------------------------------------------------
<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
   
<html>
<head>
<title>Test</title>
</head>
<body>

<form name="test1Form" method="post" action="/test/test1.action">
  test1()메서드를 거치는 경우
        name :
        <input type="text" name="name">
        <input type="submit" value="입력">
</form>


<form name="test2Form" method="post" action="/test/test2.action">
  test2()메서드를 거치는 경우
        name :
        <input type="text" name="name">
        <input type="submit" value="입력">
</form>

</body>
</html>

5. test2.jsp
액션 클래스를 걸쳐 포워딩되는 페이지입니다.
-------------------------------------------------------
--------------- test2.jsp ------------------------------
-------------------------------------------------------
<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

<%
        String name = request.getParameter("name");
%>   
   
<html>
<head>
<title>Test</title>
</head>
<body>

        Hello! <%=name%>!!!

</body>
</html>

===========================================================
마무리.
struts1에 비해 사용법이 한결 가벼워졌다는 느낌이 들었습니다.
제공하는 jsp태그는 소스를 간단히 하기 위해 제거하였습니다.
관심이 있으신 분은 jsp태그도 사용해 보신다면 더 강해진 기능을
보실 수가 있을 겁니다.

댓글 없음:

댓글 쓰기