22
Spring MVC KSA-in Project Task #1 Powerpoint Template AUG 21st 2012 Jungsoo Lee

Spring mvc

  • Upload
    ksain

  • View
    24

  • Download
    0

Embed Size (px)

DESCRIPTION

Spring MVC 첫 번째 슬라이드

Citation preview

Page 1: Spring mvc

Spring MVC

KSA-in ProjectTask #1 Powerpoint Template

AUG 21st 2012Jungsoo Lee

Page 2: Spring mvc

Contents00

01. Web Application Framework 개요

02. Spring MVC 구조

03. 간단한 구현 예제

Page 3: Spring mvc

Web Framework 개요

Page 4: Spring mvc

Web Application Framework01

Dynamic 한 Website, Web application, Web service 등을 구현하기 위한 Software

Framework

Web Application Framework 란 ?

Static 과 Dynamic

Webpage?

Library 와 Framework의

차이점 ?

Page 5: Spring mvc

Web Application Framework01

- 초창기의 CGI 방식

동적인 WebPage 를 만들기 위한 노력

Page 6: Spring mvc

Web 개발방식의 진화01

Browser

JSP

JavaBeanData

1 request

4 re-sponse

2

3

Model 1 JSP

동적인 WebPage 를 만들기 위한 노력

Page 7: Spring mvc

Web 개발방식의 진화01

Browser

Controller

View Data

request

response

Model 2 MVC

Model

동적인 WebPage 를 만들기 위한 노력

Page 8: Spring mvc

Push 방식과 Pull 방식01

Push 방식

• Controller 에서 데이터를 처리하고 결과값을 View 영역으로 “ Push” 함

• Struts, Django, Ruby on Rails, Spring MVC 등

Pull 방식

• View 에서 필요한 데이터들을 각 Controller 에서 “ Pull” 해 옴

• Play, Lift, Tapestry, Wicket 등

Page 9: Spring mvc

Spring MVC 의 특징 정리01

Model 2 방식을 따르는 MVC 구조

Front Controller Pattern

• DispatcherServlet 이 Front Controller 역할

Push-based 방식

Request-based

Page 10: Spring mvc

Spring MVC ArchitectureSpring MVC 의 구조

Page 11: Spring mvc

Spring MVC 구조02

Page 12: Spring mvc

Spring MVC 의 request 처리과정02

Request 들어옴 Request 준비과정

HandlerExecution-Chain 결정

HandlerExecution-Chain 실행

에러 발생 ? View 그리기

Request Processing 종료

Request 처리

Error 처리

Page 13: Spring mvc

Spring MVC 를 이용한 개발과정02

1. DispatcherServlet 을 Web.xml 에 설정

2. 요청 URL 과 Controller 간의 Mapping 방식을 결정

3. Controller 의 처리 결과를 어떤 View 로 보여줄지를 결정하는 ViewResolver 설정

4. Controller 작성

5. View 영역 코드 작성

Page 14: Spring mvc

기초적인 Spring MVC 예제

Page 15: Spring mvc

DispatcherServlet 설정 추가03

<?xml version="1.0" ?>

<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>example</servlet-name>

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

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

    </servlet>

    

    <servlet-mapping>

        <servlet-name>example</servlet-name>

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

    </servlet-mapping>

</web-app>

Web.xml 에 다음 설정 추가

Page 16: Spring mvc

DispatcherServlet 설정 추가03

    <servlet>

        <servlet-name>multipleConfig</servlet-name>

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

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>

                /WEB-INF/mvc1.xml,

                /WEB-INF/mvc2.xml

            </param-value>

        </init-param>

        <load-on-startup>3</load-on-startup>

    </servlet>

기본적으로 spring 설정 파일은 WEB-INF/DISPATCHERNAME-servlet.xml

Web.xml 에 다음 설정 추가하여 다른 Config 파일 사용 가능

- 여러 파일 사용 가능

- 동일한 이름의 빈을 지정할 경우 뒤쪽 설정이 우선

Page 17: Spring mvc

Mapping 방식 설정03

대표적인 Mapping 방법

1. BeanNameUrlHandlerMapping- 빈의 name 속성을 url 과 비교해서 매핑 . ANT 패턴 사용 가능 . 디폴트 전략 .

