insidespringwebmvcinside spring web mvccfs2.tistory.com/upload_control/download.blog?fhandle=... ·...

24
한국 스프링 사용자 모임 Inside Spring Web MVC Inside Spring Web MVC 안영회 안영회 [email protected] www.springframework.co.kr 한국 스프링 사용자 모임 차례 차례 MVC 개요와 오해 Spring Web MVC 개요 Demo이해하는 Spring Web MVC Demo이해하는 Spring Web MVC 대표적인 컨트롤러 활용 정리 www.springframework.co.kr

Upload: others

Post on 06-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

Inside Spring Web MVCInside Spring Web MVC

안영회안영회[email protected]

www.springframework.co.kr

한국 스프링 사용자 모임

차례차례

• MVC 개요와 오해• Spring Web MVC 개요• Demo로 이해하는 Spring Web MVC• Demo로 이해하는 Spring Web MVC• 대표적인 컨트롤러 활용• 정리

www.springframework.co.kr

Page 2: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

MVC 개요와 오해MVC 개요와 오해

www.springframework.co.kr

한국 스프링 사용자 모임

MVC 개요MVC 개요

www.springframework.co.kr

Page 3: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

MVC에 대한 오해MVC에 대한 오해

• 컨트롤러는 서블릿이다!• 컨트롤러는 액션이다!• 비즈니스 로직은 컨트롤러다!• 비즈니스 로직은 컨트롤러다!• 모델은 VO다!

www.springframework.co.kr

한국 스프링 사용자 모임

상황에 따라 다른 MVC 적용상황에 따라 다른 MVC 적용

www.springframework.co.kr

Page 4: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

Ti 를 고려해보면Tier를 고려해보면…

• Server-side MVC

www.springframework.co.kr

한국 스프링 사용자 모임

RIA를 채택한다면RIA를 채택한다면…

• MVC in RIA

www.springframework.co.kr

Page 5: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

Spring Web MVC 개요Spring Web MVC 개요

www.springframework.co.kr

한국 스프링 사용자 모임

S i W b MVC의 처리 흐름 개요Spring Web MVC의 처리 흐름 개요

www.springframework.co.kr

Page 6: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

S i W b MVC의 F t C t ll 구현Spring Web MVC의 Front Controller 구현

www.springframework.co.kr

한국 스프링 사용자 모임

F t C t ll (C J2EE P tt )Front Controller(Core J2EE Patterns)

www.springframework.co.kr

Page 7: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

F t C t ll (C J2EE P tt )Front Controller(Core J2EE Patterns)

• Command와 Controller 활용 전략

www.springframework.co.kr

한국 스프링 사용자 모임

F t C t ll (C J2EE P tt )Front Controller(Core J2EE Patterns)

• Dispatcher 활용 전략

www.springframework.co.kr

Page 8: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

Demo로 이해하는 Spring Web MVC이해하는 p g

www.springframework.co.kr

한국 스프링 사용자 모임

D 환경Demo 환경

• Tomcat 5.5.23• JDK1.6.0.01• Eclipse WTP 1 5 4• Eclipse WTP 1.5.4• Windows Vista

• 그리고 “from the scratch” 예제• 그리고… from the scratch 예제

www.springframework.co.kr

Page 9: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

1) Di t h S l t1) DispatcherServlet

• 관문관문• 코디네이터

www.springframework.co.kr

한국 스프링 사용자 모임

I id S i W b MVCInside Spring Web MVC

Framework Dispatcher

Servlet Servlet

ApplicationContext이벤트 관련

주요Mapping

/Resolver로딩이벤 관련 /Resolver 로딩

프레임워크 기

반 기능Do Dispatch

www.springframework.co.kr

Page 10: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

I id S i W b MVCInside Spring Web MVC

www.springframework.co.kr

한국 스프링 사용자 모임

H tHow to program

• web.xml에 <servlet> 및 <servlet-mapping> 선언

• ${servlet-name}-servlet.xml 파일 작성${servlet name} servlet.xml 파일 작성

www.springframework.co.kr

Page 11: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

2) H dl M i2) Handler Mapping

• HTTP 요청 -> 처리기

www.springframework.co.kr

한국 스프링 사용자 모임

