스프링 프레임워크 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 의 정보를 브라우저에 출력해줍니다.
여기까지 임미다.
'개발 > 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 |