클라이언트가 요청을 하면
아파치 톰캣 서버가 실행될때(Ctrl+11할때) 문지기인 web.xml이 읽는다.
web,xml이 필터링을 하게되는데
대부분 원하는 않는 것을 걸러내기도 하지만 가끔식 변형을 시키기도 한다.
web.xml을 배포서술자라고 한다.
더 세세하게 필터링을 하고싶으면 Controller입구에서 할 수있다.
클라이언트는 Http요청을 한다.
Http요청에는 header와 body가 있다.
header에는 주소지가 있고 body에는 데이터가 담겨져 있다.
get요청에는 header만 있고 body는 없다.
get은 요청할 데이터를 쿼리스트링에 달고 들어간다,
post요청은 header와 body 두개 다 있다.
요청이 들어오면 톰캣이 request객체와 response객체를 만들어준다.
--> 요청이 들어오면 request,response객체가 생긴다.
Spring에 들어온것을 계속해서 기억하고 싶으면 request에 저장을한다. ((ex) num=10)
request는 클라이언트에 응답을 해주면 소멸된다.
DS = Dispatcher Servlet
개발자인 우리가 만드는 것이 아니라 Spring이 만드는 것이다.
DS는 Controller를 찾아준다.
생명주기
클라이언트가 요청 - 문지기(web.xml)통과 - 톰캣이 request,response 생성 - DS(dispatcher Servlet) -
Controller - IOC(service - Dao) - DB(DB의 데이터를 응답받는다.) - 다시 Controller -
DS(Dispatcher Servlet)이 응답을 해준다. - 다시 문지기(web.xml) 통해서 = 클라이어트로 응답 -
응답시 request,response 소멸
클라이언트 두개가 동시에 요청이 오면 톰캣이 스레드를 두개를 만든다.
문지기(web.xml)도 두명일 것이다. spring에 들어오면 request와 response를 톰캣이 만들어 준다.
request가 두개가 생길 것이다.
응답은 누가 더 빠를지 모른다.
세션(session)
1. 오래보관하고싶다면 세션에 저장
2. 권한 처리할때(인증 용도) 저장
세션은 모든 사용자가 공유해서 사용한다.
응답을해도 계속 가지고싶으면 session에 저장을 한다.
세션은 정보를 구분하기 위해 세션키가 존재한다.
키 값은 랜덤으로 만들어진다.
세션은 메모리관점에서 오래보관하고 싶을때 사용한다.
브라우저(앱은 해당 안됨), 이것은 브라우저의 프로토콜이다. - 약속
브라우저에 쿠키라는 저장소가 있다.
최초에 요청을 하면 브라우저의 쿠키영역에 정보가 없기 때문에
요청을 할때 sseion에 예로 들어서 num =1 이라고 값을 남겼다.
그럼 톰캣이 자동으로 sseion key를 만들어준다. 예로들어서 5376
session키를 톰캣이 response의 header에 담아준다.
브라우저는 buffered reader를 통해 응답받은 header와body를 확인한다.
쿠키의 정보가 있다면 그 값을 브라우저에 저장한다.
만들어진 쿠키를 가진상태로 요청
-> session으로 갔더니 sessionID와 동일한 ID가 있다면 그 session의 데이터를 가지고 들어간다.
restController는 요청하면 데이터를 돌려받는다.
요청을 하면 그대로 응답을 바로 한다.
클라리언트 -> Controller 요청하면 request 생긴다.
RestController는 앱에서 데이터를 가지고 오는 것이고
Controller는 Html파일을 view시켜주는 것이다.
클라이언트가 -> Controller한테 요청을한다. request1이 생긴다.
Controller -> view 요청하면 request2가 생긴다.
view는 Controller의 데이터(request2)를 가지고 있다.
request2에는 클라이언트가 Controller에게 요청할때의 데이터 request1은 가지고 있지 않다.
view는 Controller가 요청을 한지 알지 클라이언트가 요청한지 모른다.
RequestDispatcher 기술을 사용하여
요청받았던 request 데이터를 request2로 덮어쓴다.
Controller ->view로 갈때 RequestDispatcher를 사용한다.
request2에는 클라이언트가 Controller에게 요청했던 request 데이트까지 가지고 있을 것이다.
RequestDispatcher는 Spring의 기본동작이다.
'Springboot' 카테고리의 다른 글
Mapping 메서드 데이터 받기 - get, psot, put, delete (0) | 2022.08.29 |
---|---|
Mapping 메서드 - get, post, put, delete (0) | 2022.08.29 |
Controller - 로그인 (0) | 2022.08.26 |
lombok (0) | 2022.08.26 |
데이터 전달 - 쿼리스트링, 패스 값 받기 (0) | 2022.08.25 |