📃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-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 패키지 생성
📃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
※ 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
※ 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; } }
📃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>