Spring/스프링 프레임워크

Spring Framework 스프링 MVC 기능

샤리미 2024. 4. 4. 00:59
728x90
반응형

21.1 스프링 프레임워크 MVC의 특징

스프링 프레임워크는 웹 애플리케이션 개발에 필요한 여러 가지 기능을 미리 만들어서 제공한다. MVC 기능도 그중 하나이다. 스프링에서 제공하는 기능 사용법을 익히고 나면 MVC 기능을 일일이 만들 필요 없이 편리하게 MVC 기능을 사용할 수 있다. 

스프링에서 지원하는 MVC 기능의 특징은 다음과 같다. 

  • 모델2 아키텍처를 지원한다. 
  • 스프링과 다른 모듈과의 연계가 쉽다. 
  • 타일즈(tiles)나 사이트메시(sitemesh) 같은 View 기술과의 연계가 쉽다. 
  • 태그 라이브러리를 통해 message 출력, theme 적용 그리고 입력 폼을 보다 쉽게 구현할 수 있다. 

스프링에서는 애플리케이션 개발 시 많이 사용되는 모델2 기반의 MVC 기능을 제공하므로 편리하게 애플리케이션을 개발할 수 있다. 그리고 타일즈나 사이트메시처럼 화면 관련 프레임워크와도 쉽게 연동할 수 있다. 

아래를 보면 스프링 프레임워크의 MVC 구조를 한눈에 볼 수 있다. 

 

스프링 프레임워크의 MVC 구조도

 

 

스프링 프레임워크 MVC 구성요소

구성 요소 설명
DispatcherServlet 클라이언트의 요청을 전달받아 해당 요청에 대한 컨트롤러를 선택하여 클라이언트의 요청을 전달한다. 또한 컨트롤러가 반환한 값을 View에 전달하여 알맞은 응답을 생성한다. 
HandlerMapping 클라이언트가 요청한 URL을 처리할 컨트롤러를 지정한다. 
Controller 클라이언트의 요청을 처리한 후 그 결과를 DispatcherServlet에 전달한다.
ModelAndView 컨트롤러가 처리한 결과 및 뷰 선택에 필요한 정보를 저장한다. 
ViewResolver 컨트롤러의 처리 결과를 전달할 뷰를 지정한다. 
View 컨트롤러의 처리 결과 화면을 생성한다. 

 

그리고 아래에는 각 MVC 구성요소들이 서로 어떻게 기능을 수행하는지 그 실행과정을 나타내었다. 

 

 

  1.  브라우저가 DispatcherServlet 에 URL 로 접근하여 해당 정보를 요청한다. 
  2. 핸들러 매핑에서 해당 요청에 대해 매핑된 컨트롤러가 있는지 요청한다. 
  3. 매핑된 컨트롤러에 대해 처리를 요청한다. 
  4. 컨트롤러가 클라이언트의 요청을 처리한 결과와 View 이름을 ModelAndView에 저장해서 DispatcherServlet으로 반환한다. 
  5. DispatcherServlet에서는 컨트롤러에서 보내온 View 이름을 ViewResolver로 보내 해당 View를 요청한다. 
  6. ViewResolver는 요청한 View를 보낸다. 
  7. View의 처리 결과를 DispatcherServlet으로 보낸다. 
  8. DispatcherServlet은 최종 결과를 브라우저로 전송한다. 

 

21.2 SimpleUrlController 이용해 스프링 MVC 실습하기

이번에는 브라우저의 요청 URL에 대해 미리 매핑해 놓은 컨트롤러를 호출하여 컨트롤러에서 지정한 JSP를 브라우저로 전송하는 과정을 실습해보자.

 

