[Spring 11-1] Spring MVC 만드는 방법

임승현·2023년 2월 21일

Spring

목록 보기
29/46

🌈web.xml 수정

📃web.xml

※ src/main/webapp/WEB-INF 폴더에 있는 web.xml 수정

<servlet>
	<servlet-name>springMvc</servlet-name>
	<!-- Spring Framework의 라이브러리에 의해 제공되는 DispatcherServlet 클래스 사용 - Front Controller 역할 -->
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- init-param : 서블릿 클래스에게 실행에 필요한 값을 제공하기 위한 엘리먼트 -->
	<!-- → contextConfigLocation 이름으로 스프링 컨테이너(WebApplicationContext객체)에게 Spring Bean Configuration File의 경로를 제공 -->
	<!-- → 현재 설정된 Front Controller 역할의 객체에게만 제공한 Spring Bean을 등록하기 위한 Spring Bean Configuration File -->
	<!-- → Spring Bean Configuration File은 엔터 또는 [,] 및 [;]으로 구분하여 여러개 제공 가능 -->
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/spring/springMvc/mvc-context1.xml
			/WEB-INF/spring/springMvc/mvc-context2.xml
		</param-value>
	</init-param>
	<!-- load-on-startup : WAS 프로그램이 시작될 때 서블릿 클래스를 미리 객체로 생성하기 위한 엘리먼트 -->
	<!-- → 클라이언트가 서블릿(Front Controller)를 요청하지 않아도 서블릿 객체를 미리 생성 -->
	<!-- → 엘리먼트 내용으로 설정된 정수값이 작을수록 먼저 서블릿 객체로 생성 -->
	<load-on-startup>0</load-on-startup>
</servlet>
<!--                                                                                           -->
<servlet-mapping>
	<servlet-name>springMvc</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

🌈mvc-context.xml 생성



📃mvc-context1.xml

※ src/main/webapp/WEB-INF/spring 폴더에 springMvc 폴더 생성
※ springMvc 폴더에 mvc-context1.xml 생성

<?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">
	<!-- ================================================================================ -->
	<!-- Spring Framework 라이브러리의 Controller 인터페이스를 상속받은 자식클래스를 Spring Bean으로 등록 -->
	<bean class="xyz.itwill09.spring.ListController" id="listController"/>
	<bean class="xyz.itwill09.spring.ViewController" id="viewController"/>
	<!-- ================================================================================ -->
	<!-- Spring Framework 라이브러리의 SimpleUrlHanderMapping 클래스를 Spring Bean으로 등록 -->
	<!-- SimpleUrlHanderMapping 객체 : 컨트롤러(DispatcherServlet)에게 클라이언트의 요구사항을 전달받아 요청 처리 클래스의 객체(Spring Bean)를 반환하는 기능 제공 -->
	<!-- → mappings 필드에 Map 객체를 저장하여 엔트리(Entry) 추가 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" id="">
		<property name="mappings">
		<!-- 맵키(MapKey)는 클라이언트의 요구사항(String)을 전달하고 맵값(MapValue)은 
			요청 처리 클래스의 Spring Bean에 대한 beanName(String) 전달하여 Map 객체의 엔트리로 추가 - map 엘리먼트 대신 props 엘리먼트 사용 가능 -->
			<props>
				<prop key="/list.do">listController</prop>
				<prop key="/view.do">viewController</prop>
			</props>
		</property>
	</bean>
</beans>

📃mvc-context2.xml

※ springMvc 폴더에 mvc-context2.xml 생성

<?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">
	<!-- ================================================================================ -->
	<!-- Spring Framework 라이브러리의 InternalResourceViewResolver 클래스를 Spring Bean으로 등록 -->
	<!-- InternalResourceViewResolver 객체 : 뷰이름(ViewName)을 전달받아 JSP 문서로 변환하여 반환하는 기능을 제공하는 객체 -->
	<!-- → prefix 필드와 suffix 필드에 JSP 문서로 변환하기 위한 정보를 저장 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- prefix 필드 : 뷰이름 앞부분에 추가될 문자열 - 디렉토리 -->
		<property name="prefix" value="/WEB-INF/mvc/"/>
		<!-- suffix 필드 : 뷰이름 뒷부분에 추가될 문자열 - 확장자 -->
		<property name="suffix" value=".jsp"/>
	</bean>
