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 클래스들을 직접 생성해서 컴파일 해보자.
이클립스에서 프로젝트를 추가하는 것은 지난회의 예제와 동일하다.
여기서는 그 결과만 보도록 하자.
아래와 같이 내용이 나오는가?
가장 중요한 컨피그 파일은 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패키지를 바로 포함시키도록 하자.
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=example/Login.action">
</head>
\struts-test03\.project
\struts-test03\dir.txt
\struts-test03\WEB-INF\web.xml
\struts-test03\WEB-INF\classes\struts.properties
\struts-test03\WEB-INF\classes\struts.xml
\struts-test03\WEB-INF\classes\example\Login.class