Struts는 Java 웹 애플리케이션을 만들기위해 무료 오픈 소스 MVC Framework입니다.
Framework 중 Spring Framework 다음으로 자주 사용되는 Struts에 대해서 정리해 보고자합니다. 개발에 주를 이루는 Spring Framework 이전에 Struts를 사용한 개발이 많았었고 현재는 그 비중이 줄어들어습니다. 하지만 아직까지도 유지보수를 위해 Struts를 사용하기는 합니다.
Struts의 특징
- java의 기본 문법만 가지고 클래스를 구성하자.
- 좋은 가독성 작성을 목표
- 기본값을 사용하여 많은 설정을 생략할 수 있다.
- 인터셉트 기능을 강화시켜 AOP(Aspect Oriented Proframming) 기술을 제공한다.
- 정보 갱신에 특화(새로고침이 없어도 갱신가능)된 비동기식 자바스크립트 XML: Ajax(Asynchronous Javascript And XML) 구현
- 유연한 플러그인 기능 - 다른 프레임워크와 연결할 수 있다. 부위 별로 다른 프레임워크를 활용해서 만들 수 있다.
- 직접 객체 생성하지 않고, Dependency를 부여한 대상에 의해 생성된 객체를 끌어와서 사용하는 의존성 주입: DI(Dependency Injection)을 활용할 수 있다.
struts.xml의 구조
<sturts>
<package name="현재 패키지 이름" extends="상속받을 패키지 이름" namespace="모듈 이름">
<action name="액션 클래스 이름" class="액션 클래스 경로" method="메서드 이름">
<result name="액션메서드에서 리턴되는 문자열" type="리절트 타입">리절트 페이지</result>
</action>
</package>
</struts>
- action tag에서 method attribute는 <action class>의 method(함수) 이름을 정의합니다. 기본값은 execute()로 생략가능하며, method 설정이 있을 경우, 해당 class 안에서 지정해둔 method가 먼저 실행됩니다. 만약 호출한 method가 존재하지 않는다면 본래의 execute()가 실행이 됩니다. 주로 struts.xml 에서 action을 설정 해줄 때 처음에는 method 를 지정해두지 않는 경우가 많으니 주의해야합니다.
- action name attribute에는 *(와일드카드)가 존재한다면 method에서 [1](1번째 *에 들어가는 method라는 것을 의미함)과 같이 action class name을 커스텀할 수 있다.
- action class attribute는 생략시 <com.opensymphony.xwork.ActionSupport> 클래스가 기본값으로 설정된다.
- result tag type attribute에는 'chain','redirect' 등의 속성이 있으며, 생략가능한 기본값은 'dispatcher' 타입이다.
- result tag name attribute에는 리턴받을 각종 문자열을 대입할 수 있으며, 생략가능한 기본값은 'success'다.
예제)
# Action Class
public class MyAction{
public String execute() throws Exception{
if(...){
return FAILURE;
}
return SUCCESS;
}
}
# struts.xml
<struts>
<package name="example" namespase="example" extends="default">
<action name="link" class="example.MyAction">
<result name="success">/myPage.jsp</result>
<result name="failure">/myError.jsp</result>
</action>
</package>
</struts>
위의 과정에 대해서 간략히 소개를 하자면, struts 구조에서 action을 통해 link이라는 name(다음 할당될 링크 주소)을 갖게 할 example.MyAction로 이동합니다. 이때에 result tag는 class에서 결과가 도착하기까지 잠시 대기를 하며 MyAction class의 execute method(함수)를 실행합니다. 각 조건에 맞게 return value를 지정해주면 result tag는 대기 중에서 active 상태로 전환되며 return된 result에 맞는 업무를 수행합니다.