메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

Struts 2로 동적 데이터 처리하기

강력하고 사용하기 쉬운 기능 탐색하기

Ina Arya, Senior Software Engineer, IBM
Photo of Ina Arya
Ina is a system software engineer with the Software Development Workbench Team at the IBM India Software Lab. She has more than four years of experience in application development, including Web applications using Java technology.

요약:  이 기사에서 웹 기반 애플리케이션에 대해 동적 데이터를 처리하는 데 Apache Struts 2가 어떻게 도움을 줄 수 있는지 알아봅시다. 예제와 샘플 코드를 통해 몇 개의 가장 일반적인 유스 케이스를 살펴보십시오. 강력한 Action, Intercepter 및 Results 기능이 데이터베이스 데이터로 UI 필드를 설정하는 데 어떻게 도움을 줄 수 있는지 알아보십시오. 또한 애플리케이션이 값 목록으로부터 로드할 때 데이터 값을 설정하여 애플리케이션을 모듈화하는 것과 필드에 원하는 데이터를 사전 입력하는 것에 대해 알아봅시다.

원문 게재일:  2010 년 6 월 15 일 번역 게재일:   2010 년 7 월 30 일
난이도:  초급 영어로:  보기 PDF:  A4 and Letter (119KB | 13 pages)Get Adobe® Reader®
페이지뷰:  4406 회
의견:  


소개

거의 모든 웹 기반 비즈니스 애플리케이션은 다양한 데이터베이스에서 데이터 스토리지가 필요하다. Struts 2 초보자의 경우에 웹 애플리케이션을 개발하는 동안 가장 어려운 도전 과제는 자신의 데이터베이스에 저장된 데이터를 브라우저의 프리젠테이션 페이지로 표시하는 것이다.

Apache Struts 2는 엔터프라이즈 대비 Java 웹 애플리케이션을 작성하기 위한 오픈 소스 확장 가능한 프레임워크이다. 이 프레임워크는 애플리케이션의 빌드에서부터 배치와 유지보수에 이르기까지 시간을 초월하여 전체 개발 주기를 간소화하도록 설계되었다. Struts 2의 이름은 원래 WebWork 2이었다.

데이터의 처리를 위한 최고의 접근 방법을 개발하는 것은 많은 노력이 필요할 수 있다. 훌륭한 애플리케이션은 훌륭한 사용자 인터페이스(UI)와 훌륭한 백엔드 구현이 필요하다. Struts 2의 성능은 다음과 같은 기능을 사용하여 모델 보기 컨트롤러(MVC) 패턴의 클린 구현을 제공하는 능력에 달려 있다.

Actions
이 프레임워크 아키텍처의 일부인 Actions는 모든 비즈니스 로직을 한 곳에 보관하여 클린 구현을 제공한다. Actions는 요청에서부터 결과 페이지까지 데이터 자동 전송의 채널로서 역할을 한다.
Results
애플리케이션에서부터 웹 브라우저로 사용자의 요구 사항을 표시하는 UI이다.
Interceptors
Actions의 오버헤드를 삭제하고 다수의 Actions에 일반적인 유효성 검증, 명령문 로깅 및 오류 확인 등과 같은 일반 조작을 구현하여 성능을 개선한다.

Interceptors는 사전 처리와 사후 처리 모두에서 호출된다. 하나의 action 요청에 대해 다량의 Interceptors가 있을 수 있다.

ValueStack
요청의 처리 기간 동안 연관되는 모든 데이터를 유지하는 오브젝트이다.

그림 1에서는 Struts 2 프레임워크의 구성 요소가 표시되어 있다.


그림 1. Struts 2 Action, Interceptor 및 Result
'Session'과 'Variable 1, 2... '가 있는 'Web browser(result)', 'Interceptors 1, 2, 3', 'Action' 및 'Value stack'을 포함하는 Struts 2 프레임워크의 구성 요소가 표시된 다이어그램.

이 기사에서는 웹 기반 애플리케이션에서 동적 데이터 처리에 대해 살펴본다. 양식에 사용자 데이터 값을 사전 입력하는 것과 값의 목록에서부터 기본 값을 표시하는 UI 필드를 설정하는 것과 같이 몇 가지의 특수 유스 케이스로 사용자 데이터를 런타임에서 전송하는 방법을 탐색할 것이다. 이 기사는 Struts 2 Action 클래스와 결과 페이지 사이에 동적 데이터 플로우의 구현 세부 사항에 대해 주목한다.


Struts 2 ValueStack을 사용하여 동적 데이터 처리하기

