Framework/struts2

STRUTS 사용법 2 - 2.0

jeeyong 2007. 11. 22. 10:07

1. STRUTS 2.0 Quick Start


스트러츠를 받으면 딸려오는 예제 중에서 Blank 예제를 살펴보도록 하자.

스트러츠를 처음 사용할때 우리가 명시적으로 만들어야 할 파일 말고도 그외 필요한 파일들때문에 혼동을 겪는다. 이것은 프레임워크가 요구하는 Configuration 파일들이라고 생각하는 것이 쉽고, 처음에는 그냥 복사해서 사용하기 바란다.


일단 파일들의 디렉토리 구조를 살펴보자.


사용자 삽입 이미지




앞서 본 예제와 비슷할 것이다.

이 디렉토리 구조에서 파일들의 리스트를 살펴보도록 하자.

먼저 리스트에서 .xml로 끝나는 것은 우리가 기능구현을 하려고 우선 관심을 가지는 소스코드와는 다른 것이다. 일단 있는 것을 사용하고, 다음에 정보추가에 대해 알아보면 된다.

또한 *.properties 파일 역시 마찬가지이다.


.\.classpath            ==> 이클립스 프로젝트 파일이다.
.\.project                ==> 이클립스 프로젝트 파일이다.

.\index.html            ==> 예제의 인덱스 파일이다.


.\example\HelloWorld.jsp
.\example\Login.jsp
.\example\Menu.jsp
.\example\Missing.jsp
.\example\Register.jsp
.\example\Welcome.jsp      => 입력을 받아들이는 JSP 파일로 그대로 사용한다.

.\WEB-INF\applicationContext.xml
.\WEB-INF\web.xml                     => 스트러츠에서 사용하는 기본 xml 파일


.\WEB-INF\classes\example.xml
.\WEB-INF\classes\struts.properties
.\WEB-INF\classes\struts.xml


.\WEB-INF\classes\example\ExampleSupport.class
.\WEB-INF\classes\example\HelloWorld.class
.\WEB-INF\classes\example\Login-validation.xml
.\WEB-INF\classes\example\Login.class
.\WEB-INF\classes\example\package.properties
.\WEB-INF\classes\example\package_es.properties   => example 밑은 소스컴파일 후 빌드된 바이너리가 아웃풋으로 출력되는 곳이다. 여기에도 xml파일과 *.properties파일들이 보인다.

.\WEB-INF\lib\commons-collections-3.1.jar
.\WEB-INF\lib\commons-logging-1.0.4.jar
.\WEB-INF\lib\freemarker-2.3.4.jar
.\WEB-INF\lib\ognl-2.6.7.jar
.\WEB-INF\lib\spring-aop-1.2.8.jar
.\WEB-INF\lib\spring-beans-1.2.8.jar
.\WEB-INF\lib\spring-context-1.2.8.jar
.\WEB-INF\lib\spring-core-1.2.8.jar
.\WEB-INF\lib\spring-web-1.2.8.jar
.\WEB-INF\lib\struts2-api-2.0.1.jar
.\WEB-INF\lib\struts2-core-2.0.1.jar
.\WEB-INF\lib\xwork-2.0-beta-1.jar      ====> 라이브러리 파일들. 스트러츠 밑 기본 실행에 필요한 라이브러리 파일들이다. 그냥 복사해서 쓴다고 생각하자.


.\WEB-INF\src\java\example.xml
.\WEB-INF\src\java\struts.properties
.\WEB-INF\src\java\struts.xml          ======> 소스에서 사용된 xml 클래스디렉토리 내용과 동일하다.


.\WEB-INF\src\java\example\ExampleSupport.java   ===> 우리가 만들 자바코드
.\WEB-INF\src\java\example\HelloWorld.java
.\WEB-INF\src\java\example\Login-validation.xml
.\WEB-INF\src\java\example\Login.java
.\WEB-INF\src\java\example\package.properties
.\WEB-INF\src\java\example\package_es.properties


이렇게 보면 직접 코딩을 하는 부분은 소스의 *.java 부분이며, xml을 설정을 바꾸면 된다.

물론, 실제 개발을 할때는 *.java의 구현말고도, *.jsp 도 코딩을 해야 한다.



자 일단, 프로젝트를 하나 생성하고, 여기에 *.java 클래스들을 직접 생성해서 컴파일 해보자.

이클립스에서 프로젝트를 추가하는 것은 지난회의 예제와 동일하다.

여기서는 그 결과만 보도록 하자.



 

사용자 삽입 이미지


 
 
 
컴파일이 무사히 되었으면, 브라우저를 열어서 내용에 접근을 해보도록 한다.
 
 


 

사용자 삽입 이미지


 
위와 같이 내용이 나오는가? 그럼 index.html의 내용을 아래와 같이 수정해 보라. 그러면 로그인 화면으로 바뀌게 될 것이다.


 

사용자 삽입 이미지




아래와 같이 내용이 나오는가?

사용자 삽입 이미지


 
여기까지 예제를 한번 실행해 보면, 뭔가 감이 잡히는 것이 있을 것이다. 프레임워크에 익숙해지면 우리가 신경써야 하는 부분이 상당히 줄어든다는 점이다. 그러기 위해서 프레임워크의 기능을 자세히 알고 정확히 써야 할 필요가 있다.
 
 
2. Configuration Files
 
 

