Joslynn의 하루

MSA Full-Stack 개발자 양성 과정 - Spring MVC_221107 본문

MSA Full-Stack 개발자 양성과정/Spring

MSA Full-Stack 개발자 양성 과정 - Spring MVC_221107

Joslynn 2022. 11. 7. 12:43

 

Spring 3.x MVC

: 2.x에서는 특정 Conroller를 상속 하거나 implements 해야 하나 3.x 에서는 POJO 코딩 방식이 가능

: 2.x에서는 Controller마다 클래스가 필요하여 많은 컨트롤러 클래스 가 필요하고 설정문서가 길어 졌으나 3.x에서는 클래스 하나에 메소드로 사용자 요청 처리가 가능

: 3.X에서 Controller부분이 많이 변했으며 MVC의 어노테이션을 권장

: org.springframework.web.servlet.mvc 안의 Abstractcontroller를 제외한 대부분이 Deprecated 되었음

 


Spring MVC의 핵심 Componet

 

 

 

 

Spring MVC 컴포넌트간의 관계와 흐름

: viewResolver - 전달된 viewName정보를 통해 어떤 view(ex> json, jsp, tiles...)를 실행해야 하는지 정보 찾아줌

  → InternalResourceViewResolver 등록

  → prepix(경로), suffix(확장자)를 통해 하나의 view를 만들어냄

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>MyFactoryFrameWork Test</h1>
	<h3>
		<a href="insert.do?key=insert">등록하기</a><p>
		<a href="select.do?key=select">검색하기</a><p>
		<a href="update.do?key=update">수정하기</a><p>
		<a href="delete.do?key=delete">삭제하기</a><p>
	</h3>
</body>
</html>

 

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">
	<display-name>step08_MyFramework</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>

	<!-- 진입점 FrontController 역할 등록 -->
	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

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

 

dispatcher-servlet.xml 문서

: spring의 DispatcherServlet이 등록되면, 자동으로 springBean 설정 문서를 로딩
기본 위치와 이름은 /WEB-INF/서블릿명-servlet.xml
: springBean 설정문서가 로딩되면, SpringContainer가 생성되면서 필요한 객체를 사전 초기화 및 주입

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	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.xsd">

	<!-- 1. 스프링에서 제공하는 빈(컴포넌트)을 설정하는/등록하는 메타데이타 
         2. 내가 작성한(User Definition Component) 컴포넌트도 여기에 등록 
    -->
	<!-- HandlerMapping을 등록 -->
	<bean id="handlerMapping"
		class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

	<!-- viewResolver 등록 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<bean name="/insert.do" class="kosta.mvc.controller.InsertController" />
	<bean name="/select.do" class="kosta.mvc.controller.SelectController" />
	<bean name="/update.do" class="kosta.mvc.controller.UpdateController" />
	<bean name="/delete.do" class="kosta.mvc.controller.DeleteController" />
</beans>

 

SelectController.java 예시)

import java.io.IOException;
import javax.servlet.ServletException;
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 SelectController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("SelectController 호출");

		// 뷰쪽에 전달될 정보
		// request.setAttribute("message", "select결과");

		ModelAndView mv = new ModelAndView();

		// 뷰쪽에 전달될 정보
		mv.addObject("message", "select결과"); // 뷰에서 ${message}로 접근
		mv.setViewName("selectResult"); // forward 방식 이동

		return mv;
	}

}

 

 


Annotation 방식

Controller

 

 

 

 

Comments