struts2 리절트(result) – 개요
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
Struts2에서 응답을 어떻게 만들어 낼지 결정하는 클래스를 result라고 한다.
만약 struts.xml에 다음과 같이 매핑 되어 있다면…
(아래 3경우는 동일한 결과를
나타낸다)
<result name=”success”
type=”dispatcher”>
<param
name=”location”>/success.jsp</param>
</result>
<result name=”success”
type=”dispatcher”>/success.jsp</result>
<result>/success.jsp</result>
Action에서 리턴한 문자열이 “success”면 dispatcher TYPE의 result가 실행되는데 dispatcher는 /success.jsp로 forward 한다.
물론 Interceptor에서
Action의 실행 결과(Action.SUCCESS 등등)를 리턴하지 않고 결과 문자열을 만들어 리턴 하는 것도 가능한데 논리적인 유효성 검사 또는 로그인을 먼저 해야
하는 Action을 로그인 하지 않고 들어오는 경우 등에 이용이 가능하다. 이 경우 return invocation.invoke()을 하지 않고 문자열을
직접 리턴 할 수 있다.
Action 인터페이스는 아래와 같이 몇 가지
result 문자열을 상수로 정의하고 있다.
-
SUCCESS(“success”) : Action이 설동적으로
실행
-
NONE(“none”) : Action은 성공이지만 화면을 보여줄
필요가 없는 경우
-
ERROR(“error”) : Action 실행 중 에러
발생
-
INPUT(“input”) : 입력값에 문제가 있어 입력화면으로
되돌림
-
LOGIN(“login”) : 로그인을 하지 않아 Action 실행 불가. 로그인 화면으로 돌아간다.
[result-type과 result]
result는 다음과 같이
result-type을 먼저 정의하고 action 요소에서 결과 문자열과 타입을 매핑
한다.
<struts>
<package name="struts2"
extends="struts-default">
<result-types>
<result-type
name=”dispatcher” class=”…”/>
<result-type
name=”redirect” class=”…”/>
<result-type
name=”chain” class=”…”/>
</result-types>
<action name="login"
class="login.action.LoginAction">
<result>/login/login_ok.jsp</result>
<result
name="login"
type=”dispatcher”>/login/login.jsp</result>
</action>
</package>
</struts>
Struts2에서는 자주 사용되는 result
type에 대해 이미 클래스로 구현해 놓고 struts-default.xml에 이미
정의했으므로 우리는 struts-defulat 패키지를 extends
하고 action 설정에서 그냥 사용만 하면 된다.
<package name="struts-default">
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
……………..
……………..
……………..
위 result-type중
dispatcher에 default=”true” 라고 되어 있는데 action의 result 설정에서
type 속성을 기술하지 않으면 기본 type은 “dispatcher”가 된다.
[global-result]
로그인 화면, 에러처리화면(404,500에러 처리화면) 처럼 모든 웹 애플리케이션에 사용되는
화면같은 경우 global-results로 정의 해 모든 action
요소에서 사용 가능하게 할 수 있다. 결과문자열에 대한 매핑은 action 설정내의 local result를 먼저 찾고
없으면 global-results에서 찾는다.
<package …>
<global-results>
<result
name=”error”>/error.jsp</result>
<result
name=”login”>/login.jsp</result>
</global-results>
<action ….>
</action>
</package>
[와일드카드 매핑]
result에도 와일드카드 매핑을 할 수 있는 데 다음 예를 보자.
<action name=”*/*” class=”oraclejava.action.{1}Action”
method=”{2}”>
<result>{2}.jsp</result>
</action>
만약 다음과 같은 요청이 들어 온다면…
/Login/create.action è LoginAction에서 action
method create()를 실행하고 create.jsp로 forward 시킨다.
댓글 없음:
댓글 쓰기