Servlet  

서블릿이 요구하는 구현 규칙을 지켜주면서 서블릿을 정의해주면
http 요청 정보를 쉽게 사용할 수있고 처리결과를 쉽게 응답으로 변환 할 수 있다.

서블릿을 이용해서 웹요청을 다루게되면 개발자들이 진짜 집중해야할 비지니스 로직에 더 집중할 수있다.

서블릿이 생성되면 init메서드가 호출되고 소멸될때는 destroy()메서드가 호출된다.
서비스는 요청을 처리할때 호출이 되는 메서드다.

 

서비스의 로직수행: Get요청이 들어오면 doGet메서드를 호출하고
Post요청이 들어오면 doPost 메서드가 호출된다.
doxxx를 찾아 재정의해주는것

서비스 메서드만 재정의해서 처리 방법을 지정한다.

 


서블릿 컨테이너와 서블릿이 호출되는 과정
서블릿컨테이너 : 서블릿을 담아 관리하는 바구니
사용자 요청이 들어오면 서블릿 컨테이너는 해당요청과 매핑된 서블릿을 찾는다.

설정파일에 정의가 되어있다. 
/hello라는 요청이 들어오면 HelloServlet이라는 서블릿으로 처리하겠다

이 설정을 서블릿 컨테이너가 읽어서 어떤 서블릿이 필요한지 알게되면
서블릿 인스턴스가 컨테이너에 있는지 확인한다.

인스턴스가 컨테이너에 존재한다면 그 인스턴스를 그대로 사용한다.
없으면 생성해서 사용 ( 아까 서블릿의 init()메서드가 호출된다)

 

서블릿객체는 소멸되지 않고있다가 다음번 같은 요청이 들어왔을때 
서블릿 컨테이너에 의해서 또 호출되서 사용된다.
서블릿 컨테이너는 서블릿의 생명주기를 관리한다

1. Servlet Request/ Servlet Response 객체생성
2. 설정 파일을 참고하여 매핑할 Servlet을 확인
3. 해당 서블릿 인스턴스 존재 유무를 확인하여 없으면 생성 init()
4. Servlet container 에 스레드를 생성하고 res,req를 인자로 service실행

만약 여러 요청이 들어온다면 ?
스레드당 다른 서블릿이 처리할 수있고 여러스레드에서 한 서블릿의 여러 요청을 동시에 처리할 수있다.


Dispatcher Servlet이 web요청을 처리하는 과정

디스패처 서블릿은 모든 요청을 다받고 핸들러매핑이라는 애가 내 요청을 처리할때 
컨트롤러를 찾아서 반환하고 핸들러어뎁터는 그 컨트롤러의 메서드를 호출해서 처리로직을 수행

 

스프링으로 웹요청 :
스프링 mvc에서 제공하는 디스패처 서블릿과 웹 요청처리 관련 구현체들을 사용할 수있다
스프링 컨테이너 (스프링 Ioc)를 사용해서 개발 할 수 있다.
개발자로 하여금 핸들러, 요청처리 로직들에만 신경 쓸 수 있다.

+ Recent posts