2. ControllerBeanNameUrlHandlerMapping- 빈의 아이디 또는 빈 이름을 이용해서 매핑 .

3. SimpleUrlHandlerMapping- URL 과 컨트롤러 매핑 정보를 각 빈으로 분산하지 않고 SimpleUrlHandelrMapping 의 프로퍼티로 관리

4. ControllerClassNameHandlerMapping- 빈의 클래스 이름을 사용하여 매핑

5. DefaultAnnotationHandlerMapping- @requestMapping 이라는 Annotation 을 컨트롤러 클래스나 메소드에 직접 부여하고 이를 이용해 매핑하는

전략

Xml 의 경우 id 에 들어갈 수 있는 문자열 제약이 있어서 빡치는 경우가 있음

Page 18: Spring mvc

Mapping 설정정보 (BeanNameUrlHandlerMapping 의 경우 )03

<?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">

    

    <bean id="beanNameUrlMapping" 

        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

    

    <bean name="/hello.do"

        class="net.daum.ts.techReport.report2.springmvc.HelloController" />

    <bean name="/login.do"

        class="net.daum.ts.techReport.report2.springmvc.LoginController" />

    <bean id="viewResolver"

        class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/view/" />

        <property name="suffix" value=".jsp" />

    </bean>

</beans>

Page 19: Spring mvc

Mapping 의 몇가지 중요한 공통 property03

1. interceptors- Handler Mapping 중간에 사용할 interceptor

2. defaultHandler- 매칭되는 핸들러를 찾지 못할때 사용하는 기본 핸들러

3. order- 다수의 HandlerMapping 을 사용할 경우 HandlerMapping 간의

우선순의

인터셉터 ?

DispatcherServlet 이 컨트롤러를 호출하기 전과 후에 요청과

응답을 참조하여 가공할 수 있는 일종의 중간 필터

핸 들 러 실 행 체 인 (HandlerExecutionChain) 에 의 해

인터셉터들이 순차적으로 호출 후 컨트롤러 실행

Page 20: Spring mvc

ViewResolver 설정03

핸들러 매핑이 URL 로부터 컨트롤러를 찾아오는 것처럼 뷰 이름으로부터 사용할 뷰

오브젝트를 결정한다

1. InternalResourceViewResolver- JSP 를 사용하여 View 을 생성 . 디폴트 전략 . Prefix 나 surfix property 를 통해 뷰 이름를 조절 가능

2. VelocityViewResolver- Velocity 를 사용하여 View 를 출력할때 사용

- VeloctyConfigurer 설정 필요

이 외에도 FreeMarker, ResourceBundle, XmlView, BeanName 등 여러가지

ViewResolver 가 있음여

Page 21: Spring mvc

VelocityViewResolver 설정파일 예제03

< 앞에 생략함 >

    <bean name="/hello.mul"

        class="net.daum.ts.techReport.report2.springmvc.HelloController" />

    <bean id="velocityConfig" 

        class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">

        <property name="resourceLoaderPath" value="/view_vm/" />

        <property name="velocityProperties">

            <value>

                input.encoding=UTF-8

                output.encoding=UTF-8

            </value>

        </property>

    </bean>

    <bean id="viewResolver"

        class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">

        <property name="contentType" value="text/html; charset=UTF-8" />

        <property name="cache" value="true" />

        <property name="prefix" value="" />

        <property name="suffix" value=".vm" />

    </bean>

</beans>

Page 22: Spring mvc

Controller 및 View 실제 구현03

    protected ModelAndView handle(HttpServletRequest request,

            HttpServletResponse response, Object command, BindException errors)

            throws Exception {

        LoginCommand loginCommand = (LoginCommand) command;

        ModelAndView mav = new ModelAndView("loginSuccess");

        mav.addObject("loginCommand", loginCommand);

        return mav;

    }

Controller 에서 요렇게 정보를 넘겨 주면

JSP 의 경우로그인 정보 : ${loginCommand.id}

<%

    LoginCommand cmd = (LoginCommand) request.getAttribute("loginCommand");

%>

Velocity 의 경우<body>

인사말 : ${greeting}

</body>

View 에서는 요렇게 받아먹음