Uploaded on

Spring MVC 첫 번째 슬라이드

Spring MVC 첫 번째 슬라이드

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,113
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
29
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Spring MVC KSA-in Project AUG 21st 2012 Task #1 Powerpoint Template Jungsoo Lee
  • 2. 00 Contents 01. Web Application Framework 개요 02. Spring MVC 구조 03. 간단한 구현 예제
  • 3. Web Framework 개요
  • 4. 01 Web Application Framework Web Application Framework란? Dynamic한 Website, Web application, Web service등을 구현하기 위한 Software Framework Static과 Dynamic Library와 Framework의 Webpage? 차이점?
  • 5. 01 Web Application Framework 동적인 WebPage를 만들기 위한 노력 - 초창기의 CGI 방식
  • 6. 01 Web 개발방식의 진화 동적인 WebPage를 만들기 위한 노력 Model 1 JSP 1 request 4 response JSP Browser 2 3 Data JavaBean
  • 7. 01 Web 개발방식의 진화 동적인 WebPage를 만들기 위한 노력 Model 2 MVC request Controller Browser response View Model Data
  • 8. 01 Push 방식과 Pull 방식 Push 방식 • Controller에서 데이터를 처리하고 결과값을 View 영역으로 “Push” 함 • Struts, Django, Ruby on Rails, Spring MVC 등 Pull 방식 • View에서 필요한 데이터들을 각 Controller에서 “Pull” 해 옴 • Play, Lift, Tapestry, Wicket 등
  • 9. 01 Spring MVC의 특징 정리 Model 2 방식을 따르는 MVC 구조 Front Controller Pattern • DispatcherServlet이 Front Controller 역할 Push-based 방식 Request-based
  • 10. Spring MVC Architecture Spring MVC의 구조
  • 11. 02 Spring MVC 구조
  • 12. 02 Spring MVC 의 request 처리과정 Request 들어옴 Request 준비과정 Request 처리 HandlerExecutionChain 결정 HandlerExecutionChain Request Processing 실행 종료 에러 발생? View 그리기 Error 처리
  • 13. 02 Spring MVC 를 이용한 개발과정 1. DispatcherServlet 을 Web.xml에 설정 2. 요청 URL 과 Controller 갂의 Mapping방식을 결정 3. Controller의 처리 결과를 어떤 View로 보여줄지를 결정하는 ViewResolver 설정 4. Controller 작성 5. View 영역 코드 작성
  • 14. 기초적인 Spring MVC 예제
  • 15. 03 DispatcherServlet 설정 추가 Web.xml에 다음 설정 추가 <?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>
  • 16. 03 DispatcherServlet 설정 추가 기본적으로 spring 설정 파일은 WEB-INF/DISPATCHERNAME-servlet.xml Web.xml에 다음 설정 추가하여 다른 Config 파일 사용 가능 - 여러 파일 사용 가능 - 동일한 이름의 빈을 지정할 경우 뒤쪽 설정이 우선 <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>
  • 17. 03 Mapping 방식 설정 대표적인 Mapping 방법 1. BeanNameUrlHandlerMapping - 빈의 name 속성을 url 과 비교해서 매핑. ANT 패턴 사용 가능. 디폴트 전략. 2. ControllerBeanNameUrlHandlerMapping - 빈의 아이디 또는 빈 이름을 이용해서 매핑. 3. SimpleUrlHandlerMapping - URL과 컨트롤러 매핑 정보를 각 빈으로 분산하지 않고 SimpleUrlHandelrMapping의 프로퍼티로 관리 4. ControllerClassNameHandlerMapping - 빈의 클래스 이름을 사용하여 매핑 5. DefaultAnnotationHandlerMapping - @requestMapping 이라는 Annotation을 컨트롤러 클래스나 메소드에 직접 부여하고 이를 이용해 매핑하는 전략 Xml의 경우 id에 들어갈 수 있는 문자열 제약이 있어서 빡치는 경우가 있음
  • 18. 03 Mapping 설정정보(BeanNameUrlHandlerMapping의 경우) <?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>
  • 19. 03 Mapping 의 몇가지 중요한 공통 property 1. interceptors - Handler Mapping 중갂에 사용할 interceptor 2. defaultHandler - 매칭되는 핸들러를 찾지 못할때 사용하는 기본 핸들러 3. order - 다수의 HandlerMapping을 사용할 경우 HandlerMapping 갂의 우선순의 인터셉터? DispatcherServlet이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참 조하여 가공할 수 있는 일종의 중갂 필터 핸들러 실행 체인(HandlerExecutionChain)에 의해 인터셉터들이 순 차적으로 호출 후 컨트롤러 실행
  • 20. 03 ViewResolver 설정 핸들러 매핑이 URL로부터 컨트롤러를 찾아오는 것처럼 뷰 이름으로부터 사용할 뷰 오브젝트를 결정한다 1. InternalResourceViewResolver - JSP를 사용하여 View을 생성. 디폴트 전략. Prefix나 surfix property를 통해 뷰 이름를 조절 가능 2. VelocityViewResolver - Velocity를 사용하여 View를 출력할때 사용 - VeloctyConfigurer 설정 필요 이 외에도 FreeMarker, ResourceBundle, XmlView, BeanName 등 여러가지 ViewResolver 가 있음여
  • 21. 03 VelocityViewResolver 설정파일 예제 <앞에 생략함> <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>
  • 22. 03 Controller 및 View 실제 구현 Controller에서 요렇게 정보를 넘겨 주면… 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; }View에서는 요렇게 받아먹음 JSP의 경우 로그인 정보: ${loginCommand.id} <% LoginCommand cmd = (LoginCommand) request.getAttribute("loginCommand"); %> Velocity의 경우 <body> 인사말: ${greeting} </body>