서블릿이 요구하는 구현 규칙을 지켜주면서 서블릿을 정의해주면 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)를 사용해서 개발 할 수 있다. 개발자로 하여금 핸들러, 요청처리 로직들에만 신경 쓸 수 있다.