Model
- 어플리케이션 상태의 캡슐화
- 상태 쿼리에 대한 응답
- 어플리케이션의 기능 표현
- 변경을 view에게 통지
View
- 모델을 화면에 시각적으로 표현
- 모델에게 업데이트 요청
- 사용자의 입력을 컨트롤러에 전달
- 컨트롤러가 view를 선택하도록 허용
Controller
- 어플리케이션의 행위 정의
- 사용ㅇ자 액션을 모델 업데이트와 매핑
- 응답에 대한 view 선택
Spring MVC 특징
- Spring은 Di나 aop같은 기능 뿐만 아니라, Servlet 기반의 web개발을 위한 mvc framework를 제공
- spirng mvc는 model2 architecture와 front controller pattern을 framework 차원에서 제공
- spring을 기반으로 하고 있기 때문에 spring이 제공하는 transaction 처리나 DI및 AOP 등을 손쉽게 사용
Spring MVC 구성요소
1. DispatcherServlet (Front Servlet)
- 모든 클라이언트의 요청을 전달받음.
- Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 view에게 전달하여 알맞은 응답을 생성
2. HandlerMapping
- 클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정
- URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있음.
3. Controller
- 클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에 알려준다.
4. ModelAndView
- Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체
5. ViewResolver
- Controller가 리턴한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 view를 결정
6. View
- Controller의 처리 결과를 보여줄 응답화면을 생성
Spring MVC 구현
Spring MVC를 이용한 Application 구현 step
- web.xml에 DispatcherServlet 등록 및 Spring설정파일 등록
- 설정 파일에 HandlerMapping 설정
- Controller 구현 및 Context 설정 파일(servlet-context.xml)에 등록
- Controller와 JSP 연결을 위해 ViewResolver 설정
- jsp 코드 작성
web.xml - DispatcherServlet 설정
- <init-param>을 설정 하지 않으면 <servlet-name>-servlet.xml" file에서 applicationContext의 정보를 load
- SPring Container는 설정파이르이 내용을 읽고 Apllicationctonext객체를 생성
- <url-patten>은 DispatcherServlet이 처리하는 url Mapping pattern을 정의
- serlvet이므로 1개 이상의 DispatcherServlet 설정 가능
- <load-on-startup>1</..> 설정시 was strtup시 초기화 작업진행
- context 파일들을 로드하기 위해 리스너 설정 (ContextloaderListener)
- root-context.xml(웹이 아닌 공통 설정 부분)과 servlet-context.xml(웹인 부분)
@Controller
@RequestMapping("/name")
= method단위의 mapping이 가능
- 클라이언트의 요청을 처리
- controller class를 bean에 등록
@RequestMapping(value="/name", method=RequestMethod.POST)
* Controller에서 @RequestMapping 어노테이션을 설정하지 않으면? 404에러
Controller메소드의 파라미터 타입
Parmaeter Type | 설명 |
HttpServletRequest HttpServletResponse HttpSession |
필요시 Servlet API를 사용할 수 있음 |
java.util.Locale | 현재 요청에 대한 Locale |
InputStream, Reader | 요청 컨텐츠에 직접 접근할 때 사용 |
OutputStream, Reader | 응답 컵텐츠에 직접 접근할 때 사용 |
@PathVariable | URI 템플릿 변수에 접근할 때 사용 |
@RequestParam | HTTP 요청 파라미터를 매핑 |
@RequestHeader | HTTP 요청 헤더를 매핑 |
@CookieValue | HTTP 쿠키 매핑 |
@RequestBody | HTTP 요청의 몸체 내용에 접근할 때 사용 |
Map, Model, ModelMap | view에 전달할 model data를 설정할 때 사용 |
커맨드 객체 | HTTP 요청 parameter를 저장한 객체, 기본적으로 클래스 이름을 모델명으로 사용 @ModelAttribute 어노테이션 설정으로 모델명을 설정할 수 있음 (Board board) - 자동으로 모델에 추가 |
Errors, BindingResult | HTTP 요청 파라미터를 커맨드 객체에 저장한 결과 커맨드 객체를 위한 파라미터 바로 다음에 위치 |
SessionStatus | 폼 처리를 완료 했음을 처리하기 위해 서용 @SessionAttributes 어노테이션을 명시한 session속성을 제거하도록 이벤트 발생 시킴 |
Interceptor
HandlerInterceptor를 통한 요청 가로채기
- Controller가 요청을 처리하기 전/후 처리
- 로깅, 모니터링 정보 수지집, 접근 제어 처리 등의 실제 비지니스 로직과는 분리되어 처리해야 하는 기능들을 넣고 싶을 떄 유용
- interceptor를 여러 개 설정할 수 있음(순서주의)
boolean preHandler(..) : false를 반환하면 바로 종료
void postHandler(..) : COntroller 수행 후 호출
void afterCompletion(..) : view를 통해 클라이언트에 응답을 전송한 뒤 실행. 예외가 발생하여도 실행
servlet-context.xml에 설정
'Spring' 카테고리의 다른 글
MyBatis / spring-myBatis (0) | 2021.10.31 |
---|---|
AOP (관점 지향 프로그래밍) (0) | 2021.10.31 |
Spring Framework (0) | 2021.10.31 |
BackEnd 정리 (0) | 2021.10.18 |
@annotation 정리 (0) | 2021.04.29 |