Struts 2의 강력한 기능 중 하나인 ValueStack은 요청을 처리하는 동안 모든 데이터를 유지한다. Action 클래스도 bean의 형태로 데이터를 저장한다. (Struts 2에서는 게터와 세터 메소드를 사용한다.) 데이터가 Action 클래스 오브젝트에 저장되면 Struts 2는 데이터를 Action 오브젝트의 형태로 ValueStack에 넣는다. ValueStack은 오브젝트의 스택을 저장하고 이 데이터는 프레임워크의 또 다른 부분에 노출되게 된다.

그림 2에서 action 클래스는 게터와 세터 메소드를 사용하여 두 개의 변수 값을 설정한다. 이 데이터는 요청 처리 기간 동안에 ValueStack에 저장될 것이다. HelloWorld.jsp는 ValueStack으로부터 이러한 변수의 값을 얻고, Struts 2 태그 라이브러리로부터 <s:property> 태그를 사용하여 값을 표시한다.


그림 2. ValueStack에서 데이터
Hello World Action 및 HelloWorld.jsp를 포함하여 ValueStack에서 데이터가 표시된 다이어그램.

정적 데이터 대 동적 데이터

UI에 표시되는 데이터를 사전에 알고 있는 경우에 이를 정적 데이터라고 부를 수 있다. 정적 데이터는 JSP(JavaServer Pages)에서 직접 코딩하여 쉽게 처리할 수 있다. 그림 3에서는 정적 데이터 상황이 표시되어 있다.


그림 3. 정적 데이터
정적 데이터가 표시된 다이어그램. 각각 다른 JSP, Action 및 Client browser를 시계 반대 방향으로 가리키는 화살표가 있는 세 개의 상자.

사용자가 사용자 데이터베이스로부터 검색한 데이터를 표시하려면, Action과 JSP에서 데이터를 적절하게 처리하고 UI에 데이터를 표시하는 메커니즘이 필요하다. Struts 2를 통해 이 시나리오 유형을 위해 빌드한 블록은 Action 클래스와 ValueStack이다. Action 클래스는 게터와 세터 메소드를 사용하여 ValueStack에 사용자 값을 저장하게 된다. 그 다음에 JSP가 일치하는 변수 이름의 값을 받아서 UI에 표시하게 된다. 그림 4를 참조한다.


그림 4. 동적 데이터
'Result', 'ValueStack', 'DB', 'Action' 및 'Client broswer name = Swati'로 레이블된 상자가 있는 동적 데이터의 다이어그램

사용자 데이터로 UI 필드 및 태그 설정하기

Struts 2는 대화식의 양식 기반 애플리케이션을 작성하는 데 도움을 주는 다양하고 재사용 가능한 HTML에서 데이터를 표시하는 태그 라이브러리를 제공한다. Struts 2는 일반 태그(제어 태그 및 데이터 태그)와 UI 태그가 함께 제공된다. UI 태그는 ValueStack(Action이 ValueStack으로 추가한 데이터) 또는 데이터 태그로부터 데이터를 받도록 설계되었다. 다음은 Struts 2 UI 태그인 <select tag>의 예제이다.

  1. Listing 1과 같이 데이터를 UI에 표시하는 Action 클래스를 쓴다.

    Listing 1. 데이터를 UI에 표시하는 Action 클래스 쓰기
    
    public class DisplayAction extends ActionSupport {
    	
    	private List state = new ArrayList();
    	private List status = new ArrayList();
    	
    	public String execute()
    	{
    		setState(this.state);
    		setStatus(this.status);
    		return "success";
    	}
    	
    	//getter and setter method for state variable//
    	public List getState() {
    		return state;
    	}
    
    	public void setState(List state) {
    	//implement the application specific logic to 
    	retrieve the data from the 
    	database here//
    		
    	//Here for displaying the data on UI, we are using few hardcoded values//
    		state.add("Defect"); 
    		state.add("Task");
    		state.add("User Stories");
    	}
    
    	public List getStatus() {
    		return status;
    	}
    
    	public void setStatus(List status) {
    	//implement the application specific logic to
    	retrieve the data from the database here//
    
    	//Here for displaying the data on UI, we are using few hardcoded values//
    		
    		status.add("New"); 
    		status.add("Fixed")
    		status.add("Resolved");
    		status.add("Closed");
    	}
    
    }
          

    이 예제에서 DisplayAction 클래스는 몇 개의 값을 사용하여 ArrayList 오브젝트의 상태 및 단계를 설정한다. Action 클래스는 이 데이터를 ValueStack에 저장하면 JSP가 UI에 표시하기 위해 이를 사용하게 된다.

  2. JSP측에서 데이터를 처리하려면 Listing 2와 같이 statestatus의 값을 받을 <select> 태그를 써야 한다.



    Listing 2. statestatus의 값을 받을 <select> 태그 쓰기

    
                            <%@ page language="java" contentType="text/html;
                            charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
                            <%@ taglib prefix="s" uri="/struts-tags" %>
                            
                            <html>
                            <title>Sample Display Page</title>
                            <body>
                            
                            <s:select list="%{status}" name="Status"></s:select>
                            <s:select list="%{state}" name="State"></s:select>
                            
                            </body>
                            </html>
                        

  3. Listing 3과 같이 struts.xml 맵핑으로 Action과 JSP를 구성한다.



    Listing 3. struts.xml 맵핑으로 Action과 JSP 구성

    
                            <!DOCTYPE struts PUBLIC"-//Apache Software
                            Foundation//DTD Struts Configuration 2.0//EN"
                            "http://struts.apache.org/dtds/struts-2.0.dtd">
                            <struts>
                            <package name="sample.exmaple"
                            extends="struts-default">
                            <action name=”DisplayAction”   
                            class=”com.sample.example.DisplayAction”>
                            <result name=”success”>/DisplayPage.jsp
                            </result>
                            </action>
                            </package>
                            </struts>
                