I id S i W b MVCInside Spring Web MVC

• doDispatch() > … > getHandler()• getHandler() code…

Iterator it = this.handlerMappings.iterator();

while (it.hasNext()) {

HandlerMapping hm = (HandlerMapping) it.next();

handler = hm.getHandler(request);

return handler;

www.springframework.co.kr

Page 12: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

H tHow to program

• Do nothing!• 일단 디폴트 설정을 활용

– BeanNameUrlHandlerMappingBeanNameUrlHandlerMapping

www.springframework.co.kr

한국 스프링 사용자 모임

3) C t ll3) Controller

• Spring Web MVCSpring Web MVC의 요청 처리기

www.springframework.co.kr

Page 13: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

H tHow to program

• 네비게이션만 만들어두자.• JSP만 호출해주는 컨트롤러 활용

– ParameterizableViewControllerParameterizableViewController

www.springframework.co.kr

한국 스프링 사용자 모임

4) M d lA dVi / 6) Vi4) ModelAndView / 6) View

• View에 데이터 모델 제공View에 데이터 모델 제공

• 다양한 View 구현추상화

www.springframework.co.kr

추상화

Page 14: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

I id S i W b MVCInside Spring Web MVC

www.springframework.co.kr

한국 스프링 사용자 모임

5) Vi R l5) View Resolver

• 논리적 View 이름-> 물리적View 파일

www.springframework.co.kr

Page 15: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

I id S i W b MVCInside Spring Web MVC

• doDispatch() > render() > resolveViewName ()

l Vi N () d• resolveViewName() code…

for (Iterator it = this.viewResolvers.iterator(); it.hasNext();) {

ViewResolver viewResolver = (ViewResolver) it.next();

Vi i i R l l Vi N ( i N l l )View view = viewResolver.resolveViewName(viewName, locale);

if (view != null) { return view;}

}}

www.springframework.co.kr

한국 스프링 사용자 모임

H tHow to program

• View 유형에 따라 선택– InternalResourceViewResolver

– FreeMarkerViewResolver

– VelocityViewResolver

– XmlViewResolver

– …

www.springframework.co.kr

Page 16: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

대표적인 컨트롤러 활용대표적인 컨트롤러 활용

www.springframework.co.kr

한국 스프링 사용자 모임

기본적인 요청 수행기본적인 요청 수행

• “기본적인 정보를 보자”– 할일 목록을 보는 페이지 작성

• 어떻게 하나?어떻게 하나?1. Controller 코드 작성2 Spring configuration2. Spring configuration

1. Dependency Injection

www.springframework.co.kr

Page 17: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

Ab t tC t llAbstractController

www.springframework.co.kr

한국 스프링 사용자 모임

F 처리Form 처리

• “입력 양식을 만들어보자”– 할일을 입력하는 페이지 작성

• 어떻게 하나?어떻게 하나?1. Controller 코드 작성2 Spring configuration2. Spring configuration

1. Dependency Injectio

www.springframework.co.kr

Page 18: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

I id Si l F C t llInside SimpleFormController

1. Form 제출인지 판단? Nob ll i b i i– AbstractFormController.isFormSubmission()

2. 새로운 Form 객체 생성1. AbstractFormController.showNewForm() 2. formBackingObject()3. createCommand()

3. Binder 생성 및 초기화생성 및 기화1. BaseCommandController.createBinder()2. initBinder() > 내용 없음() 내용 없음

www.springframework.co.kr

한국 스프링 사용자 모임

I id Si l F C t llInside SimpleFormController

4. 오류가 있다면 Model로 반환reference Data가 있으면 Model에 병합– AbstractFormController.showForm

…Map model = errors.getModel();

f D t ( t tT t() )referenceData(request, errors.getTarget(), errors);…return new ModelAndView(viewName model);return new ModelAndView(viewName, model);

4 Form View 출력4. Form View 출력www.springframework.co.kr

Page 19: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

입력 화면에서 보여줄 데이터입력 화면에서 보여줄 데이터

• 선택을 위한 데이터입력 Form 작성• 어떻게 하나?

– referenceData() 템플릿 메소드 구현referenceData() 템플릿 메소드 구현– 뷰에서 모델과 동일하게 처리

www.springframework.co.kr

