struts2 샘플 프로젝트 시작하기

개발 노트 2009. 3. 6. 16:26 posted by 무병장수권력자


Struts2 샘플 프로젝트로 시작하기

작성자 : 김문규
최초 작성일 : 2009.3.6

1. struts2 란?
모델 2 기반 MVC패턴으로 웹 애플리케이션을 쉽게 개발하기 위한 프레임워크입니다.
여러가지 좋은 기능이 있지만, View(jsp)와 Controller(beans)간에 논리의 이동을 정의하기가 매우 수월하다는 장점이 있습니다.

2. 프레임워크 설치하기
http://struts.apache.org/ 에서 프레임워크를 다운 받을 수도 있고, 관련된 튜토리얼도 제공 받을 수 있습니다.

3. 샘플 웹 프로젝트
본 포스트는 JAVA/JSP를 이용해서 웹 애플리케이션을 구현하는 것의 기본적인 지식이 있으신 분들을 대상으로 합니다.
다음은 소스 프로젝트 입니다. 이클립스 프로젝트 이며, ant 빌드 파일을 포함합니다.
성공적인 빌드를 위해서는 위에서 다운로든 받은 jar 중 다음을 buildpath에 추가해 주세요.
 - common-fileupload-1.2.1.jar
 - commons-logging-1.0.4.jar
 - freemarker-2.3.13.jar
 - ognl-2.6.11.jar
 - struts2-core-2.1.6.jar
 - xwork-2.1.2.jar



1) web.xml 에 struts 필터 걸기
아래의 내용이 추가되어야 합니다. 모든 입력을 struts라는 필터에서 처리하라는 의미입니다.

<web-app>
  <filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
 
  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

2) struts.xml 정의하기
해당 파일은 classes
해당 파일은 struts의 FilterDispatcher가 사용하게 되며, view와 controller간의 관계를 명시하고 있습니다.
다음은 helloworld, logon, menu라는 action을 정의하고 있으며, 
http://주소/context_root/helloworld.action
http://주소/context_root/logon.action
http://주소/context_root/menu.action
라는 주소로 호출될 수 있습니다.
action element를 간략하게 설명하면 다음과 같습니다.
 name : 이름
 class : 호출되는 controller
 result : result-name에 따라 이동할 다음 액션, 페이지

<?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="tutorial" extends="struts-default">
  <action name="helloworld" class="tutorial.HelloWorld">
   <result>/HelloWorld.jsp</result>
  </action>
  
  <action name="logon" class="tutorial.Logon">
   <result name="success" type="redirectAction">menu</result>
   <result name="input">/Logon.jsp</result>
  </action>

  
  <action name="menu" class="tutorial.Menu">
   <result name="success">/Menu.jsp</result>
   <result name="error">/Logon.jsp</result>
  </action>
 </package>
</struts>

3) Controller 구현하기
위의 struts.xml에 정의된 tutorial.Logon의 코드를 보여드리고 중요한 부분만 알아보겠습니다.
request를 처리하는 Controller 클래스는 ActionSupport를 상속하며, 기본적으로 execute()로 request를 전달합니다.
중간에 비지니스 로직이 약간 있어서 헷갈리실 수 있지만, 중요한 것은 return 값입니다.
SUCCESS는 실제로는 "success"를 가리키는 값이며 이는 struts.xml의 result-name이 success인 설정과 연관을 맺게 됩니다.
따라서, execute()가 success를 반환하면, struts는 현재 request를 menu.action으로 재전송 하게됩니다.
참 쉽죠? ^^
그 외에도 ERROR, INPUT, LOGIN, NONE가 정의되어 있습니다.

package tutorial;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Logon extends ActionSupport{ 
 private String username;
 private String password;
 
 @Override
 public String execute() throws Exception {
  if (isInvalid(getUsername())) return INPUT;
  if (isInvalid(getPassword())) return INPUT;
  
  Map<String, Object> session = ActionContext.getContext().getSession();
  session.put("id", getUsername());
  
  return SUCCESS;
 }

 
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 private boolean isInvalid(String value)
 {
  // Originally, I should authenticate this id/passwd.
  // Because of test project, I am not willing to implement this functionality. 
  return (value == null || value.length() == 0);
 } 
}

4) 돌려보기
아파치 설치하시고
build.properties에서 아파치 설치 폴더를 맞추시고
ant로 빌드하시면
아파치의 webapp에 꽂히고 실행이 됩니다.
enjoy~

4. 마치면서
struts는 꽤 오래전부터 굉장히 인기를 끌고 있는 MVC 프레임워크 입니다. 특히 말씀드린데로 view와 controller의 연결이 매우 편리하기 때문에 다른 프레임워크와도 같이 혼용되는 경우도 많습니다. 대표적으로 spring과 struts의 조합을 들 수 있습니다.
아직 경험이 없는 웹 개발자이시라면, 빨리 수박 겉핥기라도 시작하시길 바랍니다. like me~