위의 코드 예제에서는 다음 내용이 나와 있다.

  • Action 클래스는 statestatus라는 이름의 변수 목록이 있다.
  • 데이터가 arraylist 유형의 statestatus를 만들어 Action 클래스에 추가된다.
  • <s:select>에는 Action 클래스에서 지정된 것과 동일한 이름의 목록 매개변수(필수)가 있다.
  • %{<list-variable>}를 사용하여 이러한 목록 변수를 배정한다.
  • JSP에서 목록 변수의 이름은 Action 클래스에서 지정된 이름과 일치한다.

그림 5에 결과물 예제가 표시되어 있다.


그림 5. 결과물 1: Status 목록의 표시
'Status'와 'State'의 두 가지 드롭 다운 상자의 스크린샷. 'Status' 목록이 확장되어 사용 가능한 값은 'New', 'Fixed', 'Resolved' 및 'Closed'가 있다.

그림 6에서 <select> 태그인 StatusAction 클래스에 배정된 값으로 초기화된다.


그림 6. 결과물 2: State 목록의 표시
'Status'와 'State'의 두 가지 드롭 다운 상자의 스크린샷. 'State' 목록이 확장되어 사용 가능한 값은 'Defect', 'Task' 및 'User Stories'가 있다.

<select> 태그인 StateAction 클래스에 배정된 값으로 초기화된다.


사전 입력된 UI 필드에서 기본값 설정

사용자가 값 목록이 있다고 가정하자. 목록의 요소에서부터 사용자는 UI가 로드되면 기본값으로 하나의 값을 설정하고자 한다.

다음 예제에서 사용자는 콤보 상자가 있고 UI가 로드된 후에 최종 값을 표시하고자 한다.

  1. Listing 4와 같이 Action 클래스를 수정하고 기본값의 코드를 추가한다.



    Listing 4. Action 클래스 수정 및 기본값의 코드 추가

    
    public class DisplayAction extends ActionSupport {
    	
    	private List state = new ArrayList();
    	private List status = new ArrayList();
    	private String defaultState = "";
    	private String defaultStatus = "";
    	
    	public String execute()
    	{
    	 //set status and state list values//
    		setState(this.state);
    		setStatus(this.status);
    
    	//set default values for state and status which
         //a user wants to display on the User Interface
    		setDefaultState("Task");
    		setDefaultStatus("Closed");
    		return "success";
    	}
    	
    	//getter and setter method//
    	public List getState() {
    		return state;
    	}
    
    	public void setState(List state) {
        //implement the application specific logic to retrieve   
        //the data from the database here//
    
        //Here for displaying the data, we are using few     
        //hardcoded values
    		state.add("Defect"); 
    		state.add("Task");
    		state.add("User Stories");
    	}
    
    	public List getStatus() {
    		return status;
    	}
    
         public void setStatus(List status) {
    	//implement the application specific logic to retrieve        
         //the data from the database here//
    	
         //Here for displaying the data, we are using few     
         //hardcoded values//
    
              status.add("New"); 
    		status.add("Fixed");
    		status.add("Resolved");
    		status.add("Closed");
    	}
    
    	public String getDefaultState() {
    		return defaultState;
    	}
    
    	public void setDefaultState(String defaultState) {
    		this.defaultState = defaultState;
    	}
    
    	public String getDefaultStatus() {
    		return defaultStatus;
    	}
    
    	public void setDefaultStatus(String defaultStatus) {
    		this.defaultStatus = defaultStatus;
    	}
    }
    

    위의 Action 클래스에서 예제는 <select> 태그의 기본값으로 변수를 설정하는 두 개 이상의 게터/세터 메소드를 추가한다.

  2. 수정된 JSP 코드는 아래 Listing 5에 표시된다.



    Listing 5. 수정된 JSP 코드

    
                            <%@ page language="java" contentType="text/html;
                                charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
                            <%@ taglib prefix="s" uri="/struts-tags" %>
                            
                            <html>
                            <title>Sample Display Page</title>
                            <body>
                            
                            <s:select list="%{status}" name="Status" 
                            value="%{defaultStatus}"></s:select>
                            <s:select list="%{state}" name="State" 
                            value="%{defaultState}"></s:select>
                            
                            </body>
                            </html>
                        

    struts.xml 맵핑은 이 케이스와 동일하게 남아있다.

