목차
1. Anotation을 이용한 DI (Dependency Injection)
2. Spring MVC의 구조와 흐름
1. Anotation을 이용한 DI (Dependency Injection)
1) Anotation을 이용해서 DI를 할 때의 흐름
2) Anotation으로 객체 생성
- 어노테이션(@)을 이용하면 spring의 환경 설정 파일에서 더 이상 <bean> 태그로 빈 객체를 생성하지 않고 어노테이션을 이용해서 객체를 생성할 수 있다.
- 이때, 스프링 환경설정 xml 파일에서 <context:component-scan> 태그를 사용한다.
- 형식: <context:component-scan base-package="패키지">
- 지정된 패키지 하위에서 @Component, @Controller 등의 어노테이션(또는 하위 어노테이션) 이 적용된 클래스를 검색하여 빈으로 등록한다.
- ex) <context:component-scan base-package="sample13"/>
→ ① sample13 패키지 하위 클래스를 스캔한다는 의미를 가진다.
② @Component, @Controller, @Service, @Repository 어노테이션이 붙어있는 클래스는 @Autowired 어노테이션
을 이용해서 필요한 빈 객체를 setter 메소드 없이 주입을 받는다.
2. Spring MVC의 구조와 흐름
1) Spring MVC 패턴의 구조
- Spring MVC 패턴에서는 Front Controller인 Dispatcher Servlet이 모든 요청의 진입점 역할을 한다.
- 아파치 톰캣을 구동하면 가장 먼저 web.xml 파일이 실행되는데, web.xml 파일 안에 DispatcherServlet 클래스의 이름과 위치가 등록되어 있다.
- 스프링의 환경 설정 파일인 servlet-context.xml과 root-context.xml 파일은 web.xml 파일이 실행될 때 함께 실행된다.
2) 요청 처리 순서
① DispatcherServlet이 요청을 수신
- 단일 front controller servlet
- 요청을 수신하여 처리를 다른 컴포넌트에 위임
- 어느 컨트롤러에 요청을 전송할지 결정
② DispatcherServlet은 HandlerMapping에 어느 컨트롤러를 사용할 것인지 요청
- 지금은 @RequestMapping을 이용해서 요청을 받는다.
③ DispatcherServlet은 요청을 컨트롤러에게 전송하고 컨트롤러는 요청을 처리한 후 결과 리턴
- 비즈니스 로직 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 뷰에서 사용됨
④ ModelAndView 오브젝트에 수행 결과가 포함되어 DispatcherServlet에 리턴
⑤ ModelAndView는 실제 JSP정보를 갖고 있지 않으며, ViewResolver가 논리적 이름을 실제 JSP이름으로 변환
⑥ View는 결과 정보를 사용하여 화면을 표현함
3) web.xml에 들어가는 내용
① DispatcherServlet 설정
- DispatcherServlet을 등록하고 servlet mapping을 설정한다.
② Spring의 환경 설정 파일
- Spring의 환경 설정 파일(servlet-context.xml)을 등록한다.
- DataBase 접속과 같이 공통적인 내용을 root-context.xml 파일에 등록한다.
③ 한글 인코딩을 처리하기 위한 필터
- 한글 인코딩을 처리하기 위한 필터
* 환경설정 파일은 resources 폴더에 위치시켜도 되는데, 이때 ‘classpath:’를 붙여줘야 한다.
ex) <param-value>/WEB-INF/spring/appServlet/classpath:servlet-context.xml</param-value>
4) Spring의 환경 설정 파일: servlet-context.xml
① ViewResolver 등록
- view 파일을 저장할 최상위 디렉토리(prefix) : /WEB-INF/views
- view 파일의 확장자(suffix) : .jsp
② base-package 등록
- base-package 하위 클래스를 스캔한다는 의미를 가진다.
- base-package 하위 클래스에 @Controller, @Service, @Repository 어노테이션이 붙어있는 클래스는 @Autowired 어노테이션을 이용해서 필요한 빈 객체를 setter 메소드 없이 자동으로 주입 받는다.
5) Spring의 환경 설정 파일: root-context.xml
① DB 연동을 위한 <bean> 등록
- 스프링으로 DB와 연동하는 경우, 세 가지 <bean>이 root-context.xml 파일에 등록된다.
6) Controller 클래스(HomeController.java) 구현
- 컨트롤러 클래스 위에는 @Controller를 붙인다.
- 클라이언트의 요청을 받기 위해서 받기 위해서는 @RequestMapping으로 요청을 받는다.
- 컨트롤러에서 view 페이지로 값을 가지고 갈 경우에는 Model이나 ModelAndView 클래스에 값을 저장해서 이동한다.
- return 할 경우에는 prefix와 suffix를 제외한 나머지 경로 파일명만 기술한다.
7) View 페이지(home.jsp) 구현
- 컨트롤러 클래스에서 Model에 저장해서 넘어온 값을 표현 언어(Expression Language)로 출력한다.
'Spring' 카테고리의 다른 글
94일차: Spring 게시판 환경 설정 / 글 작성 / 글 목록 / 상세 페이지_2021.11.01 (0) | 2021.11.01 |
---|---|
93일차: Spring DB 연동 / Spring 게시판 환경 설정_2021.10.29 (0) | 2021.10.29 |
92일차: Mybatis와 Spring으로 DB 연동_2021.10.28 (0) | 2021.10.28 |
91일차: Spring_컨트롤러의 어노테이션 / JSON 변환 / 인터셉터 / mybatis와 model1_2021.10.27 (0) | 2021.10.27 |
89일차: Spring Framework 개념 / 환경 구축 / 기초_2021.10.25 (0) | 2021.10.25 |