스프링 MVC
스프링은 컨트롤러가 여러개 만들어진다. 종류가 여러개가 될 수 있다.
그 중 FrontController가 클라이언트의 요청에 따라 어느 컨트롤러에 매핑되어야 하는지 전달하는 역할을 한다.
세부 설명은 이전 포스팅을 참고하자 Spring - 개요 & 구성요소 & MVC패턴 https://wiper2019.tistory.com/121?category=786564
Spring MVC의 주요 구성 요소
구성요소 | 설명 |
DispatcherServlet | 클라이언트의 요청을 전달받는다. Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴 한 결과 값을 View에 전달하여 알맞은 응답을 생성하도록 한다. |
HandlerMapping | 클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다. |
Controller | 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려준다. 스트럿츠의 Action과 동일한 역할을 수행한다. |
ViewResolver | Commander의 처리 결과를 보여줄 View를 결정한다. |
View | Commander의 처리 결과를 보여줄 응답을 생성한다. |
① DispatcherServlet(FrontController 구현체)
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<listener>
② ViewResolver : dispatcher-servlet.xml에서 ViewResolver객체 생성
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
MVC 패턴 구현해보기 - AbstractController
1. 컨트롤러 클래스 생성
package com.test; import java.util.Calendar; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class TestController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse arg1) throws Exception { int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); String msg= "";
if(hour>=6 && hour<=8) msg = "아침이다. 일어나!"; else if(hour>8 && hour<=13) msg = "지각!"; else if(hour>13 && hour<=14) msg = "점심시간!"; else if(hour>14 && hour<=18) msg = "오후에요!"; else msg = "퇴근해요!"; request.setAttribute("message",msg); // 경로 /test/view.jsp //항상 경로를 작성할 때 /폴더명/페이지이름.jsp 에서 '/' 와 '.jsp'를 동일하게 작성한다. //그러므로 View Resolver를 통해 prefix, suffix를 사용해서 생략할 수 있도록 설정하였다. return new ModelAndView("test/view");//모델과 뷰를 한꺼번에 전달한다.test라는 폴더에 view.jsp 페이지 } } |
※ 컨트롤러의 종류
컨트롤러 | 설명 |
Controller, AbstractController | 별도 기능을 제공하지 않는 컨트롤러로 요청 파라미터 처리등의 작업을 직접 구현해야 한다. |
AbstractCommandController | 요청 파라미터를 객체에 저장해 주며, 파라미터 값 검증 기능을 제공 한다. |
SimpleFormController | 폼을 출력 하고 폼에 입력한 데이터를 처리할 때 사용된다. |
AbstractWizardFormController | 여러 페이지에 걸쳐서 데이터를 입력하는 경우 입력 폼의 흐름을 제어하고 입력한 데이터를 처리할 때 사용 한다. |
UrlFilenameViewController, ParameterizableViewController | 컨트롤러에서 어떤 기능도 수행하지 않고 단순히 클라이언트의 요청 뷰로 전달할 때 사용 된다. |
MultiActionController | 연관되거나 비슷한 로직을 수행하는 다수의 기능을 하나의 컨트롤러에서 구현할 때 사용된다. |
2. 뷰 페이지 생성
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% request.setCharacterEncoding("UTF-8"); String cp = request.getContextPath(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${message } </body> </html> |
3. 컨트롤러 & 핸들러매핑 생성(BeanNameUrlHandlerMapping)
프론트 컨트롤러와 핸들러매핑을 함께 작성하는 경우도 가능하다. dispatcher-servlet.xml이 하는 역할은 클라이언트의 요청이 오면 요청정보를 가지고 누구한테 보내야하는지 핸들러매핑에게 보낸다. 그 핸들러매핑의 종류는 4가지가 존재한다. dispatcher-servlet에 핸들러를 등록해보자.
BeanNameUrlHandlerMapping : 주소가 들어오면(클라이언트의 요청) 어디로 보내야하는지 다이렉트로 지정해준다. 직접적이다.
<!-- BeanNameUrlHandlerMapping --> <bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean name="/test/msg.action" class="com.test.TestController"></bean> |
※ 핸들러의 종류
Handler | 설명 |
BeanNameUrlHandlerMapping | 요청 URI와 동일한 이름을 가진 Controller 빈을 매핑 한다. |
SimpleUrlHandlerMapping | SimpleUrlHandlerMapping 패턴과 컨트롤러의 이름을 비교 URI가 패턴에 매칭될 때 지정한 컨트롤러를 사용 한다. |
ControllerClassNameHanderMapping | URI와 매칭 되는 클래스 이름을 갖는 빈을 컨트롤러로 사용 |
DefaultAnnotationHanderMapping | DefaultAnnotationHanderMapping @RequestMapping 어노테이션을 어노테이션을 이용하여 요청을 처리할 컨트롤러를 구한다. DefaultAnnotationHanderMapping 클래스는 스프링 2.5 버전에 새롭게 추가된 HandlerMapping 구현 클래스 이다. |
4. 실행 화면
'Dev > Spring' 카테고리의 다른 글
Spring2.5 MVC - Exception & SimpleFormController (0) | 2019.04.05 |
---|---|
Spring2.5 MVC - SimpleUrlHandlerMapping (0) | 2019.04.05 |
Spring2.5/iBatis 셋팅 (0) | 2019.04.05 |
Spring2.5 - 제어의역전,의존성주입 예제 (0) | 2019.03.28 |
Spring2.5 - 개요 & 구성요소 & MVC패턴 (0) | 2019.03.28 |