1. Action, Interceptor, ValueStack 과 Struts Tag 와의 관계
 Tag 의 Value 에 들어가는 문자열은, 무조건 객체를 지칭하는 표현식이다 그냥 value="abc" 하면, ValueStack 의 루트객체(액션컨텍스트)의 getAbc() 가 Call 된다.!

 %{} 표현식
  <s:textfield label="%{getText('label.postalCode')}" name="postalCode"/> 처럼 %{함수} 를 통하여, Action 의 함수를 직접 Call 할 수 있다.
   getText() 는, ActionSupport 를 상속받으면 쓸 수 있으며, Resource Bundle 에서 문자열을 가져오는 기능을 한다.

2. 태그의 Value 속성은 객체다
 <s:textfield name="city" value="SEOUL"/> 되어 있으면, "SEOUL" 이라는 문자열이 값이 되는게 아니고, OGNL 로 인식하여, Action 의 getSeoul() 이라는 함수로 프로퍼티를 가져오려 한다.

  문자열로 쓰려면, <s:textfield name="city" value="%{'SEOUL'}"/> 과 같이 써야 한다. 아니면 value="'SEOUL'" 로 쓸수도 있으나, 앞의 방법을 따르라~

  모든 value="" 안의 값은 기본적으로 Struts2 에서는 OGNL 로 인식하므로, <s:if test="age > 19"/>...</s:if> 처럼 사용하면 된다. 위의 경우에는, <s:if test="%{age > 19}"/>...</s:if> 도, boolean 식으로 표현해도 똑같아 진다.

3. 표현식 언어의 표기법

 JSTL 표준
 표준 Request Context 에 저장된 자바 빈 객체 참조 법
 <p>사용자 이름: ${user.username}</p>

 ValueStack 에 저장된 프로퍼티 참조법
 <s:textfield name="username"/>

 ValueStack 에 저장된 프로퍼티 참조법 2
 <s:url id="ko" action="hello">
<s:param name="request_locale">ko</s:param>
 </s:url>
 <s: a href="%{ko}">Korea</s:a>

 Session 컨텍스트에 있는 프로퍼티 참조법
 <s:property value="#session.user.username" />

 정적인 Map 을 사용하는 방법
 <s:select name="checkedName" list="#{'username' : '이름1', 'username' : '이름2'}"/>

4. OGNL 기본

 OGNL 은, 컨텍스트를 Map 형태로 관리한다. Map 에는
  - application
  - session
  - value stack (루트)
  - request
  - parameters
  - attr (page -> request -> session -> application 순으로 검색)
 의 컨텍스트들이 존재하며, 루트를 제외한 다른 컨텍스트는, #컨텍스트키.프로퍼티 방법으로 접근하고, 루트 컨텍스트(Value Stack 에 있는 Bean)의 프로퍼티는 #없이, 프로퍼티 이름으로만 접근한다.

 액션은 Value Stack 에 저장되므로, Action 의 abc 라는 프로퍼티는
 <s:property value="abc"/> 
 로 가져올 수 있고,

 세션컨텍스트에 username 이라는 프로퍼티는,
  <s:property value="#session.username"/> 으로 가져올 수 있다.
  <s:property value="#session['myKey']"/>
  <s:property value="#request['myKey']"/>
 와 같이 쓸 수 있다는 말이다.

 [Action 클래스에서 컨텍스트 가져오기]
  Action 클래스에서는 ActionContext.getContext().getSession().put("myKey", myObject); 
 와 같이 Context 를 접근할 수 있다.

5. OGNL 사용 예

 myObject 가 루트 객체로 설정되어있다고 가정할 때,

 #myObject.property : myObject.getProperty() 호출됨
 #yourObject.property : youtObject.getProperty() 호출됨
 property : myObject.getProperty() 호출됨
 
[Value Stack 의 상황에 따른 접근]

 현재 Value Stack 에 다음과 같은구조로 객체가 들어가 있을 때

 animal (name, species) <-- stack 의 top [0]
 person (name, salary)
 아래와 같이 접근할 수 있다.

 species --> animal.getSpecies() 호출
 salary --> person.getSalary() 호출
 name --> animal.getName() 호출

 만약, stack 의 특정 번째 top 의 객체의 프로퍼티 가져오려면,
 0.name : animal.name() 호출
 1.name : person.name() 호출
 과 같이 한다.

[static 프로퍼티 / 메소드 참조]
 OGNL 은 static 프로퍼티와 메소드를 호출하는 방법을 제공한다.

 @example.ClassName@myStaticProperty
 @example.ClassName@myStaticMethod()

 와 같이 사용한다.

[파라미터, 요청(request), 세션, 어플리케이션 컨텍스트 참조 방법]

 #parameters['key'] 또는 #parameters.key
  request.getParameter("key") 호출

 #request['key'] 또는 #request.key
  request.getAttribute("key") 호출

 #session['key'] 또는 #session.key
  session.getAttribute("key") 호출

 #application['key'] 또는 #application.key
  key 값으로 저장된 ServletContext 의 속성값 참조

 #attr['key'] 또는 #attr.key
  Page, Request, Session, Application 순으로 속성 값 검색하여 일치하는 키 값 출력





