• Spring MVC 구성 주요 컴포턴트

* DispatcherServlet 

- Front Controller : 모든 요청을 최초로 받아들이는 역할

* Controller (요청을 실제로 처리하는 역할)

- 클라이언트 요청 처리를 수행하는 Controller

* HandlerMapping  (어떤 요청 컨트롤러가 처리할지 결정)

- 클라이언트의 요청을 처리한 Controller를 찾는 작업 처리

* View

- 응답하는 로직을 처리

* ViewReslover

 - 응답할 View를 찾는 작업을 처리

* ModelAndView (응답에 사용할 데이터와 페이지 정보 집합)

- 응답할 View와 View에게 전달할 값을 저장하는 용도의 객체 



• 요청 처리 순서

①DispatcherServlet이 요청을 수신

• 단일 Front controller servlet

• 요청을 수신하여 처리를 다른 컴포넌트에 위임

• 어느 컨트롤러에 요청을 전송할지 결정


②DispatcherServlet은 HandlerMapping에 어느 컨트롤러를 사용할 것인지 문의


③DispatcherServlet은 요청을 컨트롤러에게 전송하고 컨트롤러는 요청을 처리한 후 결과 리턴

• 비즈니스 로직 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 뷰에서 사용됨


④ModelAndView를 생성하여 DispatcherServlet에 리턴


⑤ModelAndView 정보를 바탕으로 바탕으로ViewResolver 에게 View를 요청


⑥View는 결과정보를 사용하여 화면을 표현함.


1. DispatcherServlet을 web.xml에 서블릿으로 등록

2. DispatcherServlet이 사용할 스프링 설정파일을 생성

3. 2의 설정파일에 HandlerMapping, Controller, ViewResolver들을 빈(bean) 객체로 등록



pom.xml


<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>                                                   

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

</dependencies>



dispatcher-servlet.xml

<bean id="handlerMappingclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />


<bean class="controller.WhatTimeController" name="/whatTime.do"></bean>



WhatTimeController.java


package controller;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;


public class WhatTimeController implements Controller{


@Override

public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {

// TODO Auto-generated method stub

String inTime  = new java.text.SimpleDateFormat("HHmmss").format(new java.util.Date());

ModelAndView mav = new ModelAndView();

mav.addObject("msg",inTime);

mav.setViewName("jsp/whatTime.jsp");

return mav;

}

}


web.xml

<servlet>

<servlet-name>dispatcher</servlet-name>

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

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>



jsp/whatTime.jsp

<body>

${msg }<br>

현재시간이라능~~

</body>





ViewResolver


1. 디펜더시 등록


<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

</dependencies>



2. web.xml

<servlet>

<servlet-name>dispatcher</servlet-name>

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

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>



3.dispatcher-servlet.xml

<context:component-scan base-package="controller"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>


4.controller/MyController.java

@Controller //@Component의 아들로써 빈으로 등록하게함

//Request를 받아 처리하는 컨트롤러로써 인식

public class MyController {

@RequestMapping("hello.do")

public ModelAndView hello(){

ModelAndView mav = new ModelAndView();

mav.addObject("msg","Hello World");

mav.setViewName("hello");

return mav;

}

@RequestMapping("whatTime.do")

public ModelAndView whatTime(){

ModelAndView mav = new ModelAndView();

mav.addObject("time",new Date());

mav.setViewName("whatTime");

return mav;

}

}



5. hello.jsp // whatTime.jsp 작성


<body>

${msg }

</body>


<body>

${time }

</body>






' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day64  (0) 2016.06.20
Day63 Spring-member  (0) 2016.06.17
Day61  (0) 2016.06.15
Day60 Spring-AOP  (0) 2016.06.14
Day59 Spring-AOP  (0) 2016.06.13

MVC 패턴의 동작 원리


커맨드 패턴(Command pattern)이란 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다.

커맨드 패턴에는 명령(command), 수신자(receiver), 발동자(invoker), 클라이언트(client)의 네개의 용어가 항상 따른다. 커맨드 객체는 수신자 객체를 가지고 있으며, 수신자의 메서드를 호출하고, 이에 수신자는 자신에게 정의된 메서드를 수행한다. 커맨드 객체는 별도로 발동자 객체에 전달되어 명령을 발동하게 한다. 발동자 객체는 필요에 따라 명령 발동에 대한 기록을 남길 수 있다. 한 발동자 객체에 다수의 커맨드 객체가 전달될 수 있다. 클라이언트 객체는 발동자 객체와 하나 이상의 커맨드 객체를 보유한다. 클라이언트 객체는 어느 시점에서 어떤 명령을 수행할지를 결정한다. 명령을 수행하려면, 클라이언트 객체는 발동자 객체로 커맨드 객체를 전달한다.




Action(interface)            [[서블릿은.. 요청이 온 uri를 ActionFactory 객체의 getAction에 넣고 리턴 되는 객체의 execute()를 단지 실행 ]]

-execute()


BoardListAction (Action구현체)

-execute()를 구현 -> 게시물리스트를 보기 위해 어떤 로직을 처리하고 어떤 데이터를 가지고 어디로 가야 할지를 구현


BoardViewAction (Action구현체)

-execute()를 구현 -> 게시물 상세보기를 위해서 어떤 로직을 처리하고 어떤 데이터를 가지고 어디로 가야할지를 구현


ActionFactory

-getAction(String command) -> command에 적합한 Action구현 클래스 객체를 만들어주는 아이



' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day49 Spring Framework  (0) 2016.05.26
Day48 DB / Spring Framwork  (0) 2016.05.25
Day46 자바스크립트  (0) 2016.05.24
Day45 데이터베이스와 JDBC  (0) 2016.05.20
Day44 JSTL  (0) 2016.05.19

+ Recent posts