본문 바로가기

FrameWork/Spring

[Spring] 스프링 MVC 패턴


Spring MVC

1. 허접하지만 스프링의 MVC2는 못할망정 MVC 를 해보기 위한 프로젝트 하나를 생성합니다.
Eclipse 의 FILE > new > other > WEB > Dynamic Web Project
를 선택합니다.

그럼 아래와 같은 창이 뜨는데.... projec name 에 본인이 쓰고 싶은 이름을 쓰세요.
"난 보통 날짜를 즐겨 씁니다 " ^^;
Target Runtime 에 tomcat 이 잘 잡혔는지 확인합니다




2,  흐름은 ...

1. 클라이언트 ------------> DispacherServlet 에게 URL 처리 요청 을 합니다
                       2. DispacherServlet ----->HandlerMapping 에게 URL과 매핑되는 Controller 검색을 합니다
                       3. DispacherServlet ----->Controller 에게 처리를 요청합니다
4. Controller ----------------->DispacherServlet 에게 ModelAndView 를 리턴해줍니다
                       5. DispacherServlet ----->ViewResolver 에게 컨트롤러의 실행결과를 보여줄 VIEW를 검색합니다
                       6. DispacherServlet ----->VIEW  에게 응답을 출력합니다.


적고 보니 어렵죠?

3. 내가 만들어야 할 파일은 즉 4개 뿐입니다.

VIEWHELLO.JSP,
model Web.XML , dispatcher-servelt.xml
controller HelloController.java

이 4개의 파일을 만들거예요.

1. WEB-INF/web.xml 을 만듭니다 (서블릿 매핑정보를 추가!) 
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
                           
 <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>
*.htm 으로 들어오는 클라이언트의 요청을 DispatcherServlet 으로 처리하도록 설정

2. [서블릿이름]-servlet.xml 파일을 만듬

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="
http://www.springframework.org/schema/p"
    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">
      
  <!-- BeanNameUrlHandlerMapping: 클라이언트의 요청 url과 동일한 이름을 갖는 빈을 컨트롤러로 사용하도록 매핑 -->
  <bean id="beanNameUrlMapping"
      class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
  
  <bean id="HandlerMapping"
      class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
  
  <bean name="/hello.htm"
      class="joke00.controller.HelloController" />
     
  <bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/view/" />
      <property name="suffix" value=".jsp" />
  </bean>
</beans>



3.

package joke00.controller;
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 "안녕하세요";
 }
}



4.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Hello MVC 패턴</title>
</head>
<body>
인사말 : <strong>${greeting}</strong>
<%-- 이런식으로도 가능 String greetingValue = (String)request.getAttribute("greeting"); --%>
</body>
</html>




결과화면


시간없어서 설명은 나중에... ㅠㅠ