13.11. Convention over configuration 3
마지막으로 살펴볼 CoC는 ModelAndView 객체의 View에 해당하는 논리적인 View의 이름에 관련된 것입니다.
요청 -> view 이름 :: DefaultRequestToViewNameTranslator
앞에서 살펴봤던 예제 코드를 다시 살펴보겠습니다.
public ModelAndView list(HttpServletRequest request, HttpServletResponse response){
return new ModelAndView("issue/list")
.addObject(issueService.getAll());
}
return new ModelAndView("issue/list")
.addObject(issueService.getAll());
}
여기서 논리적인 뷰의 이름으로 issue/list 를 넘겨주고 있습니다. 이 이름은 다음과 같은 ViewReslover에 의해 WEB-INF/jsp/issue/list.jsp 를 랜더링 하게 됩니다.
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
DefaultRequestToViewNameTranslator 를 사용하면 요청을 바탕으로 논리적인 View 이름을 생성하여 ViewResolver에 넘겨주게 됩니다. 특히나 이 클래스는 Spring의 DispatcherServlet 이 기본으로 가지고 있기 때문에 명시적으로 선언하지 않아도 됩니다.
샘플
http://localhost:8080/gamecast/display.html -> display
http://localhost:8080/gamecast/displayShoppingCart.html -> displayShoppingCart
http://localhost:8080/gamecast/admin/index.html -> admin/index
http://localhost:8080/gamecast/display.html -> display
http://localhost:8080/gamecast/displayShoppingCart.html -> displayShoppingCart
http://localhost:8080/gamecast/admin/index.html -> admin/index
위의 ModelAndView 코드를 다음과 같이 수정할 수 있습니다.
public ModelAndView list(HttpServletRequest request, HttpServletResponse response){
return new ModelAndView()
.addObject(issueService.getAll());
}
return new ModelAndView()
.addObject(issueService.getAll());
}
이렇게 보니까 ModelAndView 라는 이름이 어색하지 않게 보이네요. :)