[spring] 스프링 MVC 인터페이스 구현 클래스

2020. 6. 10. 17:20 Spring Framework/Spring Core

스프링 MVC 인터페이스 구현 클래스


스프링 MVC를 이용하면, 웹 어플리케이션에서 모델과 뷰, 컨트롤러 사이에 있는 의존관계를 의존 관계 주입 컨테이너인 스프링에서 관리하게 된다.

스프링 MVC는 org.springframework.web 패키지와 org.springframework.servlet.패키지에 포함된 클래스를 사용한다.


1. HandlerMapping 인터페이스 구현 클래스

(1) org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

웹 요청 URL과 스프링 설정 파일에 정의한 컨트롤러의 name 속성을 맵핑시켜 컨트롤러를 찾는다. 스프링 설정 파일에  HandlerMapping을 전혀 정의하지 않을 때의 기본 클래스

BeanNameUrlHandlerMapping 클래스는 스프링 설정 파일에 컨트롤러를 정의하면서 지정한 name 속성의 값과 웹 요청 URL을 맵핑하는 HandlerMapping 구현 클래스이다.

<bean id="indexController" name="/index.html" class="controller.IndexController"

p:shopService-ref="shopService">

</bean>

BeanNameUrlHandlerMapping 클래스는 기본인 HandlerMapping 구현 클래스이기 때문에 스프링 설정 파일에 정의하지 않아도 된다.

Controller 클래스의 name 속성에 지정한 값을 그대로 경로로 사용한다. 다음 웹 요청 URL을 사용할 때만 IndexController 클래스가 호출된다.

http://localhos:8080/shopping3-1/index.html


(2) org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

웹 요청 URL과 컨트롤러의 맵핑을 일괄 정의한다. 스프링 설정 파일에 컨트롤러의 정의가 분산되는 것을 방지한다.

스프링 MVC에서는, 어떤 URL에 요청이 들어오면 어느 컨트롤러가 처리할지를 컨트롤러와 URL의 맵핑으로 연관 짓는데, SimpleUrlHandlerMapping 클래스를 사용하면 그 맵핑을 설정 파일 한 곳에 모아 작성할 수 있다.

따라서, 스프링 MVC는 컨트롤러 클래스와 URL의 맵핑을 한곳에서 관리하기 위한 SimpleUrlHandlerMapping 클래스를 제공한다.

<!-- HandlerMapping -->

<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings">

<value>

/index.html=indexController

/detail.html=detailController

</value>

</property>

</bean>


<!-- Controller -->

<bean id="indexController" class="controller.IndexController" p:shopService-ref="shopService"></bean>


<bean id="detailController" class="controller.DetailController"

p:shopService-ref="shopService"> 

</bean>

SimpleUrlHanlerMapping 클래스에는 Properties 타입 maapings 프로퍼티가 있다. 이 mapping 프로퍼티에 웹 요청 URL과 컨트롤러를 지정한다. 


(3) org.springframework.web.servlet.handler.ClassNameHandlerMapping

컨트롤러에 어노테이션을 부여해서 웹 요청 URL과의 관련을 정의한다.


(4) org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping

ControllerClassNameHandlerMapping 클래스는 컨트롤러의 클래스 이름에서 URL을 추출한다. 클래스 이름에서 'Controller'를 뺀 나머지를 모두 소문자로 바꾼 문자열이 URL이 된다.

ex.) IndexController : /index*


2. ViewResolver 인터페이스 구현

(1) org.springframework.web.servlet.view.InternalResolverViewResolver

WEB-INF 폴더 안에 있는 뷰 자원을 해결한다. 스프링 설정 파일에 ViewResolver를 전혀 정의하지 않을 때의 기본 클래스이다.

InternalResolverViewResolver 클래스는 컨트롤러가 반환한 뷰 정보를 컨텍스트 상의 경로로 변화시켜 처리하는 클래스이다.

스프링 MVC는 기본 ViewResolver인 InternalResolverViewResolver를 암묵적으로 사용한다.

하지만 뷰 정보에 prefix 프로퍼티나 suffix 프로퍼티를 추가하거나, 뷰의 구현 클래스를 지정할 수 있다.(이를 이용하면 프로그램에 직접 경로를 기술하지 않고, 이동할 뷰 파일을 배치하는 규칙에 유연하게 대응할 수 있다.)

<bean id="internalResourceViewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="viewClass">

<value>org.springframework.web.servlet.view.JstlView</value>

</property>

<property name="prefix">

