★ 스프링 MVC

: 스프링 MVC도 컨트롤러를 사용하여 클라이언트의 요청을 처리한다
  스프링에서 DispatcherServlet 이 MVC에서 C(Control) 부분을 처리한다.
  개발자가 처리할 부분은 클라이언트의 요청을 처리할 컨트롤러와 응답화면을 전송할 JSP나 Velocity 템플릿 등 뷰 코드이다
  DispatcherServlet, HandlerMapping, ViewResolver등은 스프링이 기본적으로 제공하는 구현 클래스를 사용한다.

: 스프링 MVC의 구성 요소
1. DispatcherServlet
클라이언트의 요청을 전달 받는다
컨트롤러에게 클라이언트의 요청을 전달하고 Controller가 리턴한 결과값을 View에 전달하여 응답을 생성하도록 한다.

2. HandlerMapping
클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다

3. Controller
클라이언트의 요청을 처리한 뒤 결과를 DispatcherServlet에 알려준다.
스트럿츠의 Action과 동일한 역활을 수행한다.

4. ModelAndView
컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.

5. ViewResolver
컨트롤러의 처리 결과를 생성할 뷰를 결정한다.

6. View
컨트롤러의 처리 결과 화면을 생성한다.
JSP나 Velocity 템플릿 파일등을 뷰로 사용한다.

 

Project : Chapter06 (Dynamic Web Project) - *.jar
          project명에서 우클릭 - Spring Tools - Add Spring Project Nature

          Chapter06_DynamicSpringMaven (Dynamic Web Project) - pom.xml
          project명에서 우클릭 - Spring Tools - Add Spring Project Nature
          project명에서 우클릭 - Configure - Convert to Maven Project

          Chapter06_SpringWebMaven (Spring Project)


[실행]
http://localhost:8080/Chapter06/hello.do

Package : com.controller
Class   : HelloController.java

Folder  : WEB-INF
          web.xml
          dispatcher-servlet.xml

Folder  : view
          hello.jsp


★ web.xml
1. web.xml에 DispathcerServlet 설정을 통해 스프링 설정 파일을 지정합니다.
2. *.do로 들어오는 클라이언트의 요청을 DispatcherServlet이 처리하도록 했다
3. DispatcherServlet은 WEB-INF/서블릿이름-servlet.xml 파일로부터 스프링 설정 정보를 읽어온다.


<servlet>
 <servlet-name>dispatcher</servlet-name>
   <servlet-class>
  org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
</servlet>

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

-------------------------------------------------------------
★ HelloController.java

1. 컨트롤러를 구현하려면 @Controller 어노테이션을 클래스에 적용한다.
2. @RequestMapping 어노테이션을 이용해서 클라이언트의 요청을 처리할 메소드를 지정한다.
3. ModelAndView.setViewName()메소드를 이용해서 컨트롤러의 처리 결과를 보여줄 뷰 이름을 지정한다.


package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {
 
 @RequestMapping("/hello.do")
 public ModelAndView hello(){
  ModelAndView mav = new ModelAndView();
  mav.setViewName("hello");
  mav.addObject("greeting","Hello Spring MVC");
  return mav;
 }

}

-------------------------------------------------------------
★ dispatcher-servlet.xml

1. DispatcherServlet은 스프링 컨테이너에서 컨트롤러 객체를 검색하기 때문에 스프링 설정파일에 컨트롤러를 빈으로 등록해주어야 한다
2. DispatcherServlet은 뷰이름과 매칭되는 뷰 구현체를 찾기 위해 ViewResolver를 사용한다.
3. 스프링 MVC는 JSP, Velocity, FreeMarker등의 뷰 구현 기술과의 연동을 지원하는데, JSP를 뷰 기술로 사용할 경우 InternalResourceViewResolver 구현체를 빈으로 등록해주면 된다.
4. ViewResolver가 /view/뷰이름.jsp를 뷰JSP로 사용한다는 의미이다


<bean id="helloController"
 class="com.controller.HelloController"/>

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

-------------------------------------------------------------

★ /view/hello.jsp

<body>
인사말 : ${greeting }
</body>

-------------------------------------------------------------

[문제1]
Project : Chapter06_1
Package : com.controller
Class   : SumController

Package : com.bean
Class   : SumDTO

Foler   : sum
File    : input.jsp
          result.jsp

스프링 설정 파일
/WEB-INF/dispatcher-servlet.xml → /WEB-INF/dispatcher-config.xml

[실행결과]
http://localhost:8080/Chapter06_1/input.do

input.jsp    --------->  result.jsp

 X : ㅁ                  25 + 36 = xx
 Y : ㅁ

 계산(submit)
 result.do

-------------------------------------------------------------
[문제2]
Project : Chapter06_1
Package : com.controller
Class   : SungJukController

Package : com.bean
Class   : SungJukDTO

Foler   : sungJuk
File    : input.jsp
          result.jsp

스프링 설정 파일
/WEB-INF/mvc-config.xml

[실행결과]
http://localhost:8080/Chapter06_1/sungJuk/input.do

input.jsp    ------------     result.jsp

 이름 : ㅁ                   *** xxx 성적 ***
 국어 : ㅁ               총점 : xxx
 영어 : ㅁ                    평균 : xx.xxx
 수학 : ㅁ

 계산(submit)
 /sungJuk/result.do


** 스프링 설정 파일의 경로와 파일명을 바꿀 수 있고 여러개로 만들 수 있다

/WEB-INF/dispatcher-servlet.xml(스프링 설정 파일)의 이름도 바꾸고 2개로 나누어 본다

/WEB-INF/dispatcher-config.xml - SumController
       ↓
/WEB-INF/mvc-config.xml - SungjukController

 

 

 


 

+ Recent posts