날아라쩡글이의 블로그입니다.
spring MVC가 jsp에서 실행되는 순서와 객체들 본문
중앙 HTA (2106기) story/spring java framwork story
spring MVC가 jsp에서 실행되는 순서와 객체들
날아라쩡글이 2022. 1. 5. 13:58728x90
반응형
springMVC 실행순서
- 클라이언트가 웹서버로 요청을 보낸다.
- 웹서버가 요청객체와 응답객체를 생성한다.
- 웹서버가 DispatcherServlet의 Service(Request req, Response res :앞으로는 변수명으로 작성예정) 메소드를 실행한다.
- Handler Mapping에게 요청 URL을 보낸다,
- Handler Mapping은 요청 URL을 분석해서 요청URL과 mapping된 요청 핸들러 메소드를 실행할 HandlerAdapter객체를 반환한다.
- DispatcherServlet은 HandlerAdapter의 Handler(req, res)메소드를 실행한다.
- HandlerAdapter는 Interceptor를 실행해서 요청핸들러메소드 실행전처리를 수행한다.
- HandlerAdapter는 ArgumentResolver를 실행해서 요청핸들러 메소드의 멤버변수를 분석하고, 적절한 값 혹은 객체를 생성한다.
- HandlerAdapter는 요청 핸들러 메소드를 실행한다. 8번에서 생성한 값 혹은 객체를 요청핸들러메소드의 매개변수로 전달한다.
- 사용자가 정의한 요청핸들러메소드에서 클라이언트의 요청을 처리한다.
- 뷰페이지에 전달한 데이터는 model객체에 저장한다.
- 뷰페이지의 이름을 반환한다.
- HandlerAdapter는 modelAndView객체를 생성해서, modelAndView에 11번의 model객체를 저장하고, 12번에서 반환할 뷰이름을 저장한다.
- HandlerAdapter는 modelAndview객체를 DispatcherServlet에게 반환한다.
- DispatcherServlet은 ciewResolver에게 뷰이름을 전달한다.
- viewResolver는 뷰이름을 분석해서 JSTLView나 RedirectView를 반환한다.
- DispatcherServlet은 JSTLView 혹은 RedirectView의 Render(model, req, res)를 실행한다.
- JSTLView는 model의 값을 요청객체에 속성에 저장하고, 지정된 JSP로 내부이동해서 JSP를 실행한다.
- jsp에서 EL, JSTL을 사용해서 요청객체의 속성에 저장된 값으로 동적 HTML컨텐츠를 생성하고, 응답으로 HTML을 보낸다.
- RedirectView는 재요청 URl을 응답으로 보낸다.
- 웹서버가 요청객체와 응답객체를 폐기시킨다.
SpringMVC를 활용한 JSP기반의 웹 구성요소
- DispatcherServlet
- web.xml에서 설정한다.
- <servlet>
// DispatcherServlet을 "bookstore"라는 이름으로 Tomcat 웹서버에 배포한다.
<servlet-name>bookstore</servlet-name>
//식별자로 보통 web project의 이름을 붙인다. mall, BookStore동일한 이름만 아니면 된다.
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
//init-param으로 설정된 메소드는 서블릿에서 조회할 수 있다.
<param-name>contextConfigLocation</param-name>
//contextConfigLocation라는 이름으로 파라미터값을 조회하면 스프링빈설정파일의 경로를 알수 있다.
//경로를 지정하면, DispatcherServlet이 스프링컨테이너를 생성하고, 빈설정파일을 읽어서 객체를 생성/조립/보관한다.
<param-value>/WEB-INF/spring/context-web.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
//Tomcat웹서버가 시작되면 DispatcherServlet객체를 생성하고, 초기화작업을 수행해서 요청을 처리하는 상태가 되게 한다.
</servlet>
<servlet-mapping>
<servlet-name>bookstore</servlet-name>
//식별자로 보통 web project의 이름을 붙인다. mall, BookStore동일한 이름만 아니면 된다.
<url-pattern>*.do</url-pattern>
//Tomcat웹서버에 *.do패턴의 클라이언트 요청이 오면 위의 bookstore라는 이름으로 배포된 서블릿이 그요청을 처리한다.
</servlet-mapping> - load-on-startup
- 클라이언트의 요청이 한번도 안오면 클래스상태지만 이 설정을 해놓는다면 컨테이너를 우선적으로 만들어서 바로바로 사용할 수 있게 한다.
- 숫자는 우선순위를 나타내며, 숫자가 낮을수록 우선순위가 높다.
- 여러개의 서블릿을 등록할 수 있으며, 해당 숫자가 몇이냐에 따라서 순서를 정하여 만들어진다.
- 지우고 서버를 들어가면 만들어지지않으며, 검색을 해야 그때서야 요청객체를 만든다.
- 클라이언트의 모든 요청을 처리한다.
- 혹은 특정URL패턴을 지정하면 해당 URL패턴의 모든 요청을 처리한다.
- *.do, *.hta, *.doum, /cafe/*, /mail/.*,/news/.* URL패턴을 지정할 수 있다.
- HandlerMapping(interface)
- 컨트롤러에 @RequestMapping, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping어노테이션 정보를 분석해서 요청 URI와 요청핸들러메소드의 mapping정보를 알아낸다.
- DispatcherServlet로부터 요청URL를 전달받아서 해당 요청 URL과 매핑된 핸들러 메소드를 실행할 HandlerExcutionChain을 반환한다.
- RequestMappingHandlerMapping (거의사용), BeanNameUrlHandlerMapping, RouterfunvtionHandlerMapping이 기본 구현객체이다.
- HandlerExcutionChain은 Handler객체, Interceptor개개체등의 객체를 포함하고 있고, 해당 객체들의 실행순서에 맞게 실행하는 객체다. 반복처리를 해준다.
- HandlerAdapter(interface)
- 클라이언트의 요청을 처리하는 요청핸들러 메소드를 실행하는 객체이다.
- 요청핸들러메소드의 매개변수를 분석해서 필요한 객체를 제공한다.
- 요청핸들러 메소드의 매개변수를 분석해서 요청파라미터값, 폼입력값, 요청메세지를 매개변수에 제공한다.
- 요청핸들러메소드가 반환하는 값을 분석하서 modelAndView객체에 저장하고, modelAndView를 DispatcherServlet에게 반환한다.
- modelAndView객체
- modelAndView객체는 데이터, 뷰이름, 뷰객체를 저장하는 객체다.
- 요청핸들러메소드안에서 model의 객체에 저장한 데이터가 modelAndView객체의 데이터에 저장된다.
- 요청핸들러메소드가 반환한 JSP페이지 경로 혹은 리다이렉션경로가 modelAndView객체의 뷰이름으로 저장된다.
- SimpleControllerHandlerAdapter, RequstMappingHandlerAdapter, HandlerfunctionAdapter가 기본구현객체이다.
- DispatcherServlet 2번째 등장
- 요청 URL을 HandlerMapping에게 전달해서 클라이언트의 요청을 처리할 HandlerAdapter객체를 반환받는다.
- HandlerAdapter객체를 실행해서 사용자의 요청을 처리할 요청핸들러 메소드를 실행시키고, HandlerAdapter로부터 modelAndView객체를 반환받는다.
- HandlerAdapter객체가 반환한 modelAndView객체에는 model(데이터) 와 String(뷰페이지의 이름: jsp경로 또는 Redirect의 경로)가 포함되어 있다.
- ViewClass인 render메소드를 실행하고, view객체가 존재하지 않으면 viewResolver를 사용한다.
- ViewResolver(interface)
- HandlerAdapter가 반환한 modelAndView객체에 view객체가 없을 때 DispatcherServlet에게 뷰이름을 전달받아서 적절한 view의 객체를 반환한다.
- InterResourceViewResolver가 기본viewResolver객체이다.
- InterResourceViewResolver는 InternalResourceView, JSTLView, RedirectView중에 하나를 반환하는 뷰리졸브이다.
- InternalResourceView와 JstlView는 Jsp페이지로 내부이동시키는 view구현객체로 forward시키는 코드가 구현되어 있다.
- RedirectView는 클라이언트에게 재요청 URL을 응답으로 보내는 View구현객체이다.
- InterReSourceViewResoulver는 뷰이름이 "redirect :"으로 시작하면 Redicrectview객체를 반환한다. 그렇지 않으면 JstlView를 반환한다.
- View(interface)
- 클라이언트에게 응답컨텐츠를 제공하는 객체이다.
- void render(map<String, ?> model, HttpServletRequest, HttpServletResponse)메소드를 재정의해서 model로 전달받은 데이터를 다양한 컨텐츠타입의 응답을 생성해서 클라이언트에게 보낸다.
- view, abstractview, abstractXlsview,abstractJackSon2View등의 인터페이스나 추상클래스를 구현/상속해서 다양한 사용자 정의 view객체를 정의할 수 있다.
- DispatcherServlet 3번째 등장
- modelAndView객체에 View객체가 포함되어 있지 않으면 ViewResolver에게 뷰이름을 전달해서 적절한 view객체를 제공받는다.
- DispatcherServlet은 view객체의 render(model,req,res)을 실행해서 클라이언트에게 응답컨텐츠를 전달한다.
반응형
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
$(function(){스크립트 코딩}) 스크립트안에 적는 코딩 (0) | 2022.01.06 |
---|---|
RestController (0) | 2022.01.06 |
Session어노테이션 & SessionUtils로 객체 담기 (0) | 2022.01.05 |
다이나믹쿼리 (resultMap) (0) | 2022.01.04 |
다이나믹 쿼리(select문 하나로 여러 쿼리를 조회하다.) (0) | 2022.01.04 |
Comments