스트럿츠가 무엇인지부터 살펴보자.
어제 프로젝트 실행을 위해 분리한 파일. 책에 따르면 아래와 같다.
commons-logging-1.0.4.jar |
log4j와 같은 로깅용 |
freemarker-2.3.8.jar |
UI 태그 템플릿용 |
ognl-2.6.11.jar |
Object Graph Navigation Language라고 한다. struts2를 위한 EL임. JSP 2.1 스펙에 포함된 EL과 매우 비슷 |
struts2-core-2.0.14.jar |
스트럿츠2의 코어 라이브러리 |
xwork-2.0.7.jar |
스트럿츠 2에서 가장 새롭게 변한 것이 Webwork(=Xwork)와 통합된 것이다. xwork가 주가 되고 struts가 뒷받침해주는 형식으로 작동한다. |
스트럿츠2에서는 사용자 요청과 관련된 비즈니스 로직을 수행하는 액션이 제공되는데, 사용자가 요청을 하면 액션이 호출되어 비즈니스 로직이 수행된다. 스트럿츠 2에서는 비즈니스 로직이 수행된 후 최종 결과를 출력하는 것을 리절트라고 한다.
사용자의 요청을 처리하기 위해 어던 액션이 호출되어야 하는지, 해당 액션이 호출된 후 어떤 리절트가 선택되어야 하는지 스트럿츠가 알 수 있도록 하기 위한 환경 설정 파일이 있어야 한다. 스트럿츠 2는 웹 앱을 개발하기 위한 프레임워크이므로 스트럿츠2에서 사용하는 기본 용어를 이해하기 위해, 우선 웹 앱의 동작 원리에 이 용어들을 접목해보도록 하자.
<사용자는 특정 action을 취하기 위해 제공하는 service에 접근한다. 웹 앱이 제공하는 service는 사용자 요청에 따라 적절한 행동을 취하고 그에 알맞은 result를 반환해 준다. 이게 바로 웹이다.>
action은 웹 앱이 사용자에게 제공하는 모든 행동을 의미한다. 사용자의 요청에 따른 적절한 비즈니스 로직과 연관된다. result는 결과물로서 단순한 jsp 페이지가 될 수 있다.
Hello World 전반적으로 이해하기
스트럿츠 2에서 작성한 웹 앱을 실행하려면 웹 브라우저에 다음과 같이 입력한다.
스트럿츠 1에선 do, 스트럿츠 2에서는 action이 기본 확장자이다.
스트럿츠 2의 컨트롤에 의해 클라이언트 요청을 받아 이를 수행할 모델 영역의 비즈니스 로직을 수행하고, 수행 결과를 어떤 뷰를 통해 프레젠테이션 로직을 수행할지 결정한다. 이렇게 결정된 뷰가 바로 HelloWorld.jsp이다.
스트럿츠 2에선 HelloWorld.action 형태로 클라이언트가 특정 페이지를 요청하면 자바 클래스인 HelloWorld.java가 실행되는데 이를 action 이라고 부른다. 액션이 실행된 후 처리 결과가 HelloWorld.jsp에 실려 클라이언트에 보내진다.
웹 브라우저에 나타난 결과인 HelloWorld.jsp 페이지를 스트럿츠 2에서는 result라고 부른다. 액션을 실행한 후 처리한 결과를 출력할 뷰를 결정하기 위해서는 XML 형태의 스트럿츠 설정 파일인 web.xml과 struts.xml이 필요하다. web.xml 은 URL의 확장자가 action일 때 FilterDispatcher에 의해 액션을 실행하기 위한 환경을 구축하도록 한다. struts.xml은 액션 실행 결과를 처리할 result와 매핑을 설정한다.
요소 |
역할 |
파일 |
설명 |
filter |
URL의 확장자가 action이면 FilterDispatcher로 액션을 실행하는 환경을 구축 |
web.xml |
환경 설정 파일 |
action |
result가 필요로 하는 메시지를 제공 |
HelloWorld.java |
액션 클래스 |
mapping action |
실행 후 결과를 처리할 result와의 매핑을 설정한다. |
struts.xml |
환경 설정 파일 |
result |
메시지를 출력하는 화면 처리를 담당한다. |
HelloWorld.jsp |
리절트 페이지 |
스트럿츠 2로 작성할 경우 순수 JSP보다 프로그래밍하는 양도 많고 어렵다. 그럼에도 불구하고 스트럿츠 2를 활용하는 이유는 로직이 복잡하고 프로그램이 방대할수록 유지보수나 확장이 용이하기 때문이다.
<filter> </filter>문으로 스트럿츠 2의 핵심 컨트롤러 역할을 수행하는 FilterDispatcher 클래스로 struts 2란 필터를 등록한다.
<filter-mapping> </filter-mapping> 문으로 톰캣 서버가 사용자 요청(HelloWorld.action)을 FilterDispatcher 필터가 받을 수 있게 URL 패턴을 필터와 매칭시킨다.
액션 클래스 만들기
사용자 요청과 관련된 비즈니스 로직을 수행하는 액션 클래스를 작성하는 3가지 방법이 있다.
- POJO 형태로 작성
- Action 인터페이스를 구현하여 작성
- ActionSupport 클래스를 확장하여 작성
※ POJO란?
POJO는 Plan Old Java Object의 약자이다. 이를 번역하면 평범한 옛 자바 오브젝트(객체)다. EJB는 형편 없는 생산성과 느린 성능, 불필요한 기술적인 복잡함, 벤더 사이의 알력으로 과도하게 복잡해진 스펙 등에 의한 자바 개발에 대한 불신으로 복잡성이 늘어나는 단점이 있다. POJO 는 그러한 단점을 극복하기 위해 EJB가 잃어버린 중요한 가치인 객체지향적인 설계, 자동화된 테스트의 편의성, 생산성 등을 회복하는 방법으로 채택된 클래스 설계 방식이다. POJO 프레임워크는 복잡하지 않고 깔끔한 코딩을 할 수 있는 장점을 그대로 살리면서, EJB가 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주는 프레임워크이다.
※ EJB란?
엔터프라이즈 자바빈즈(Enterprise JavaBeans; EJB)는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다.
참고: http://www.yes24.com/24/goods/10997637 스트럿츠 2 프로그래밍 입문 – 대림