<value>/WEB-INF/jsp/</value>

</property>

<property name="suffix">

<value>.jsp</value>

</property>

</bean>


(2) org.springframework.web.servlet.view.ResourceBundleViewResolver

프로퍼티 파일에서 뷰 이름과 그 실체인 뷰를 관련 짓는다. 프로퍼티의 파일은 클래스패스 상에 배치한다.

ResourceBundleViewResolver 클래스는 View 인터페이스를 구현하는 클래스와, 이동할 뷰의 지정과 뷰 이름의 맵핑을 프로퍼티 파일로 관리한다.

InternalResolverViewResolver 클래스는 prefix, suffix를 지정해서 이동할 뷰 이름을 간략하게 할 수 있지만, 실제 뷰 이름을 변경하면 관련된 컨트롤러나 설정 파일도 수정해야 한다.

하지만, ResourceBundleViewResolver 클래스에서는 컨트롤러에서 지정한 것은 프로퍼티 파일에 정의된 뷰 이름이고, 뷰 이름은 설제 뷰 파일 이름이 아닌 임의의 이름을 붙일 수 있다.

때문에 뷰 파일 이름을 변경하더라도, 뷰 이름을 변경할 필요가 없고, 프로퍼티 파일 맵핑 내용을 수정할 뿐이다. 컨트롤러를 수정할 필요도 없다.

ResourceBundleViewResolver 클래스에서 사용하는 프로퍼티 파일 이름은 설정 파일의 basename 프로퍼티에 지정한다. 

<!-- ViewResolver -->

<bean id="resourceBundleViewResolver"

class="org.springframework.web.servlet.view.ResourceBundleViewResolver">

<property name="basename">

<value>views</value>

</property>

</bean>

basename 프로퍼티에 'views'라고 지정하고 있으므로, 스프링 MVC는 확장자 '.properties'를 추가해서 'views.properties'를 참조한다.

#userEntry View

userEntry.(class)=org.springframework.web.servlet.view.JstlView

userEntry.url=WEB-INF/jsp/userEntry.jsp

프로퍼티 파일에는, '뷰 이름.(class)'를 키로 해서 값에 View 인터페이스를 구현하는 클래스를, '뷰이름.url'을 키로 해서 값에 이동할 뷰 파일을 지정한다. 뷰 이름은 임의로 정할 수 있다.


(3) org.springframework.web.servlet.view.velocity.VelocityViewResolver

벨로시티 템플릿으로 만든 뷰를 해결한다.


3. View 인터페이스 구현

(1) org.springframework.web.servlet.view.internalResourceView

JSP 등 자원용 뷰, 요청 속성에 모델을 지정하고, RequestDispather클래스를 참조해서 지정된 뷰에 전달한다.


(2) org.springframework.web.servlet.view.JstlView

JSTL를 사용한 페이지용 뷰, InternalResourceView 클래스의 서브 클래스, 스프링의 메시지 자원 파일을 JSTL 포맷 태그에서 참조할 수 있게 된다.

JstlView 클래스는 JSTL을 사용해서 JSP를 만드는 것을 지원하는 클래스이며, View 인터페이스를 구현하고 있다. JstlView 클래스를 사용하면, JSTL 포맷 태그에서 스프링의 메시지 자원에 접근할 수 있다.

JstlView 클래스는 앞에서 사용한 InternalReaourceView 클래스의 서브 클래스이다. 


(3) org.springframework.web.servlet.view.velocity.VelocityView

벨로시티 템플릿용 뷰


org.springframework.web.servlet.view.json.MappingJacksonJsonView

JSON 형식으로 출력하기 위한 뷰, JSON으로의 변환 라이브러리로서 Jackson 라이브러리가 필요



출처: https://devbox.tistory.com/entry/spring-스프링-MVC-인터페이스-구현-클래스?category=574587 [장인개발자를 꿈꾸는 :: 기록하는 공간]

'Spring Framework > Spring Core' 카테고리의 다른 글

[Spring] 외부 설정 프로퍼티  (0) 2020.07.01
[Spring] iBatis 2  (0) 2020.07.01
[Spring] iBatis 1  (0) 2020.06.10
[Spring] web.xml 기본 설정  (0) 2020.06.10
[Spring] 스프링 MVC 패턴 개요  (0) 2020.06.10
[Spring] AOP 용어 설명  (0) 2020.06.10
[Spring] 의존관계 주입  (0) 2020.06.10
response.sendRedirect() 사용시 주의사항  (0) 2019.01.08