반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

doc-ver.0.1

1. 서론
 Struts2 프레임워크는, JavaEE 기반의 웹어플리케이션 개발 시에, Model 2 기반의 개발을 쉽게 할 수 있도록 MVC 패턴의 적용을 도와주는 프레임워크이다. 실상 MVC 패턴 적용이라고 하기는 하기만, Struts2 는, View 와 Controller 정도의 분리를 돕는데 주된 기능을 한다.

 자세한건 시간나는대로 문서를 업데이트 해가며 내용을 추가 해 보겠다.

2. Hello Struts2 해보기
 가. 두가지 방식의 Configuration

  Struts2 는 XML 방식, Java SDK 1.5 이상에서 지원하는 Annotation 방식 의 두가지 방식을 통하여 Configuration 을 가능하게 한다. 개념적으로, 아래 그림처럼 가능하다는 얘기이다.


   XML 방식에서 사용되는 XML 예제는 아래와 같다.
<action name="Login" class="manning.Login">    <result>/AccountPage.jsp</result>    <result name="input">/Login.jsp</result></action><action name="Registration" >    <result>/Registration.jsp</result></action><action name="Register" class="manning.Register">    <result>/RegistrationSuccess.jsp</result>    <result name="input">/Registration.jsp</result></action>

   Annotation 방식의 예제 코드는 아래와 같다.
@Results({    @Result(name="input", value="/RegistrationSuccess.jsp" )    @Result(value="/RegistrationSuccess.jsp" )})public class Login implements Action {    public String execute() {        //Business logic for login    }}

 위 예제에 대한 설명은 이후에 자세히 설명하도록 하고, 지금은, XML 과 Annotation 방식으로 Struts2 의 설정이 가능하다는 것만 알고 넘어가자. 어떤것을 쓸것인가는 개발하기 나름이다. 그러나 Struts2 개발진은 Zero-Configuration 을 지향하고 있다. 무수히 많아지는 XML 파일을 관리하기가 너무 번거롭기 때문이다.

 Annotation 방식으로 가게 되면, 한가지 전제가 따라야 할 듯 하다. 바로, 패키지 및 액션명의 네이밍 룰 정의가 일관되고 견고해야 하며, 모두들 이를 확실히 지켜야 한다는 점 이겠다. 만약 액션명에서 패키지명을 유추하기 힘들거나, 반대로, 패키지명에서 액션명을 유추하기 힘들다면, 가독성과 유지보수성이 많이 떨어질 듯 하다.

 나. package
  package 는 상당히 중요하며, 전체적인 struts2 의 Action, result 등의 구조를 파악할 수 있다. 

  namespace 속성
   URL과 맵핑하는데 사용된다. 아래와 같은 struts2 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="chapterTwo" namespace="/chapterTwo" extends="strutsdefault">
		<action name="Name">
			<result>/chapterTwo/NameCollector.jsp
			</result>
		</action>
		<action name="HelloWorld" class="manning.chapterTwo.HelloWorld">
			<result name="SUCCESS">/chapterTwo/HelloWorld.jsp
			</result>
		</action>
	</package>
</struts>

namespace="/chapterTwo" 는, 아래와 같은 URL Mapping 구조로 해석될 수 있다.



-------
  Action 인터페이스 상속
   Action 인터페이스는 상속받아도 되고 안받아도 된다. 상속 받으면, SUCCESS, ERROR, NONE, ERROR, INPUT, LOGIN 등의 미리 정의 된 문자열 상수를 사용할 수 있고, public void execute() 함수정의를 필수로 Override 한다라는 잇점 정도가 있다. 

  ValueStack 과 JavaBean 으로의 Action
 Form 데이터 날라오면, ParameterInterceptor 에서, ValueStack 을 만들고, Action 의 setter method 를 호출하여 값을 설정해준다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

AppFuse 는, 직접 다운로드 받는게 아니라, Maven 을 통해 받아와야 한다.
이를 위해서는 Maven 을 받아서 설치해야 하는데, 받는 김에 Eclipse 용 Maven 플러그인(m2eclipse) 을 설치하려고, 하는데, Install & Update 에서, install.. 하면, equinox 어쩌구 하고 에러가 뜬다.

 이건, 내가 Maven 설치 시에, 옵셔널한 놈들도 설치하려고 해서 그런것이고, AJDT 관련 옵션을 설치하려 해서 그렇다. 에러 없이 진행하려면, AspectJ Development Tool 을 먼저 Eclipse 에 받으면 된다.
 관련 URL 은, http://docs.codehaus.org/display/M2ECLIPSE/Installation+Requirements 에 보면 설명중에 AJDT(Optional) 부분에, Eclipse Update URL 이 나와 있다.
 현재 3.4 용은  http://download.eclipse.org/tools/ajdt/34/update 에서 받으면 된단다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,