Download presentation
Presentation is loading. Please wait.
1
컴퓨터응용과학부 Java Enterprize(DB) 제 8 주
2014년 10월 28일 프레젠테이션 층의 설계와 구현(6장)
2
다음 주 과제 7장 읽어오기 숙제 해서 제출하기
3
제6장 프레젠테이션 층의 설계와 구현 스프링 MVC의 개요 환경 만들기 예제 애플리케이션의 개요 화면을 표시하는 컨트롤러
입력 값을 받는 컨트롤러 스프링 MVC의 그 밖의 기능 정리
4
스프링 MVC의 개요 스프링 MVC 설계 애노테이션 도임 J2EE 패턴의 프론트 컨트롤러 패턴에 기초한다
@Controller 애노테이션으로 컨트롤러 클래스 생성 가능 @RequestMapping 으로 URL과 실행 메소드 연결 가능 한 클래스에 요청을 처리하는 메소드를 여러 개 정의할 수 있다. 메소드명을 자유롭게 선택할 수 있다. 메소드의 인수를 필요한 것만 자유롭게 선택할 수 있다.
5
스프링 MVC 개요 컨트롤러 예 URL 매핑 View 에 넘겨줄 오브젝트 View 이름 리턴(home.jsp)
6
스프링 MVC 개요 스프링 MVC와 REST 스프링 MVC는 URL과 메소드를 직접 연결한다.(REST 사 고 방식)
REST : Representational State Transfer, 웹상의 정보 를 모두 리소스로 파악하고 그 식별자로 URI를 할당해 특 정할 수 있도록 한다. REST는 HTTP 메소드를 충실하게 사용한다.
7
스프링 MVC개요 REST의 사고 방식 URI: http://home.inje.ac.kr/usr/1
name=철수 address = 김해시 /usr/5 ……… /usr/2 ……… /usr/3 ……… /usr/4 ………
8
REST에 의한 리소스 접근 REST 서버 REST 크라이언트 사용자 검색 (id = 1) GET /usr/1 사용자
name=“영자” REST 크라이언트 POST /usr/2 사용자 name=“창민” 사용자 등록 (id = 1, name=창민) OK
9
REST사용 MVC조건 URL을 자유롭게 결정할 수 있다. HTTP 메소드에 따라 실행할 처리를 전환할 수 있 다.
스프링 프레임워크는 위 세 가지 조건을 다 만족한 다.
10
스프링 MVC의 클래스와 동작 개요 HandlerMapping Service ②-1 ③-1 ① 브라우저
DispatcherServlet ②-2 Controller ④ View name ⑦-2 ViewResolver ⑤ UserView ⑥ View return ③-2 ⑦-1 Model
11
스프링 MVC의 클래스 클래스 역할 DispatcherServlet
모든 HTTP 요청을 받아들여 그 밖의 오브젝트 사이의 흐름을 제어한다. HandlerMapping 클라이언트의 요청을 바탕으로 어느 컨트롤러를 실행할 지를 결정한다. Model 컨트롤러에서 뷰로 넘겨줄 오브젝트를 저장하는 클래스로 문자열 키와 값의 쌍으로 저장한다. View Resolver View이름을 바탕으로 적당한 View 오브젝트를 선택한다. View User View에 화면표시 처리를 의뢰한다. Service 비즈니스 로직을 실행한다. Controller 클라리언트 요청에 맞게 프레젠테이션 층의 애플리케이션 처리를 실행한다. User View 클라이언트에 대해 화면 표시 처리를 한다.
12
스프링 MVC의 동작 과정 DispatcherServlet은 브라우저로부터 요청을 받아들인다.
DispatcherServlet은 요청된 URL을 해들러매핑 오브젝트에 넘기고 호출 대상의 컨트롤러 오젝트를 얻어 URL에 해당하는 메소드를 호출할 수 있도록 핸들러 어댑터를 준비해 호출한다. 컨트롤러 오브젝트는 비즈니스 로직 처리를 실행하고, 그 결과 를 바탕으로 뷰에 전달할 오브젝트를 Model 오브젝트에 저장 한다. 컨트롤러는 뷰이름을 반환한다. DispatcherServlet은 컨트롤러에서 반환된 View 이름을 뷰리 졸버에 전달해서 뷰 오브잭트를 얻는다. DispatcherServlet은 View 오브젝트에 화면 표시를 의뢰한다. View 오브젝트는 User View(jsp 파일)를 호출해서 화면 표시 를 의뢰한다. User View는 Model 오브젝트에서 화면 표시에 필요한 오브젝 트를 가져와 화면 표시 처리를 실행한다.
13
컨트롤러의 개요와 Model 오브젝트 클라이언트 요청에 따라 프레젠테이션 계층의 애 플리케이션 처리 구현 뷰 이름 반환
컨트롤러 클래스 설정 URL과 메소드의 매핑 전달할 내용을 Model 오브젝트에 저장 뷰 이름 반환
14
View 와 View Resolver 뷰 기술 클래스 이름 설명 JSP, 기타 InternalResourceView
JSP등의 웹 컨테이너 상에서 관리되는 리소스에 forward해 표시하는 View 클래스 JSTL 기반 JSP JstlView JSTL로 기술한 JSP를 표시할 때 사용 Velocity VelocityView Velocity 의 템플릿을 사용해 결과를 표시 할 때 사용 FreeMarker FreeMarkerView FreeMarker 의 템플릿을 사용해 결과를 표시 할 때 사용 Apache Tiles 2.x TilesView Apache Tiles 템플릿을 사용해 결과를 표시 할 때 사용 XSLT XsltView XSLT 로 변환한 결과의 XML을 표시하는 View
15
View 와 View Resolver 뷰 기술 클래스 이름 설명 JasperReport JsperReportsHtmlView
JsperReportsPdfView JsperReportsXlsView JsperReportsCsvView ConfigurableJsperReportsView JasperReport의 결과를 표시하는 View 클래스 XML 형식 MarshallingView 스프링의 O/X 매핑기능으로 변환한 결과인 XML을 표시하는 View 클래스 Jackson(JSON 형식) MappingJacksonJsonView Jackson으로 변환한 JSON을 표시하는 View Apache POI(Excel 형식) AbstractExcelView Apache POI로 변환한 결과인 엑셀을 표시하는 View. 엑셀로 변환하는 클래스는 상속 받아서 따로 작성
16
View 와 View Resolver 뷰 기술 클래스 이름 설명 iText(PDF 형식) ABstractPdfView
iTEXT로 변환한 결과인 PDF를 표시하는 View. PDF로 변환하는 클래스는 상속 받아서 직접 작성 Rome(Atom, RSS형식) AbstractAtomFeedView AbstractRSSFeedView Rome 으로 변환한 결과인 Atom, RSS를 표시하는 View
17
View와 ViewResolver View를 직접 반환하는 경우 뷰기술에 의존한다. DispatcherServlet
JstlView Controller View이름만 반환하는 경우 뷰기술에 의존한다. DispatcherServlet View 이름 Controller View 이름 ViewResolver JstlView
18
ViewResolver 클래스 클래스 이름 설명 설정방법과 예 UrlBasedViewResolver
설정된 접두사와 접미사를 바탕으로 만든 URL의 View 오브젝트를 반환한다. 뷰 이름으로 ‘forward:xxx’나 ‘redirect:xxx’ 가 지정되면 forward나 redirect를 한다. UrlBasedViewResolver의 프로퍼티 로서 정의 prefix = /WEB-INF/views/ suffix = .jsp ResourceBundleViewResolver 자바의 리소스 번들 형식의 설정을 바탕으로 View 오브젝트를 결정한다. 리소스 번들파일로서 정의 user/list.(class)=org.springframework.web.servlet.view.JstlView usr/list.url=/WEB-INF/views/usr/list.jsp
19
ViewResolver 클래스 클래스 이름 설명 설정방법과 예 XmlViewResolver
DI 컨테이너에서 Bean 이름이 뷰 이름인 View 오브젝트를 반환한다. View 오브젝트만 등록된 DI 컨테이너로 View 오브젝트를 관리한다. Bean 정의 파일로서 정의 <bean name=“usr/list” class=“…View.JstlView”> <property name=“url” value=“/WEB-INF/views/usr/list.jsp”/> </bean> <bean name=“usr/list” class=“…velocity.VelocityView”> <property name=“url” value=“/WEB-INF/views/usr/detail.vm”/> BeanNameViewResolver DI 컨테이너에서 Bean 이름이 뷰 이름인 View 오브젝트를 반환한다. ViewResolver가 등록된 DI 컨테이너로 View 오브젝트를 취득한다.
20
ViewResolver 클래스 클래스 이름 설명 설정방법과 예 ContentNegotiatingViewResolver
HTTP 요청의 헤더를 바탕으로 View 오브젝트를 선택한다. 뷰 이름으로 View 오브젝트를 가져오는 처리는 다른 뷰 리졸버에 의뢰한다. 따라서 반드시 다른 뷰 리졸버를 설정해 둘 필요가 있다. 각 뷰 리졸버 별로 정의
21
UrlBasedViewResolver와 뷰의 경로
가장 자주 사용되는 뷰 리졸버 이다. 접두사(prefix)와 접미사(suffix)를 설정한다. prefix = /WEB-INF/views/ suffix = .jsp Controller usr/list ViewResolver View 오브젝트 /WEB-INF/views/usr/list.jsp
22
UrlBasedViewResolver의 서브클래스
클래스 이름 대응하는 뷰 클래스 InternalResourceViewResolver InternalResourceView JstlView (JSTL 라이브러리가 있는 경우) VelocityViewResolver VelocityView FreeMarkerViewResolver FreeMarkerView TileViewResolver TilesView XsltViewResolver XsltView
24
스프링 MVC와 관련된 스프링의 기능 메시지 관리 Validation 처리 메시지를 코드와 연결해 관리
MessageSource interface, ReloadableResourceBundleMessageSource 국제화 대응 Validation 처리 검증 처리 인터페이스 처리결과를 저장하는 오브젝트
25
스프링의 properties 파일 스프링에서는 xxx.properties 파일에서 유니코드 를 지원하지 않는다. 즉 프로퍼티 파일에서 한글로 입력을 하면 실제 웹에서는 글자가 깨져 표시된다. 이를 해결하기 위해서는 한글로 입력한 내용을 자 동으로 유니코드 이스케이프, \uxxxx, 로 변환 해 주는 유틸리티를 사용해야 한다. Integrated Properties Editor Properties Editor
26
환경 만들기 스프링 툴 슈트(Spring Tool Suite, STS)를 설치하 면 필요한 대부분의 환경은 자동으로 구축된다.
필요한 환경 개발 실행 환경 : STS 애플리케이션 컨테이너 : Apache Tomcat Server 또는 Pivotal tc Server STS 압축 해제를 본인이 쓰기 권한이 있는 폴더에 하고 STS를 실행해야 함.
27
웹 서버 환경 설정 환경 설정 파일을 직접 수정하지 말고 STS에서 수 정할 것 주로 실행 포트 문제임
28
웹 서버 정상 동작 확인
29
비즈니스 로직의 Bean 정의 파일 resources 폴더에 배치
30
beans-biz.xml 파일
31
스프링 MVC의 bean 정의 파일 beans-webmvc.xml
32
web.xml 설정 디폴트 이스케이프 설정 Bean 정의파일 위치 설정
33
web.xml 설정 인코딩 관련 설정
34
web.xml 설정 Servlet 관련 설정
35
예제 레이어와 패키지 구조 sample.customer web biz service controller domain
36
예제 레이어와 패키지 구조
37
비즈니스 로직 클래스
38
화면을 표시하는 컨트롤러 @RequestMapping value method params headers consumes
produces
39
@RequestMapping의 설정 속성 설정가능한 형 내용 설정 예 value String URL
(value={“/comsi”, “/socas”}) method HttpMethod HTTP 메소드 @RequestMapping (method=HttpMethod.POST) params 요청파라메터 @RequestMapping (params=“action=edit”, “userId”)
40
@RequestMapping의 설정 속성 설정가능한 형 내용 설정 예 headers String 요청헤더
@RequestMapping (headers=“myHeader=myValue”) comsumes 요청에 포함된 미디어 타입 @RequestMapping (consumes=“text/*”) produces 응답의 미디어 타입 @RequestMapping (produces=“text/*”)
41
URI 템플릿 사용 @RequestMapping(value=“/usr/{userId}”, method=GET) public String getUserById( @PathVariable(“userId”) int id, Model model,.)
42
복수 변수 사용
43
정규 표현 사용 세미콜론(;)을 포함한 URL은 스프링에서 지정할 수 없다.
44
클래스 레벨 Mapping
45
제 9 주 강의 내용
46
Controller 메소드 인수 @PathVariable @RequestParam @RequestHeader @Cookie
@RequestBody @ModelAttribute HttpEntity Model, Errors, SessionStatus, WebRequest HttpSerrvletRequest, HttpServletResponse Locale, Reader, Writer, Principal
47
@PathVariable URI 템플릿 형식으로 지정한 URL의 변수 값
int id) @RequestMapping(/usr/{userID})
48
@RequestParam HTTP 요청 파라메터 foo(@RequestParam(“userId”) int id)
= “userId”, required = true, default = “0”) int id)
49
@RequestParam 업로드 파일 (POST 방법으로 파일을 업로드 할 때)
MultipartFile uploaded)
50
@RequestHeader HTTP 요청의 헤더 값
String userAgent)
51
@Cookie 쿠키 값 String sessionId)
52
@RequestBody HTTP 요청의 메시지 바디 User user) POST 메소드 사용
53
Controller 메소드의 반환값 기본적으로 View의 이름이다.
void 인 경우는 요청받은 URL이 view 이름이 된다. 접두사 내용 사용예 redirect: 지정된 URL로 리디렉트 redirect:/user redirect: forward: 지정된 URL로 포워드 forward:/user
54
입력 값을 받는 Controller 요청 파라메터의 키 값과 클래스의 멤버변수 명이 같아야 한다.
요청 파라메터의 키 값과 클래스의 멤버변수 명이 같아야 한다. 각 멤버 변수에 대한 setter 메소드가 있어야 한다. 전달 받을 클래스는 기본 생성자가 있어야 한다. @ModelAttribute 사용 Request Scope 에 저장된다.
55
Controller 동작
56
Model 오브젝트와 Session 스코프
스프링에서 제공하는 form 태그라이브러리를 이 용하고 싶을 때 몇 단계에 걸쳐 완성되는 폼을 구성하고 싶을 때 지속적으로 사용자의 입력 값을 유지하고 싶을 때
57
Model 오브젝트와 Session 스코프
58
검증 처리와 JSR-303 Bean 검증
59
검증 처리와 JSR-303 Bean 검증
60
검증 처리와 JSR-303 Bean 검증
61
JSP와 스프링 태그 라이브러리 스프링 태그 라이브러리 폼 태그 라이브러리 제공 오류 및 메시지 표시
62
스프링 MVC의 그 밖의 기능 flash 스코프 스프링의 예외 처리
Request 스코프와 유사하지만 리디렉트일 때 상태가 유 지되는 스코프 이다. 스프링의 예외 처리 컨트롤러마다 예외 처리 정의 하나의 웹 애플리케이션에서 공통된 예외처리 정의
63
파일 업로드 MultiPartResolver 인터페이스 구현
64
파일 업로드
65
REST API의 구현 – XML, JSON의 송/수신
HttpMessageConverter @ResponseBody ResponseEntity
Similar presentations