본문 바로가기

개발/Spring

스프링 MVC(Model - View - Controller)

728x90
반응형
스프링 프레임워크 MVC

 

MVC 란 Model - View - Controller 의 약자로 일반 PC 프로그램 개발에 사용되는 디자인 패턴을 웹 애플리케이션에 도입한 것입니다.
웹 애플리케이션을 화면 부분, 요청 부분, 로직 처리 부분으로 나누어 개발하는 방법이죠.

MVC 의 특징

 

- 각 기능이 분리되어 있어 개발 및 유지보수가 편리합니다.
- 각 기능의 재사용성이 높아집니다.
- 디자이너와 개발자의 작업을 분업화해서 쉽게 개발할 수 있습니다.

스프링은 애플리케이션 개발 시에 많이 사용되는 모델2 기반의 MVC 기능을 제공하므로 편리하게 애플리케이션을 개발할 수 있습니다.

스프링에서 지원하는 MVC 기능 특징

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

 

 

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

 

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

 

 

사용 스프링 클래스

 

클래스 설명
MultiActionController URL 요청명으로 바로 컨트롤러를 지정해서 사용할 수 있습니다.
PropertiesMethodNameResolver URL 요청명으로 컨트롤러의 설정 파일에서 미리 설정된 메서드를 바로 호출해서 사용할 수 있습니다.
InternalResourceViewResolver JSP 나 HTML 파일과 같이 웹 애플리케이션의 내부 자원을 이용해 뷰를 생성하는 기능을 제공합니다. 기본적으로 사용하는 View 클래스이며 prefix 와 suffix 프로퍼티를 이용해 경로를 지정할 수 있습니다.

 

 

구성 파일

파일 설명
web.xml 브라우저에서 *.do 요청 시 스프링의 DsipatcherServlet 클래스가 요청을 받을 수 있게 서블릿 매핑을 합니다.
설정파일.xml 스프링 프레임워크에서 필요한 빈들을 설정합니다.
src/Controller 매핑된 요청에 대해 컨트롤러의 기능을 수행합니다.
view/JSP 요청에 대해 컨트롤러가 브라우저로 전송하는 JSP 입니다.

 

설정 파일 이름은 반드시 web.xml 의 서블릿 매핑 시 사용했던 <servlet-name> 태그 값으로 명시했던 이름으로 시작해야 하고 그렇지 않으면 톰캣 실행 시 오류가 발생합니다.
(ex - member 로 설정을 했었으면 member-servlet.xml 로 지정)

 

 

[ 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>
   </servlet>

   <servlet-mapping>
      <servlet-name>action</servlet-name>
      <url-pattern>*.do</url-pattern>
   </servlet-mapping>
</web-app>

 

 

[ 설정파일.xml ]

 

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
...

	<!-- /test 폴더에서 ModelAndView 인자로 넘어온 뷰이름에 해당되는 JSP 를 선택해 DispatcherServlet 로 보냄 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/test/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<bean id="userUrlMapping"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<!-- URL 요청명이 /test/*.do 로 시작되면 userController 를 요청 -->
				<prop key="/test/*.do">userController</prop>
			</props>
		</property>
	</bean>

	<bean id="userController" class="com.spring.ex02.UserController">
		<!-- 지정한 요청명에 대해서 직접 메서드를 호출 -->    	
		<property name="methodNameResolver">
			<ref local="userMethodNameResolver" />
		</property>
	</bean>

	<bean id="userMethodNameResolver"
		class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
		<property name="mappings">
			<props>
				<!-- /test/login.do 로 요청하면 userController 의 login 메서드를 호출 -->
				<prop key="/test/login.do">login</prop>
			</props>
		</property>
	</bean>

</beans>

 

 

[ Controller ]

 

...
public class UserController extends MultiActionController {
	public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String userID = "";
		String passwd = "";
		ModelAndView mav = new ModelAndView();
		request.setCharacterEncoding("utf-8");
		userID = request.getParameter("userID");
		passwd = request.getParameter("passwd");

		// 로그인 정보를 바인딩
		mav.addObject("userID", userID);
		mav.addObject("passwd", passwd);
		// ModelAndView 객체에 포워딩할 JSP 이름 설정
		mav.setViewName("result");
		return mav;
	}
	
...

 

 

[ JSP ]

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
	<table border="1" width="50%" align="center">

		<tr align="center">
			<td>아이디</td>
			<td>비밀번호</td>
		</tr>
		<tr align="center">
			<td>${userID}</td>
			<td>${passwd}</td>
		</tr>
	</table>
</body>
</html>

 

JSP 에서는 바인딩 된 userID, passwd 의 정보를 브라우저에 출력해줍니다.

 

 

여기까지 임미다.

728x90

'개발 > Spring' 카테고리의 다른 글

메이븐(Maven) 구성요소  (0) 2022.11.17
스프링 @Autowired  (0) 2022.11.16
스프링 애너테이션(Annotation)  (0) 2022.11.16
스프링 트랜잭션(Transaction)  (0) 2022.11.16
스프링 마이바티스 연동  (0) 2022.11.16
마이바티스(Mybatis)  (0) 2022.11.15
스프링 JDBC(Java Database Connectivity)  (0) 2022.11.15
스프링 프레임워크란?  (0) 2022.11.15
스프링 AOP(Aspect-Oriented Programming)  (0) 2022.11.15
스프링 DI(Dependency Injection)  (0) 2022.11.15