728x90
반응형
초보도 쉽게배우는 전자정부프레임워크  

- 6편 : 컨트롤러에서 뷰까지

지난주에 이어

5편에서는 컨트롤러-서비스-DAO를 거쳐 쿼리가 실행되는 과정을 보았습니다. 이번 포스팅에서는 처리결과를 받아 뷰로 전달되는 과정을 살펴보겠습니다.

 

쿼리결과 받아오기

다음과 같은 쿼리를 실행합니다.

SELECT ID, NAME, DESCRIPTION, USE_YN, REG_USER
FROM SAMPLE
WHERE 1=1

 

​EgovSample_Sample_SQL.xml로 돌아가서 보면 처리결과를 egovMap으로 받아옵니다.

 <select id="sampleDAO.selectSampleList_D" parameterClass="searchVO" resultClass="egovMap">

 

egovMap은 ListOrderedMap을 상속받아 구현되며 주요 특징은 key값을 낙타등 표기법으로 바꿔줍니다.

 낙타등표기법

- 시작은 소문자로 시작하며 단어변경 시 첫문자를 대문자로 표기하는 방법. _(언더바)는 삭제함.

 

위의 쿼리에서도 그렇듯이 컬럼id는 다음과같이 단어와 단어사이를 '_'(언더바)로 구분하여 사용합니다. egovMap은 바로 이러한 key값을 낙타등표기법으로 바꿔주는 역할을 합니다.
USE_YN -> useYn

처리된 결과는 DAO에서 Service를 거쳐 Controller에서 받아 ModelMap에 담습니다.

EgovSampleController.java​

List sampleList = sampleService.selectSampleList(searchVO);

model.addAttribute("resultList", sampleList);

 

​그리고 페이지처리를 위한 paginationInfo 역시 model에 담은 뒤 뷰를 리턴해줍니다.

EgovSampleController.java​

 int totCnt = sampleService.selectSampleListTotCnt(searchVO);
 paginationInfo.setTotalRecordCount(totCnt);
 model.addAttribute("paginationInfo", paginationInfo);
    

 //뷰 이름 리턴
 return "/sample/egovSampleList";

 

​그런데 4편 SpringMVC에서 컨트롤러가 ModelAndView를 리턴해준다고 했는데 왜 String을 리턴한걸까요?

@RequestMapping 메서드의 리턴타입을 보도록 하겠습니다.​

 

 

@RequestMapping 메서드의 리턴타입

 리턴타입

설 명 

 ModelAndView

 뷰 정보 및 모델 정보를 담고 있는 ModelAndView 객체, 커맨드 객체 및 @ModelAttribute 어노테이션이 적용된 메서드가 리턴한 데이터, 그리고 ModelMap(또는 Map) 타입의 파라미터 데이터가 뷰에 함께 전달된다.

 Map

 뷰에 전달할 객체 정보를 담고 있는 Map을 리턴한다. 이때 뷰 이름은 요청 URL로 부터 결정된다. 커맨드 객체 및 @ModelAttribute 어노테이션이 적용된 메서드가 리턴한 데이터가 뷰에 함께 전달된다.

 String

 뷰 이름을 리턴한다. 커맨드 객체 및 @ModelAttribute 어노테이션이 적용된 메서드가 리턴한 데이터, 그리고 ModelMap(또는 Map)타입의 파라미터 데이터가 뷰에 전달된다.

 void

 메서드가 직접 응답을 처리하는 경우

(출처 : 웹개발자를 위한 스프링 프로그래밍. 최범균 저)
 
위의 표와같이 String "/sample/egovSampleList" 을 리턴한 경우, ModelMap 파라미터 데이터도 뷰에 전달이 됩니다. 
 
 

처리결과를 보여줄 뷰를 검색하는 ViewResolver

​4장 SpringMVC에서 봤듯이 기본적으로 UrlBasedViewResolver를 사용합니다.
UrlBasedViewResolver는 prefix와 suffix를 사용하여 실제 뷰의 경로를 리턴합니다.

dispatcher-servlet.xml

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
    p:viewClass="org.springframework.web.servlet.view.JstlView"
    p:prefix="/WEB-INF/jsp/egovframework/example/" p:suffix=".jsp"/>

 

​실제 뷰의 전체 경로 :

 

 

 

 

뷰(View) 구현

 egovSampleList.jsp를 보도록 하겠습니다.

중간에 보시면 다음과 같은 코드가 있습니다.

    <c:forEach var="result" items="${resultList}" varStatus="status">
   <tr>
    <td align="center" class="listtd"><c:out value="${status.count}"/></td>
    <td align="center" class="listtd"><a href="javascript:fn_egov_select('<c:out value="${result.id}"/>')"><c:out value="${result.id}"/></a></td>
    <td align="left" class="listtd"><c:out value="${result.name}"/>&nbsp;</td>
    <td align="center" class="listtd"><c:out value="${result.useYn}"/>&nbsp;</td>
    <td align="center" class="listtd"><c:out value="${result.description}"/>&nbsp;</td>
    <td align="center" class="listtd"><c:out value="${result.regUser}"/>&nbsp;</td>
   </tr>
   </c:forEach>

 

 

jsp에서는 위에서 처럼 익스프레션언어(Expression Language)를 사용해서 ModelAndView에 저장된 값에 접근할 수 있습니다. 컨트롤러에서 다음과 같이 ModelMap에 요청에 대한 결과를 담았었습니다.

 model.addAttribute("resultList", sampleList);

 

 

 

마무리

 이렇게해서 2회부터 시작된 클라이언트의 요청이 처리되는 과정을 살펴보았습니다. 좀 더 세부적인 내용들은 다음 포스팅부터 시작할 실제 화면을 구현해보면서 하도록 하겠습니다. 얼마 안되는 과정이지만, 막상 정리하려고 보니, 더 공부해야하는것도 많고 시간도 많이 걸리네요. 정리가 잘 되서 많은 분들이 그만큼 시간을 아끼셨으면 하는 작은 바램입니다~! 다음 포스팅에서 뵙겠습니다.

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,