Spring mvc

1,886 views

Published on

Spring MVC 첫 번째 슬라이드

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,886
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
62
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Spring mvc

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

×