insidespringwebmvcinside spring web mvccfs2.tistory.com/upload_control/download.blog?fhandle=... ·...
TRANSCRIPT
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
MVC 개요와 오해MVC 개요와 오해
www.springframework.co.kr
한국 스프링 사용자 모임
MVC 개요MVC 개요
www.springframework.co.kr
한국 스프링 사용자 모임
MVC에 대한 오해MVC에 대한 오해
• 컨트롤러는 서블릿이다!• 컨트롤러는 액션이다!• 비즈니스 로직은 컨트롤러다!• 비즈니스 로직은 컨트롤러다!• 모델은 VO다!
www.springframework.co.kr
한국 스프링 사용자 모임
상황에 따라 다른 MVC 적용상황에 따라 다른 MVC 적용
www.springframework.co.kr
한국 스프링 사용자 모임
Ti 를 고려해보면Tier를 고려해보면…
• Server-side MVC
www.springframework.co.kr
한국 스프링 사용자 모임
RIA를 채택한다면RIA를 채택한다면…
• MVC in RIA
www.springframework.co.kr
한국 스프링 사용자 모임
Spring Web MVC 개요Spring Web MVC 개요
www.springframework.co.kr
한국 스프링 사용자 모임
S i W b MVC의 처리 흐름 개요Spring Web MVC의 처리 흐름 개요
www.springframework.co.kr
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
추상화
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
대표적인 컨트롤러 활용대표적인 컨트롤러 활용
www.springframework.co.kr
한국 스프링 사용자 모임
기본적인 요청 수행기본적인 요청 수행
• “기본적인 정보를 보자”– 할일 목록을 보는 페이지 작성
• 어떻게 하나?어떻게 하나?1. Controller 코드 작성2 Spring configuration2. Spring configuration
1. Dependency Injection
www.springframework.co.kr
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
입력 화면에서 보여줄 데이터입력 화면에서 보여줄 데이터
• 선택을 위한 데이터입력 Form 작성• 어떻게 하나?
– referenceData() 템플릿 메소드 구현referenceData() 템플릿 메소드 구현– 뷰에서 모델과 동일하게 처리
www.springframework.co.kr
한국 스프링 사용자 모임
기본형이 아닌 데이터 입력기본형이 아닌 데이터 입력
• 숫자나 문자 이외의 데이터를 화면에서입력하기
• 어떻게 하나?어떻게 하나?– PropertyEditor 코드 작성
initBinder() 템플릿 메소드에서– initBinder() 템플릿 메소드에서binder.registerCustomEditor()
www.springframework.co.kr
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
잘못된 값 세련되게 걸러내기잘못된 값 세련되게 걸러내기
• Separation of Concerns• 어떻게 하나?
– Validator 구현코드 작성Validator 구현코드 작성– validator 혹은 validators 프로퍼티로 등록
www.springframework.co.kr
한국 스프링 사용자 모임
C t ll 인터페이스 구현 클래스Controller 인터페이스 구현 클래스
www.springframework.co.kr
한국 스프링 사용자 모임
정리정리
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
한국 스프링 사용자 모임
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
한국 스프링 사용자 모임
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