1. SpringMVC 구조
[동작 순서]
1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회(@RequestMapping)
2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회(supports() 실행)
3. 핸들러 어댑터 실행: 핸들러 어댑터를 실행(HttpRequestHandlerAdapter 실행)
4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
5. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서
반환한다.
6. viewResolver 호출: 뷰 리졸버를 찾고 실행한다.
핸들러 어댑터를 통해 new-form이라는 논리뷰 이름 획득
7. View 반환: 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를
반환한다.
JSP의 경우 InternalResourceView(JstlView) 를 반환하는데, 내부에 forward() 로직이 있다.
8. 뷰 렌더링: 뷰를 통해서 뷰를 렌더링 한다.
2. SpringMVC 실무에서 사용하기
2-1. 요청데이터 전달
- GET: 쿼리 파라미터(username=gayoung$age=27)
- POST: HTML Form
- GET 쿼리 파리미터 전송 방식이든, POST HTML Form 전송 방식이든 둘다 형식이 같으므로 구분없이 조회 가능
- html form전송은 put, patch지원 X / get, post 지원 O
- HTTP message body에 데이터 직접 담아서 요청(JSON)
2-2. 요청파라미터 조회
- 요청 파라미터를 조회하는 기능: @RequestParam , @ModelAttribute
- @ModelAttribute
- 요청파라미터 처리: Item생성해주고 값을 넣어줌(set)
- model추가: model.addAttribute로 자동 추가(파라미터에서 @ModelAttribute("item")의 item이름으로)
- HTTP 메시지 바디를 직접 조회하는 기능: @RequestBodys
2-3. Post/Redirect/Get
- redirect
- get으로 상품등록폼으로 가기
- post로 상품 저장
- redirect가 아닌 경우 : POST가 마지막이 되어 새로고침하면 계속 post로 같은데이터 다른 itemId로 저장됨
- recirect인 경우 : GET이 마지막이 되어 새로고침해도 get으로 화면만 나옴