한국 스프링 사용자 모임

기본형이 아닌 데이터 입력기본형이 아닌 데이터 입력

• 숫자나 문자 이외의 데이터를 화면에서입력하기

• 어떻게 하나?어떻게 하나?– PropertyEditor 코드 작성

initBinder() 템플릿 메소드에서– initBinder() 템플릿 메소드에서binder.registerCustomEditor()

www.springframework.co.kr

Page 20: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

I id Si l F C t llInside SimpleFormController

1. Form 제출인지 판단? Yesb ll i b i i– AbstractFormController.isFormSubmission()

2. 세션에서 Form 객체 꺼내거나 새로운 Form 객체 생성1. AbstractFormController.getCommand() 2. isSessionForm()

True: session.getAttribute()False: formBackingObject()

www.springframework.co.kr

한국 스프링 사용자 모임

I id Si l F C t llInside SimpleFormController

3. Bind와 validated ll bi d d lid1. BaseCommandController.bindAndValidate()

1. createBinder()2 등록된 validator 활용2. 등록된 validator 활용3. onBindAndValidate() > 내용 없음

4 Form 제출 처리4. Form 제출 처리– SimpleFormController.processFormSubmission()

오류 여부– 오류 여부• 있으면: showForm()• 없으면: onSubmit()• 없으면: onSubmit()

www.springframework.co.kr

Page 21: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

잘못된 값 세련되게 걸러내기잘못된 값 세련되게 걸러내기

• Separation of Concerns• 어떻게 하나?

– Validator 구현코드 작성Validator 구현코드 작성– validator 혹은 validators 프로퍼티로 등록

www.springframework.co.kr

한국 스프링 사용자 모임

C t ll 인터페이스 구현 클래스Controller 인터페이스 구현 클래스

www.springframework.co.kr

Page 22: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

정리정리

www.springframework.co.kr

한국 스프링 사용자 모임

S i W b MVC의 핵심 개념Spring Web MVC의 핵심 개념

• DispatcherServlet• Handler Mapping• View Resolver• View Resolver• Controller• Validator• Command• Command • Model

www.springframework.co.kr

Page 23: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

E t TiExtra Tips

• Spring Formatter– http://www.springframework.org/files/active/

0/spring-eclipse-code-conventions.xml

• Templates for JUnit4, Spring config• Throw• Throw

UnsupportedOperationException!• Spring IDE

www.springframework.co.kr

한국 스프링 사용자 모임

예고편예고편

• Spring Web MVC 실전 활용– 간결한 공통 클래스 만들기– 대규모 Url을 가진 사이트를 위한 CoC 적용– Freemarker의 활용– Excel 리포팅리 팅– …

• 6주 후에 봅시다• 6주 후에 봅시다.

www.springframework.co.kr

Page 24: InsideSpringWebMVCInside Spring Web MVCcfs2.tistory.com/upload_control/download.blog?fhandle=... · 2015-01-21 · 한국스프링사용자모임 InsideSpringWebMVCInside Spring Web

한국 스프링 사용자 모임

RResources

• MVC 개념– http://en.wikipedia.org/wiki/Model-view-controllerp // p g/ /

– http://osteele.com/archives/2004/08/web-mvc

• Spring Web MVC 개요http://static springframework org/spring/docs/2 0 x/reference/mvc html– http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html

– http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontController.html

Demo• Demo– Expert Spring MVC and Web Flow (Expert) by Seth Ladd, Darren Davison,

Steven Devijver, and Colin Yates

htt // h i f /273– http://younghoe.info/273

– http://blog.empas.com/ahnyounghoe/read.html?a=12332593

www.springframework.co.kr

한국 스프링 사용자 모임

RResources

• Demo– http://blog.empas.com/ahnyounghoe/read.html?a=13620546p // g p / y g /

– http://blog.empas.com/ahnyounghoe/read.html?a=12334324

– http://blog.empas.com/ahnyounghoe/read.html?a=15454196

– http://blog empas com/ahnyounghoe/read html?a=12398750– http://blog.empas.com/ahnyounghoe/read.html?a=12398750

• Extra Tips– http://younghoe.info/479

– http://younghoe.info/482

– http://younghoe.info/497

www.springframework.co.kr