위의 코드 예제에서는 다음 내용이 나와 있다.

  • Action 클래스에 표시되는 기본값은 두 개의 문자열 변수에 저장된다.
  • JSP에서 이러한 값은 <select> 태그의 value 매개변수를 사용하여 처리할 수 있다.
  • Action 클래스에서 기본 값 변수의 이름은 결과 JSP에서의 이름과 일치해야 한다.

그림 7에 결과물 예제가 표시되어 있다.


그림 7. 결과물 1: Status 기본값의 표시
두 개의 드롭 다운 상자의 동일한 스크린샷. 이번에 Status와 State 필드의 선택은 각각 'Closed'와 'Task'이다.

그림 8에서 Closed는 UI가 로드될 때에 Status 목록의 기본값으로 설정되어 있다.


그림 8. 결과물 2: State 기본값의 표시
두 개의 드롭 다운 상자의 동일한 스크린샷. 이번에 Status와 State 필드의 선택은 각각 'Closed'와 'Task'이다.

Task는 UI가 로드될 때에 State 목록의 기본값으로 지정되어 있다.


요약

Struts 2는 Java Servlets보다 더 각광받는 2세대 웹 애플리케이션 프레임워크이다. 이는 일반적으로 사용되는 MVC 디자인 패턴을 능가한다. Struts 2는 일반 태스크를 자동화하여, SML 기반 구성을 사용하는 Action에서부터 Result까지의 페이지 맵핑을 자유롭게 활용할 수 있다. 이 프레임워크는 웹 기반 애플리케이션의 구현에 대한 기초 수준의 세부 사항을 다루고, 구조적 소프트웨어의 일부분을 제공한다.

이 기사에서는 완성된 프레임워크로서 Struts 2 기능에 대해 살펴보았다. Struts2의 강력한 기능으로 제공되는 몇 가지의 가장 일반적인 유스 케이스와 솔루션에 대해 탐구해보았다.


참고자료

교육

  • Java 웹 애플리케이션을 작성하기 위한 무료 오픈 소스 프레임워크인 Apache Struts 2에 대해 보다 자세히 알아보자.

  • Struts 2 문서: 시작하기, 튜토리얼, 자주 묻는 질문과 안내서를 받아보자.

  • 여러 bean을 집어 넣고 동적 EL 표현식에 대해 평가할 수 있는 ValueStack에 대해 더 자세히 알아보자.

  • Struts 2 UI Tag Reference를 사용하자. Struts UI 태그는 다양하고 재사용 가능한 HTML에서 데이터를 표시한다.

  • 보안 공고, 위키, 빠른 링크 및 튜토리얼을 비롯한 Struts 2 문서 및 다른 참고자료를 받아보자.

  • developerWorks Web development zone에서는 다양한 웹 기반 솔루션 관련 기사를 전문적으로 다룬다.

  • IBM 기술 이벤트 및 웹 캐스트: developerWorks 기술 이벤트 및 웹 캐스트에 대한 최신 정보를 얻을 수 있다.

  • developerWorks on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.

제품 및 기술 얻기

  • 자신에게 가장 적합한 방법으로 IBM 제품을 평가해 보자. 시험판 제품을 다운로드하거나, 온라인으로 제품을 사용해 보거나, 클라우드 환경에서 제품을 사용하거나, SOA Sandbox에서 SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.

토론

  • My developerWorks: 개발자가 이끌고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.

필자소개

Photo of Ina Arya

Ina is a system software engineer with the Software Development Workbench Team at the IBM India Software Lab. She has more than four years of experience in application development, including Web applications using Java technology.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=웹 개발, Information Management
ArticleID=503569
ArticleTitle=Struts 2로 동적 데이터 처리하기
publish-date=06152010
author1-email=inaarya@in.ibm.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.