가장 중요한 컨피그 파일은 web.xml 과 struts.xml(1.0에서는 struts-config.xml) 이다.  이 두개의 파일에서 다른 추가가능한 컨피규레이션 파일들을 참조하거나 포함할 수 있다.

아래 테이블을 보면 내용을 비교해서 볼수 있다.

몇몇 파일들은 동적 리로딩이 된다.



Static Content

File Optional Location
(relative to webapp)
Purpose
web.xml no /WEB-INF/ 프레임워크의 필요한 컴포넌트 내용을 모두 담고 있는 웹 배포 기술자이다. 
struts.xml no /WEB-INF/classes/ 핵심 설정파일. result/view types, action mappings, interceptors 등을 담고 있다
struts.properties yes /WEB-INF/classes/ 프레임워크 프로퍼티 파일.
struts-default.xml yes /WEB-INF/lib/  struts-action-x.x.jar struts.xml에 포함되는 디폴트 설정파일
velocity.properties yes /WEB-INF/classes/ default Velocity configuration 을 덮어쓴다
struts-default.vm yes /WEB-INF/classes/ velocity.properties 에서 참조되는 디폴트 매크로들

Common static content that is needed by the framework (JavaScript and CSS files 등 과 같이 프레임워크에서 필요로 하는 일반 고정 컨텐트들은 자동으로 FilterDispatcher filter에의해 처리된다. /struts/로 시작하는 것은 고정 컨텐츠가 필요로 하다는 말이되며, /strust/뒤에 오는 값이 Struts2패키지에 매핑된다.


디폴트로 다음 패키지들이 검색된다.

  • org.apache.struts2.static
  • template

3. Login Example


위 예제의 축소판이기는 하지만, 본격적으로 스스로 예제를 통해 학습해 나가는 첫걸음을 시작해보자.

일단, 로그인 창이 나오는 예제를 만드려고 한다.


struts-test03 이라는 프로젝트를 하나 만들고, 거기에 WEB_INF 폴더를 추가하라.

그리고 그 하부에, lib, src, classes 폴더를 만들라. 이후 src와 classes 파일은 소스와 빌드 타켓으로 프로젝트 속성에서 정의하도록 한다.

그 다음 src 밑에 example패키지를 추가하라.

example 패키지에서 Login 클래스를 생성하면 다음과 같다.

사용자 삽입 이미지



앞서 예제의 Login.java를 그대로 복사한후 소스를 수정해 주어야 한다.


앞서 예제에서는 Login 클래스가 ExampleSupprot 클래스에서 상속받고 있고, ExampleSupport 는 ActionSupport 클래스에서 상속받고 있다.

중간 클래스인 ExampleSupport를 없애고 바로 ActionSupport 에서 상속받도록 고치고, ActionSupport패키지를 바로 포함시키도록 하자.


사용자 삽입 이미지


 
 
자 이런 이후에 claases 디렉토리를 보면 Login.class라고 컴파일이 되어 있을 것이다.
 
이후에 우리가 해줄것은 매우 단순하다.
 
먼저 루트의 index.html 파일을 복사한후 다음과 같이 소스를 수정해 준다.
 
<head>
    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=example/Login.action">
</head>
 
URI를 Login 으로 지정해 주기 위해서이다.
 
그 다음 WEB-INF 밑의 web.xml, applicationContext.xml파일을 복사한다.
다음 WEB-INF\classes 밑의 struts.xml, example.xml파일을 복사한다.
examle 밑의 Login.jsp파일을 복사핟.
lib는 그대로 복사.
 
 
이렇게만 하면 필요한 최소한의 파일을 복사한 셈이다.
리스트를 보면 다음과 같다. (lib 파일을 일부로 표시 하지 않았다.)
 
 
\struts-test03\.classpath
\struts-test03\.project
\struts-test03\dir.txt
\struts-test03\index.html
 
\struts-test03\example\Login.jsp
 
\struts-test03\WEB-INF\applicationContext.xml
\struts-test03\WEB-INF\web.xml
 
\struts-test03\WEB-INF\classes\example.xml
\struts-test03\WEB-INF\classes\struts.properties
\struts-test03\WEB-INF\classes\struts.xml
\struts-test03\WEB-INF\classes\example\Login.class
 
\struts-test03\WEB-INF\src\example\Login.java
 
 
이렇게 한후 한번 브라우저를 실행해 보라.
 
 
 


 

사용자 삽입 이미지


 
 
에러가 날 것이다. 그것은 example.xml에서 우리가 없는 action 매핑 내용을 가지고 있기 때문이다. 현재는 Login 만 가지고 있으므로 그것만 남겨놓고 다른 action 태그들은 삭제하기 바란다.
 


 

사용자 삽입 이미지


 
 
다시 하면 로그인 화면이 뜰 것이다.
 
여기까지 실행을 한번 해보면 하나의 예제를 돌려보는 것에 대해서 어렴풋이 감이 잡힐 것이다. 조금씩 살을 붙여가면서 예제를 탐구하면 STRUTS의 기능을 잘 사용하는 것은 그다지 어렵지 않다. 다만 스트러츠 자체의 아키텍처 구조등을 공부하는 것은 조금 별개의 문제이다. 프레임워크의 내용을 상세히 알수록 개발에 도움이 되므로 시간 있을때마다 조금씩 공부를 해보는 것도 나쁘지 않을 것이다.