Springboot 개념정리 - DispatcherServlet

Yuri Lee·2020년 9월 10일
0

Springboot 개념정리

목록 보기
8/10

스프링부트 강좌 with JPA 12강 - DispatcherServlet은 무엇인가요?

request 요청을 하는데
.do 라는 주소가 들어가면 frontController로 보내라는 약속을 짜놓는다. web.xml에..

url, 자바파일이든 바로 자원에 접근하지는 못한다. 톰켓으로 간다. 톰켓으로 가면 최초에 request, response 객체를 만든다. request는 요청한 사람의 정보를 들고 있다. 어떤 데이터를 들고 왔는지 등등..요청한 사람의 정보를 토대로 response라는 객체를 만든다.

결국은 request는 나한테 요청한 정보가 들어있고, reponse에는 응답할 데이터를 넣어주면 된다.

이것을 톰켓이 자동으로 만들어준다. 원래 들어올때 통신을 bufferedreader, bufferwriter로 했는데 ....

그러면 buffer,,는 가변길이의 문자를 받는다. 그런 문제를 받아 톰켓이 알아서 객체로 만들어준다.

무엇이 좋은가?..
자바에서 request.함수, 변수등을 사용할 수 있는데 이게 톰켓이 만들어준다.

그다음에 web.xml에서 자기 일을 하는데.. 여기서 jsp 서블릿 매핑이 너무 많이 있으면 너무 복잡해진다. 그래서 특정주소가 들어오면 frontController이 낚아챌 수 있도록 해준다.
a.do, b.do 등등..

a.do가 주소가 들어오면 1자원을 찾아갈 수 있도록 request한다. 근데 request할 때 자원의 접근을 못한다고 스프링에서 막아놓는다고 했는데.. 내부에 있으니까 가능하다~~~

새로운 요청이 들어온 것이다.
이 request가 일어나면 실제로는 여기있는 객체가 바뀐다. request와 response가 바뀐다.

재요청시에

request, respnse

이전에 있는 request에 덮어쓰는 방법이 있다.
기존에 있는 게 사라지는 게 아니라 ..
다시 유지하는 방법이 필요하다. 기존에 있는 request와 response를 지우지 않고..

원래 A가 요청하면 B가 응답한다. 요청할때마다 새로 만들어진다.


한번 요청을 하고 나서 request, response 정보가 만들어졌는데 frontController에서 재요청을 한다. 재요청을 하면 request, response 정보가 새로 만들어져야 하는데 그럼 A에 대한 정보가 사라진다. 그래서 기존의 정보를 유지하는 기법이 있는데 그게 requestDispatcher을 이용한다. 기존의 있던 request와 response가 사라지지 않고 재사용이 가능하다.

(4) FrontController 패턴
최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨준다. 왜? web.xml에 다 정의하기가 너무 힘듬.

이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 new될 수 있다. 그래서 아래의 RequestDispatcher가 필요하다.

(5) RequestDispatcher
필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request와 response를 그대로 유지시켜준다.

이것을 언제 많이 사용할까? A라는 사람이 a.jsp를 요청한다. 웹브라우저로 요청했기 때문에 응답은 a.html로 올 것이다. 화면은 a.html이 있을 것이다. 그럼 이때 a.jsp 에 대한 request, response 객체가 만들어졌을 것이다.

a가 받은 화면에서 어떤 버튼을 클릭했을 때 다른 화면으로 넘어가야 할때..

A --- b.jsp --> B
<-- b.html ---

그럼 b.html을 보게 된다.

새로운 요청시에 기존의 request, response 가 사라지지 않도록 requestDispatcher을 이용한다.

RequestDispatcher를 이용해야 페이지간 데이터 이동이 가능하다. 데이터를 들고 페이지를 이동할 수 있다.

(6) DispatcherServlet
FrontController 패턴을 직접짜거나 RequestDispatcher를 직접구현할 필요가 없다. 왜냐하면 스프링에는 DispatcherServlet이 있기 때문이다. DispatcherServlet은 FrontController 패턴 + RequestDispatcher이다.

DispatcherServlet이 자동생성되어 질 때 수 많은 객체가 생성(IoC)된다. 보통 필터들이다. 해당 필터들은 내가 직접 등록할 수 도 있고 기본적으로 필요한 필터들은 자동 등록 되어진다.

-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-

profile
Step by step goes a long way ✨

0개의 댓글