</beans>

※ src/main/java 폴더에 xyz.itwill09.spring 패키지 생성

🌈VO 클래스 생성(Product.java)

📃Product.java

※ xyz.itwill09.spring 패키지에 Product.java 클래스 생성

package xyz.itwill09.spring;
//
import lombok.AllArgsConstructor;
import lombok.Data;
//
@AllArgsConstructor
@Data
public class Product {
	private int num;
	private String name;
}

🌈모델 역할의 클래스 생성(ListController.java)

📃ListController.java

※ xyz.itwill09.spring 패키지에 ListController.java 클래스 생성

package xyz.itwill09.spring;
//
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
//
//Model 역할을 제공하기 위한 클래스 - 요청 처리 클래스
//→ Spring Framework 라이브러리의 Controller 인터페이스를 상속받아 작성(오버라이드)
//→ 클라이언트가 [/list.do]의 URL 주소로 요청한 경우 컨트롤러에 의해 동작될 요청 처리 클래스
public class ListController implements Controller {
	//요청 처리 메소드 - 클라이언트 요청에 의해 컨트롤러에 자동 호출
	//→ ModelAndView 객체에 응답 관련 정보를 저장하여 반환
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		//ModelAndView 객체 : 처리결과 및 응답에 대한 이동 관련 정보를 저장하기 위한 객체
		ModelAndView modelAndView=new ModelAndView();
		//
		//데이터 처리
		List<Product> productList=new ArrayList<Product>();
		productList.add(new Product(1000, "컴퓨터"));
		productList.add(new Product(2000, "노트북"));
		productList.add(new Product(3000, "핸드폰"));
		//
		//요청에 대한 처리결과를 ModelAndView 객체의 속성값으로 저장
		//ModelAndView.addObject(String attributeName, Object attributeValue)
		//→ ModelAndView 객체에 처리결과를 속성값으로 저장하는 메소드 - Request Scope
		//→ request.setAttribute() 메소드와 유사한 기능 제공
		modelAndView.addObject("productList", productList);
		//
		//응답에 대한 이동 관련 정보(ViewName)을 ModelAndView 객체 필드에 저장
		//ModelAndView.setViewName(String viewName) : 뷰이름(ViewName)을 변경하는 메소드
		//→ 컨트롤러에 의해 뷰이름(ViewName)은 JSP 문서로 변경되어 포워드 이동 - 응답
		modelAndView.setViewName("product_list");
		//
		return modelAndView;
	}
}

🌈모델 역할의 클래스 생성(ViewController.java)

📃ViewController.java

※ xyz.itwill09.spring 패키지에 ViewController.java 클래스 생성

package xyz.itwill09.spring;
//
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
//
//Model 역할을 제공하기 위한 클래스 - 요청 처리 클래스
//→ 클라이언트가 [/view.do]의 URL 주소로 요청한 경우 컨트롤러에 의해 동작될 요청 처리 클래스
public class ViewController implements Controller {
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModelAndView modelAndView=new ModelAndView();
		modelAndView.addObject("product", new Product(4000,"프린트"));
		modelAndView.setViewName("product_view");
		return modelAndView;
	}
}

🌈JSP 문서 생성

📃product_list

※ mvc 폴더에 product_list.jsp 파일 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 회원목록을 제공받아 출력하는 문서 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
	<h1>회원목록</h1>
	<hr>
	<c:forEach var="product" items="${productList }">
		<p>제품번호 = ${product.num }, 이름 = ${product.name }</p>
	</c:forEach>
</body>
</html>

📃product_view

※ mvc 폴더에 product_view.jsp 파일 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 회원정보를 제공받아 출력하는 JSP 문서 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
	<h1>회원정보</h1>
	<hr>
	<p>제품번호 = ${product.num }, 이름 = ${product.name }</p>
</body>
</html>

0개의 댓글