Struts2 : JSP보다 어렵지만 능률적
처음요청을받는 필터 FilterDispatcher<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>struts.xml : 어플리케이션의 모든 제어에 대한 설정, 클래스 패스의 루트에 위치, struts.xml 파일은 내부적으로 디폴트 설정 파일을 포함.
디폴트 설정파일에는 디폴트 패키지가 있고 패키지는 상속할 수 있다.<?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="default" extends="struts-default"> <!-- 기본연결 start --> <!-- helloWorld: 요청 url, 호출되는 class:dr.struts2.ch01.action.HelloWorld-->
<action name="helloWorld" class="dr.struts2.ch01.action.HelloWorld"> <!-- 출력되는 /hello.jsp -->
<result name="success">/hello.jsp</result> </action> </package> <!-- 기본연결 end --> </struts> |
P53액션 클래스 작성 방법1. POJO 형태로 작성 : 평범한 옛 자바 오브젝트 : 복잡해진 상속,구현 관계를 깨버리고 편의성 생산성을 회복하기위한 방법
2. Action 인터페이스로 구현하여 작성 : struts.xml에서 액션과 class를 맵핑 success같은 반환타입에따라 jsp선택이동
3. ActionSupport 클래스를 확장하여 작성 : -ActionSupport 클래스는 Validateable 인터페이스의 validate() 메서드와, ValidationAware인터페이스의 addFieldError()메소드와 함께 사용하여 유효성을 검사하는 기능을 제공한다 .
-액션을 Actionsupport클래스을 확장하여 유효성 검사
include 요소 설정 파일 관리하기 P70여러개의 설정파일을 만들어서 나눠사용 가능
struts.xml
<include file="struts-ch4.xml" />
<include file="struts-ch5.xml" />
패키지(package)패키지는 result-types, interceptors, action 등을 논리적인 단위로 그룹핑하는데 사용한다.1) 패키지에 들어가는 엘리먼트 순서result-typesinterceptorsdefault-interceptor-refdefault-action-refglobal-resultsglobal-exception-mappingsaction2) 패키지 속성속성 | 필수 | 설명 |
name (식별요소) | 필수 | 필수 속성. 패키지를 구분하는 키. 패키지의 name은 유일해야 함. 다른 패키지가 이 패키지를 상속할 때 이 이름을 사용한다. |
extends (다른패키지 상속할때)
| 선택 | 다른 패키지를 상속하고자 할 때 다른 패키지의 name을 지정한다. 다른 패키지를 상속하면 그 패키지 내의 설정들을 그대로 이어 받는다. 상위 패키지의 설정을 다시 정의하면 그 설정을 오버라이드 하게 된다. |
namespace
| 선택 | 네임스페이스. 패키지 내의 액션들을 URL에 매핑할 때 이 네임스페이스가 URL의 중간 경로가 된다 |
abstract | 선택 | 패키지를 추상 패키지로 만든다. 추상 패키지에는 액션 설정이 없다. 다른 패키지에 상속하는 용도 |
네임스페이스
/StrutsMain/helloWorld.action/StrutsMain/ch04/helloWorld.action (네임 스페이스지정시 URL의 중간경로 , ch04 폴더:가상일수도 있고 만들어줄수도있음)액션없이 설정만으로 jsp연결
루트네임 스페이스 : 네임 스페이스 사용안할시
명시적 루트네임스페이스 : namespace="/"
디폴트 네임스페이스 : 명시안하거나
extends="struts-default"
명시적으로 명시 namespace=""
많이 사용하는 방법<!-- 3.네임스페이스 사용 --><!-- 4.ActionSupport를 이용한 jsp 호출 --><!-- 5. 디폴트 액션 -->01 Action 인터페이스 이해하기execute() 메소드 : 액션 클래스가 인스턴스화되면서 자동 호출되는 기본 액션 메소드리턴 코드리턴코드 | 설명 |
ERROR | 액션 실행에 실패하여 에러 페이지로 돌아감 |
INPUT | 입력 값이 부족하거나 문제가 있어 입력 페이지로 돌아감 |
LOGIN | 로그인을 하지 않아서 액션을 실행할 수 없으므로 로그인 페이지로 돌아감 |
NONE | 액션이 성공적으로 실행은 되었지만 화면을 보여주지 않음 |
SUCCESS | 액션이 성공적으로 실행되어 결과 화면을 사용자에게 보여줌
|
생성자, getter,setter, toString도메인 오브젝트 사용1,2,3
ActionSupport (prepare,medelDriven,params) 클래스에 대한 이해
-ActionSupport 클래스는 Validateable 인터페이스의 validate() 메서드와, ValidationAware인터페이스의 addFieldError()메소드와 함께 사용하여유효성을 검사하는 기능을 제공한다 .
-액션을 Actionsupport클래스을 확장하여 유효성 검사
ModelDriven
- 도메인 오브젝트에 접근하기 위한 방법으로 ModelDriven 액션을 사용하는 방법이 있다.
- ModelDriven 액션 클래스를 생성하기 위해서는 ModelDriven 인터페이스를 구현해야 한다.
- ModelDriven 인터페이스를 API document에서 찾아보도록 한다.
class: 인터페이스를 구현한 클래스에서는 추상메소드를 오버라이딩해서 구현
@Override
public Object getModel(){
return user; : 생성된 객체를 value stack 상단에 올림
}
struts.xml:
<interceptor-ref name="modelDriven"/>
userRegForm3.jsp:
<input type="text" name="userId">
Preparable
- Preparable 인터페이스는 액션의 메소드 execute를 실행하기 전에 다른 로직을 실행하고 싶을때 사용한다.
- Preparable인터페이스 API document에서 찾아보도록한다
class: 인터페이스를 구현한 클래스에서는 추상메소드를 오버라이딩해서 구현
@Override
public void bprepare() thorws Exception{
user=new User(); :객체를 생성
}
struts.xml:
<interceptor-ref name="prepare"/>
유효성검사
extends ActionSupport
@Override
public void validate()
<action name="helloWorld5" class="com.ch4.action.HelloWorld5">
<interceptor-ref name="params"/>
<interceptor-ref name="workflow"/>
<result name="input">name5.jsp</result>
<result name ="success">hello.jsp</result>
</action>
====================================프로젝트========================================Java Resources src com.ch4.action CreateUser (도메인 오브젝트 사용1) : JSP적 CreateUser2 (도메인 오브젝트 사용2) : Struts2 user.프로퍼티 CreateUser3 (도메인 오브젝트 사용3) HelloWorld (네임스페이스) HelloWorld3 (파라미터값을 전달받는 예제) HelloWorld4 (유효성체크) HelloWorld5 (ActionSupport 상속 유효성 체크) com.ch4.dao UserDao (도메인 오브젝트 사용1) com.ch4.domain User (도메인 오브젝트 사용1) com.ch5.interceptor TimerInterceptor (커스텀 인터셉터) tutorial HelloWorld (첫예제) HelloWorld02 (POJO 형태) struts-ch5.xml struts-ch4.xml struts.xml (include 할것)WebContent ch4 createSuccess.jsp (도메인 오브젝트 사용1,2,3) hello.jsp (네임스페이스) name3.jsp (파라미터값을 전달받는 예제) name4.jsp (유효성체크) name5.jsp (ActionSupport 상속 유효성 체크) userForm.jsp (도메인 오브젝트 사용1): JSP적 userForm2.jsp (도메인 오브젝트 사용2) : Struts2 user.프로퍼티 userForm3.jsp (도메인 오브젝트 사용3) WEB-INF web.xml a.jsp (와일드 카드를 사용해서 출력하기) hello.jsp (액션없이 action출력하기) helloWorld.jsp (첫예제) helloWorld02.jsp (POJO 형태) index.html some.jsp (디폴트 액션 연습 500에러)====================================프로젝트============================================================================코드========================================Java Resources src com.ch4.action CreateUser (도메인 오브젝트 사용1) : JSP적