본문 바로가기

국비필기노트/Spring

Spring_SpringBoot 기본요소

get방식으로 Controller에 html파일 연결해보기

 

어노테이션

 

 

get방식으로 <a href="/hello">를 통해서 Controller에 연결해보았다. 

하나씩 설명해보자면

 

@Controller

컨트롤러 클래스에는 @Controller가 필요하다. Controller에서 해당 mapping url을 찾는다.

 

@GetMapping

Spring은 getMapping을 통해서 html페이지와 연결이 되며 이는 Get방식의 요청 mapping이다. 

 

 

값을 리턴할 때 

 

 

컨트롤러에서 리턴값으로 문자를 반환하면 뷰리졸버(viewResolver)가 화면을 찾아서 처리해준다. 

즉, return "hello"를 작성함으로서 hello라고 하는 화면(hello.html)을 찾아서 mapping을 해주는 것이다.

 

jsp에선 hello.html을 찾기위해 html이 들어있는 모든 폴더명까지 입력을 해주어야 해당 폴더를 찾을 수 있었다. 그러나 스프링은 기본적으로 templates/ + {viewName} + .html이 인식되며 그 중 viewName만 return값으로 입력을 하면 알아서 찾아가는 것이다.

 

 

출력 데이터의 분할

 

일반 데이터 보내기

 

 

초록박스의 코드는 DB에 있는 값을 가지고 오는 장소로서 이를 사용하기위해 꼭 상단의 링크를 넣어주어야한다. 그럼 주황박스의 데이터는 무엇일까? 

 

첫번째는 서버를 실행하여 웹페이지를 출력시킨것이고 두번째는 자체적으로 드래그하여 콘솔에 넣은것이다.

초록색은 dB에서 가져온 Null값이 그대로 출력되어있고 주황색은 html에 직접 입력한 "안녕하세요"값이 출력되어있는 것이 확인된다.

 

즉, 데이터를 가지고 오는 방법이 구분되어지면서 개발의 영역과 아닌 퍼블리셔의 영역이 나누어지고 서로의 영역이 공존하면서도 협업하기에도 용이한 구조인 것이다.

 

 

해당 data에 값을 임의로 입력해주고싶다면 addAttribute를 사용한다.

해당 코드는 "data"라는 이름으로 "new Springboot!" 라는 데이터를 return hello로 hello를 찾아 ${data}에 넣어준다.

 

 

파라미터를 받아올 때 

 

 

 

 

@RequestParam: param값을 받아오나 필수적으로 값을 받아야한다.

required: @RequestParam의 파라미터에 대한 필수여부를 설정 가능하다. true- 필수(defalut), flase-필수아님

defaultValue: 파라미터의 값이 없을 경우 기본으로 들어갈 값

 

 

DispatcherServlet

 

스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어있다. 

DispatcherServlet은 JSP의 FrontController의 역할을 하며 스프링 MVC의 핵심이라고 할 수 있다.

 

DispatcherServlet > FrameworkServlet > HttpservletBean > HttpServlet

DispatcherServlet 위의 순서로 상속받고 상속받아 사용이 되는 것이다.

결국 HttpServlet을 좀 더 간편하게 사용하기 위해 DispatcherServlet을 사용한다고 생각하면 편하다.

 

 

 

해당 사진처럼 Dispatcher Servlet으로 사용자의 Http 모든 요청을 한꺼번에 받아온다.

 

  1. 핸들러조회: 핸들러 메핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
  2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
  3. 핸들러 어댑터 실행: 핸들러 어댑터를 실행
  4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
  5. ModelAndView반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
  6. ViewResolver 호출:  View Resolver를 찾고 실행한다.
  7. View반환: View Resolver의 논리이름을 물리이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
  8. 뷰렌더링: 뷰를 통해서 뷰를 랜더링한다.

 

우리는 해당 요청을 바탕으로 1번부터 8번까지 일련의 과정을 거치게되는데 이러한 복잡한 과정들 중 몇가지를 스프링이 자동으로 제공해준다.

 

 

보라색이 개발자의 영역, 파란색이 스프링이 제공하는 것, 연두색이 때때로 개발자가 작업을 하는 부분이다.

즉, Request 요청을 했을 때 개발자가 확인하기도 전에 스프링이 자동으로 Dispatcher Servlet로 요청을 받아오고 Mapping까지 내부에서 모두 제공해준다는 것이다. 

 

Controller와 View name을 설정하는것은 위에서 우리가 이미 했던 것이다. 

스프링을 사용함으로서 JSP에서 진행했던 모든 일련의 과정들이 생략된 것을 알 수 있다.