일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 과정평가형
- 태그
- jQuery
- javascript
- 암호화
- CSS
- array
- eGov
- 함수
- mybatis
- POI
- spring
- JVM
- sql
- controller
- 오류
- web.xml
- select
- was
- Ajax
- html
- 배열
- Java
- Database
- input
- eGovFramework
- TO_DATE
- json
- Oracle
- 개념
- Today
- Total
web developer
스프링 MVC 구조와 패턴 본문
1. 스프링 MVC 기본 구조
스프링 프레임워크는 하나의 기능을 위해서만 만들어진 프레임워크가 아닌 '코어'라고 할 수 있는 여러 서브 프로젝트들을 결합해서 다양한 상황에 대처할 수 있도록 개발하였다. 그중 하나가 MVC 구조이다.
2. 스프링 구동 순서
프로젝트 구동은 web.xml 에서 시작한다. web.xml 상단에는 가장 먼저 구동되는 Context Listener가 등록되어 있다.
- ContextLoaderListener는 해당 웹 어플리케이션을 구동하게 되면 같이 작동이 시작되므로 해당 프로젝트를 실행하면 가장 먼저 로그를 출력하면서 실행한다. --> 여기서 root-context를 부름
- root-context.xml이 처리되면 파일에 있는(설정해 놓은) Bean들이 작동한다.
- root-context.xml이 처리된 후에는 DispatcherServlet이라는 서블릿과 관련되어 설정이 작동한다. MVC 구조에서 가장 핵심적인 역할을 하는 클래스이며 내부적으로 웹 관련 처리의 준비 작업을 진행한다. 내부적으로 웹 관련 처리의 준비 작업을 진행하기 위해 사용하는 파일이 있고 servlet-context.xml이다.
- DispatcherServlet에서 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석한다. 이 과정에서 등록된 객체(Bean)들을 기존에 만들어진 객체(Bean)들과 같이 연동하게 된다.
3. 스프링 MVC 패턴
0, 1. 사용자가 요청을 하면 먼저 정적인 요청이면 바로 서버에서 응답을 하지만 아니라면 Web Container를 통해 동적인 페이지를 만들어서 응답을 하게 된다. 먼저 요청이 들어오면 web.xml을 들리면서 Request는 Front-Controller인 DispatcherServlet로 가게 된다.
2. DispatcherServlet으로 온 요청을 HandlerMapping에서 요청의 처리를 담당할 컨트롤러를 찾게 된다. HandlerMapping 인터페이스를 구현한 여러 객체 중 @RequestMapping이라는 어노테이션이 적용된 것을 기준으로 판단한다.
3, 4. 적절한 컨트롤러를 찾았다면 HandlerAdapter를 이용해서 해당 컨트롤러를 동작시킨다.
5,6,7,8,9,10. 컨트롤러에서는 데이터를 받은 다음 Service로 가서 비즈니스 로직을 통해 DAO, DTO를 이용해 DB와 통신을 해 원하는 결과를 얻어서 다시 Service에서 받아 Controller에서는 Service로부터 얻은 결과를 통해 뷰를 결정해준다.
11. Controller의 처리가 완료되었다면 어디로, 어떻게 갈 것인지 라는 결과가 나오고 그 결과를 다시 DispatcherSevlet으로 다시 돌려준다.
12. 컨트롤러가 요청을 처리한 후, 결과 데이터를 포함한 뷰 이름을 ViewResolver으로 반환한다.
/*
* Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory
*/
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
* servlet-context.xml에 정의된 InternalResourceViewResolver 입니다.
13, 14. ViewResolver는 컨트롤러가 반환한 뷰 이름(String)을 실제 뷰(View 객체)로 변환하고, 변환된 뷰 객체를 DispatcherServlet에 반환하여, 최종적으로 클라이언트에게 응답으로 보내질 수 있도록 한다.
* 뷰 이름 변환, 뷰 객체 반환
15. DispatcherServlet이 뷰 객체를 사용하여 최종 HTML 응답을 생성하고 클라이언트에게 전송합니다.
출처 : https://tadaktadak-it.tistory.com/108
출처 : https://velog.io/@haeniyu/210812-Spring-%EC%84%A4%EC%A0%952-root-context.xml
'Framework > Spring [java]' 카테고리의 다른 글
[java] Model, ModelMap, ModelAndView (2) | 2023.01.10 |
---|---|
[java] @RequestBody , @ResponseBody 어노테이션 (2) | 2022.03.04 |
[spring] 파일 관련 기능: 업로드, 다운로드, 게시글 등록 및 수정, 삭제 (0) | 2022.01.05 |
[spring] Spring IOC, IOC Container ,DI 의미 (0) | 2021.12.23 |
[spring] web.xml (0) | 2021.12.23 |