본문 바로가기

자바환경설정

스트럿츠2 의 구조

출처: 네이년 지식in

먼저 스트럿츠2의 기본적인 아키텍처를 대충 설명드리겠습니다.


위 그림은 스트럿츠2에 대한 아키텍처를 이해하기에 아주 좋은 그림입니다.

JSP까지 배우셨다니 request에 대한 설명은 생략하구요. 클라이언트로 부터 요청이 생기면 서버에서 요청 정보를 담은 request가 생성이 되지요. 그 request는 위 그림의 순서대로 움직이게 되는데 web.xml에 설정하셨다면 request는 servlet에 도달하기 이전에 스트럿츠2의 FilterDispatcher를 거치게 되죠. 필터 디스패처를 거치면서 Configuration Manager에 의해 struts.xml의 매핑정보를 토대로 요청에 해당하는 Action클래스를 수행하게 되는데...위 그림에 나와 있듯이 액션 인보케이션이 일어나면 액션이 실행되기 이전에 인터셉터들이 동작하게 됩니다. 인터셉터들도 struts.xml에 정의 하셔야 합니다. Interceptor들 또한 Filter종류이기 때문에 chain에 의해 동작하게 되고 액션클래스가 동작하기 전에 액션의 전후에서 자신들의 역할을 하게 되죠.

질문자님의 질문에 대한 답변은 저 인터셉터들입니다.

request.getParameter("aaa");이런식으로 파라미터들을 가져 왔었는데 스트럿츠2에서는 request도 사용하지 않고 어떻게 파라미터를 가져오느냐...이런 내용이었죠.

그럼 대충 예제를 들어서 어떤식으로 동작하는지 한번 살펴보죠.

aa.jsp---------------

......

<form name="frm" action="./getParam.action">

<input type="text" name="sampleParam">

<input type="submit">

</form>

......

----------------------

위의 jsp페이지의 sampleParam을 가져오는 예제를 볼께요.

먼저 액션을 생성해보면....

package sample;

public TestAction{

private String sampleParam; //앞 페이지에서 가져오고자 하는 파라미터 이름과 일치해야 합니다.

private String testParam;

public void setSampleParam(String sampleParam){

this.sampleParam = sampleParam;

}

//위 메서드는 앞의 jsp페이지의 파라미터값을 받기 위해 필요한 메서드 입니다.

public String execute() throws Exception{

testParam = sampleParam;

return "success";

}

// 참고 : 세터와 게터는 빈즈규약에 맞춰서 생성해 주셔야 파라미터 인터셉터가 인식하게 됩니다.

public String getTestParam(){

return testParam;

}

}

결과 페이지 입니다.

---result.jsp---------

......

<input type="text" value='<s:property value="testParam"/>'>

......

--------------------

위 요청 페이지부터 액션을 거쳐서 결과 페이지까지 갈 수 있도록 struts.xml을 설정해보죠.

struts.xml-------------

......

<action name="getParam" class="sample.TestAction">

<interceptor-ref name="params"/>

<result>/result.jsp</result>

</action>

......

----------------------

위 xml설정 보시면 중간에 파라미터 인터셉터를 끼워 넣은것을 보실 수 있을꺼에요. 저 인터셉터는 윗쪽의 아키텍처에 나와 있듯이 액션의 전/후에서 동작하는 것을 볼 수 있는데...제일 먼저 요청이 일어나면 파라미터 인터셉터는 jsp페이지로 부터 sampleParam이라는 파라미터로 부터 값을 받아 오고 다음으로 동작할 액션의 setter메서드를 통해 그 값을 입력해주고 됩니다.

그리고 액션클래스가 동작할때 쯤에는 이미 sampleParam에는 값이 들어 와 있는 상태죠.

그리고 액션의 동작이 완료 되고 success를 리턴하게 되면 액션은 종료하게 되고 파라미터인터셉터가 후처리에서 겟메서드를 통해testParam의 값을 받아와서 result.jsp페이지에 그값을 전달해주게 되는 것입니다.

스트럿츠2는 이렇게 인터셉터들이 움직이면서 각종 기능을 원활히 수행 할 수 있도록 해 줍니다.

파일업/다운로드를 할 수 있도록 해주는 인터셉터, 에러를 잡아주는 인터셉터와 유효성을 체크하는 인터셉터등 struts2는 많은 인터셉터들을 제공해줍니다. 스트럿츠2의 동작 메커니즘은 간단하기 때문에 익히시고 나면, 인터셉터를 잘 다룰 수 있게되면 스트럿츠2를 이용해 많은 기능을 구현하실수 있게 될꺼에요.

저두 지금 참고 자료가 없어 머리속에 있는 내용으로 답변하여 많이 미흡하리라 생각합니다. 혹시 질문있으시면 네이버 쪽지로 질문 보내셔도 답변해 드릴께요.