1.클라이언트의 요청이 DispatcherServlet에 전달
2.DispatcherServlet은 HandlerMapping을 사용하여 클라이언트의 요청을 처리할 컨트롤러 객체를 구한다
3.DispatcherServlet은 컨트롤러 객체의 handleRequest()메소드를 호출하여 클라이언트 요청 처리
4.컨트롤러의 handleRequest()메소드는 처리결과 정보를 담은 ModleAndView객체를 리턴
5.DispatcherServlet은 viewResolver로부터 응답 결과를 생성할 뷰 객체를 구한다.
6.뷰는 클라이언트에 전송할 응답을 생성

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
 <display-name>
 SpringTest</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>
 
 <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>*.htm
  </url-pattern>
 </servlet-mapping>

 
</web-app>

dispatcher-servlet.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-2.0.xsd">
<!--핸들러-->
<bean id = "handlerMapping"
 class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean name = "/hello.htm"
 class = "kame.spring.chap04.HelloController" />
<bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/view/" />
  <property name="suffix" value=".jsp" />
 </bean>  
</beans>

web.xml에 DispatcherServlet설정과 어플리케이션 컨텍스트 설정
.hml으로 들어오는 클라이언트의 요청을 DispatcherServlet이 처리하도록 설정.
DispatcherServlet은 WEB-INF/에 위치한 [서블릿이름]-servlet.xml파일을 설정 파일로 사용

package kame.spring.chap04;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class HelloController extends AbstractController{
 @Override
 protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception{
  ModelAndView mav = new ModelAndView();
  mav.setViewName("hello");
  mav.addObject("greeting",getGreeting());

  return mav;
 }
 private String getGreeting(){
  int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
  if(hour >= 6 && hour <= 10){
   return "좋은아침";
  }else if(hour > 12 && hour <= 15){
   return "점심해써?";
  }else if(hour >= 18 && hour <= 22){
   return "좋은밥";
  }
  return "안녕하세요";
 }
}

처리결과를 ModelAndView에 담아 DispatcherServlet에 전달. ModelAndView는 컨트롤러의 처리결과에 대한 응답 화면을 생성할 뷰 정보저장.

<bean id = "handlerMapping"
 class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean name = "/hello.htm"
 class = "kame.spring.chap04.HelloController" />


BeanNameUrlHandlerMapping은 URL과 일치하는 이름을 갖는 컨트롤러를 사용. http://localhost/contextpath/hello.htm으로 요청이 들어올 경우, 이름이 "/hello.htm"인 컨트롤러를 이용하여 클라이언트의 요청을 처리한다.

처음해보면서 안되었는데... 톰캣의 server.xml 올바르게 잡고,, 소스 오타수정 모두 하고.. 모두 완벽했었는데 안되었다.
http://localhost/spring/view/hello.htm 주소창에 요렇게 치니까 404에러... 톰캣에서 docBase를 WebContent까지 패스에 잡아주었으므로 WebContent폴더 안에 있는 view폴더부터 쓰는것이 당연하다.. view에 있는 hello.jsp로 직접 접근하니 되었는데...(물론 매핑이 안되서 결과물은 안나왔다..)
안되서... 예제도 설치해서 해봤는데.. 예제는 이상한 에러 쫘악... 별짓다해봤다.. 자바버전도 수정해보고 폴더를 옮겨보기도 했는데...
어쨌든 해결했는데.... 주소창에
http://localhost/spring/hello.htm 로 view폴더를 빼고 치니까 되는거다!!. 프레임워크니까!! 괜히 프레임워크겠어!! spring이 톰캣에 설정한 패스이름이다.... 결론은 폴더고 나발이고간에 xml에 설정해놓으면 패스명/xxx.htm하면 되는거다!!

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>인사</title>
</head>
<body>
인사말 " <strong>${greeting}</strong>
</body>
</html>
신기한것은 스트럿츠2처럼 태그라이브러리를 상단에 정의해주지 않았는데도 요 $ 태그가 먹힌거..(요걸머라고하나..) 왜인지는 모른다..
 
mav.setViewName("hello");

뷰이름을 가지고 viewResolver가 이 이름을 이용하여 알맞은 view객체를 선택한다.
AND