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