basic/spring

[spring 02] Spring MVC 세팅, 구성

못지(Motji) 2021. 7. 30. 16:43

Spring MVC 기본 설정

• 클라이언트의 요청을 받을 DispatcherServlet을 web.xml 파일에 설정

• 클라이언트의 요청을 처리할 컨트롤러 작성

  1. web.xml 세팅
    ∙ <servlet><servlet-mapping> : 서블릿 매핑
    ∙ <filter><filter-mapping> : 한글 인코딩 처리
  2. 컨텍스트 xml 파일
    ∙ 스프링의 설정정보를 작성해줄 xml 파일생성
    ∙ WEB-INF > spring-servlet.xml 만들기
    ∙ 파일명은 스프링에서 정해진 규칙대로 해당 위치에 <servlet-name>에 지정된 이름과 동일한 이름 + -servlet.xml 을 합친 이름으로 작성해야 자동으로 호출되서 정보가 로딩됨

    ❕ xml 파일이 여러개 있거나 경로가 WEB-INF 바로 아래가 아닌 다른 경로일경우 세팅
    <servlet> 안에 <init-param> 태그를 통해 하나 이상의 xml 파일을 지정해 줄 수 있다.
    이때 파일명은 위에서 말한 네이밍룰이 무시되도 된다.(이름 마음대로)
  3. 컨트롤러 클래스 생성
    test.spring.bean 패키지 /hello/
    ▸ HelloController - "hello.git" - /spring/hello/hello.git
    ▸ TestController - "test.git" - /spring/test.git
    test.spring.testpsck 패키지 /test/
    ▸ TestBean - "hello.git" - /spring/test/helli.git
  4. @RequestMapping()
    ∙ 메소드가 처리할 요청 경로를 지정함 : 경로 지정 어노테이션 : 클래스 위에 @Controller 존재해야함
    ∙ 적용처 : 메소드 위(메소드레벨) / 클래스 위(클래스레벨)
    ▸ 메소드 레벨 : 단독으로 매핑 가능
    ▸ 클래스 레벨 : 단독으로 매핑 가능

    * 상속과 @RequestMapping
    - @ResuestMapping 정보는 상속됨
    - 단, 서브클래스에서 @RequestMapping을 재정의하면 수퍼클래스의 매핑 정보는 무시됨

    * 요청방식
    - GET
    - POST
    스프링 4.3 이후부터는 @GetMapping, @PostMapping

Spring MVC 구성

✔ DispatcherServlet (CEO)

• servlet 컨테이너(tocat)에서 HTTP 프로토콜을 통해 들어오는 요청을 관제하는 컨트롤러 이다.

• 이런 모든 요청을 프레젠테이션 계층의 제일 앞에 둬서 중앙집중식으로 처리해주는 프론트컨트롤러 : 창구역할

 

✔ 프로젝트 흐름

Server Start (웹서비스 시작)

▸web.xml 찾아 내부에 작성된 설정에 관련된 것들을 로딩

▸init-param의 xml 파일들에 설정된 것들 로딩

▸spring-servlet.xml에 component-scan 에서 @Controller 어노테이션이 붙은 클래스를 모두 스캔하여 매핑 주소들 준비

요청 > DispatcherServlet이 요청을 받아 > 요청을 매핑주소에 있는지 찾아서 해당빈 생성하고 매핑된 메소드 실행, view를 리턴 > 리턴 경로를 ViewREsolver가 받아 맞는 jsp 페이지를 찾아줌 > 응답해줌

스프링 MVC 프로젝트의 기본 구성

• 일반적으로 웹 프로젝트는 3-tier 방식으로 구성한다.

• Presentation <-> Business <-> Presistence tier

▸ Presentation tier : 화면 계층 : 화면에 보여주는 기술을 사용하는 영역 : jsp, html (view)

▸ Business tier : 비즈니스 계층 : 순수한 비즈니스 로직을 담고있는 영역 : xxxService와 같은 이름으로 사용 : Model, 자바 클래스

▸Presistence tier : 영속 계층 또는 데이터 계층 : 데이터를 어떤방식으로 보관하고 사용하는가에 대한 설계 : (Model), DAO, DB관련 (Mybatis : DB 프레임워크 사용할 예정)

[Spring MVC] <-> [Spring Core <-> [Mybatis세팅파일] <-]-> [Mybatis] <-> [DB]