환경 : Struts2 + Spring + Sitemesh 등

기존 개발된 환경에서 Source 는 그대로 유지하면서 MVC Action 단 Result View를 XML, JSON 등의 형태로 받고 싶었다.

아래 아키텍처를 보고 고민하던 중 Result 단을 좀 꺽으면 될듯 싶어 작업해 보았다.

우선 Default Result 인 org.apache.struts2.dispatcher.ServletDispatcherResult 를 상속받아서 doExecute 함수를 재정의 해서 호출확장자가 .action 일때는 기존과 그대로 처리 하고, action.xml, action.json 일때는 request.getAttributeNames() 배열에 있는 데이터를 xml, json 문자열로 만들어서 response.getWriter() 이용해서 출력하면 되겠네요.
(해당 정보를 파라미터로 해도 될듯하고, Request Header 정보를 활용해도 되겠습니닷.)


신경써야 할 점은 getAttribute 배열에 들어있는 불필요한 데이터는 무시합니다.
또한 Struts2 가 POJO 기반이여서 Action 단의 데이터들도 뽑아와야 하는데 파마리터 ActionInvocation 객체에 getAction() 함수를 통해서 얻을 수 있습니다.
(getAttribute에 "struts.valueStack" 에 OgnlValueStack 객체에도 Action  정보가 담겨 있습니다. OgnlValueStack 는 배열로서 해당 Action 객체 일때 필요한 getter 메소드 호출해서 사용하면 되겠습니다.  ActionInvocation  에서 뽑아 올 경우 getAttributeNames() 이용 시  "struts.valueStack" 정보는 제외 시켜야 합니다.)


필요에 따라 다른 ResultType 들도 수정하시면 되겠습니다.

수정 하시고, struts 설정파일 package 하위 result-type 에 등록하시면 되겠습니다.

또한 super.doExceute() 함수에 try ~ catch 거시면 JSP Runtime Exception 에 대한 처리도 할 수 있겠네요.


JSON, XML 변환은 아래 package를 사용했습니다.
ezmorph-1.0.4.jar
json-lib-2.2.1-jdk15.jar
xom-1.1.jar
* 위 jar 최신버전으로 하면 오류나네요...
* 또한 XML Element Name이 숫자로 생성되면 파싱 오류납니다.

 



+ Recent posts