브라우저에서 요청한 URL(http://locahost:8090/pro21/test/index.do) 에 대해 매핑된 컨트롤러를 선택하고 요청명에 대한 JSP 파일을 브라우저로 전송하는 과정을 아래에 나타내었다. 

 

SimpleleUrlController 실행 과정

 

  1. 브라우저에서 http://localhost:8090/pro21/test/index.do 로 요청한다. 
  2. DispatcherServlet은 요청에 대해 미리 action-servlet.xml 에 매핑된 SimpleUrlController를 요청한다. 
  3. 컨트롤러는 요청에 대해 test 폴더에 있는 index.jsp 를 브라우저로 전송한다. 

서블릿에서는 브라우저 요청 처리 시 서블릿에서 제공하는 메서드를 이용해 요청명을 일일이 가져왔다. 그러나 스프링에서는 브라우저의 요청을 쉽게 가져올 수 있는 여러가지 기능을 제공한다. 그중 SimpleUrlController를 사용해 보겠다. 먼저 스프링을 설정한다. 

 

1. 새 프로젝트 pro21을 만들고 스프링 3.0 라이브러리 파일들을 복하새 /WebContent/WEB-INF/lib 폴더에 붙여넣기!

 

2. com.spring.ex01 패키지와 test 폴더를 만들고 요청 처리에 사용할 파일인 web.xml.actionservlet.xml.SimpleUrlController.java.index.jsp를 각각 생성한다. 

 

지금 실습 파일에 대한 간단한 설명

파일 설명
web.xml 브라우저에서 *.do로 요청 시 스프링의 DispatcherServlet 클래스가 요청을 받을 수 있게 서블릿 매핑을 한다. 
action-servlet.xml 스프링 스페임워크에서 필요한 빈들을 설정한다. 
SimpleUrlController.java 매핑된 요청에 대해 컨트롤러의 기능을 수행한다. 
index.jsp 요청에 대해 컨트롤러가 브라우저로 전송하는 JSP 이다. 

 

3. web.xml 을 다음과 같이 작성한다. 브라우저에서 *.do 로 요청하면 스프링의 DispatcherServlet 클래스가 요청을 받을 수 있게 서블릿 매핑을 설정한다. 또한 <load-on-startup> 태그를 이용해 톰캣 실행 시 미리 스프링의 DispatcherServlet을 메모리에 로드한다. 

 

코드 21-1 pro21/WebContent/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
id="WebApp_ID" version="3.1">
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup><!--값이 1이상이면 톰캣 실행 시 DispatcherServlet을 미리
        메소리에 로드한다. (지정하지 않거나 음수로 지정하면 브라우저에서 요청 시 메모리에 로드한다. )-->
	</servlet>
	
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>

 

4.프로젝트의 WEB-INF 아래 action-servlet.xml을 생성한다. 

5. action-servlet.xml 을 열고 제공하는 action-servlet.xml 에서 <beans> 태그 부분을 복사해 붙여넣는다. 

6. action-servlet.xml 에 필요한 빈들을 다음과 같이 설정한다. SimpleUrlController 클래스에 대해 id가 simpleUrlController인 빈을 생성한다. 스프링의 SimpleUrlHandlerMapping 클래스 빈을 생성하면 요청명 / test/index.do 에 대해 처리하는 컨트롤러를 SimpleUrlController로 설정한다. 

 

코드 21-2 pro21/WebContent/WEB-INF/action-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">


	<bean id="simpleUrlController" class="com.spring.ex01.SimpleUrlController"/> <!--id가 simpleUrlController인 빈을 생성한다. -->
	
    
    <!--SimpleUrlHandleMapping 클래스를 이용해 /test/index.do로 요청시 simpleUrlController를 호출하도록 매핑한다. -->
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/test/index.do">simpleUrlController</prop>
			</props>
		</property>
	</bean>
</beans>

 

CAUTION_ 설정 파일 이름은 반드시 web.xml 의 서블릿 매핑 시 사용했던 <servlet-name> 태그 값인 action으로 시작해야한다(pro21에서는 web.xml에서 태그 값을 action으로 설정했으므로 action1-servlet.xml 로 지정하면 톰캣 실행 시 오류가 발생한다. )

 

7. SimpleUrlContoller 클래스를 다음과 같이 작성한다. 설정 파일의 요청을 처리하기 위해서는 반드시 Controller 인터페이스를 구현해야 하며, SimpleUrlController 클래스로 요청 시 ModelAndView 객체를 생성해 응답할 JSP 이름인 index.jsp 로 설정하여 반환한다. 

코드 21-3 pro21/src/com/spring/ex01/SimpleUrlController.java

package com.spring.ex01;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class SimpleUrlController implements Controller{ // 스프링에서 제공하는 Controller 인터페이스를 반드시 구현한다. 
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{
		return new ModelAndView("index.jsp");//작업을 마친 후 뷰이름을 ModelAndView에 index.jsp로 설정하여 반환한다. 
	}
}

 

8. 컨트롤러에서 ModelAndView 의 인자로 설정된 index.jsp 를 화면에 출력하도록 설정한다. 

 

코드 21-4 pro21/Webcontent/test/index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>spring 테스트입니다. </title>
</head>
<body>
	<h1> index.jsp 파일 입니다. </h1>
	<p>Hello Spring!!
</body>
</html>

 

9. http:localhost:8090/pro21/test/index.do로 요청하여 실행 결과를 확인!

728x90
반응형