- 위와 같이 WAS에 Form 데이터가 POST로 요청이 들어오면
- WAS는 비즈니스 로직을 실행하기 전에 위와 같이 수 많은 작업들을 해야한다.
Servlet을 지원하는 WAS 사용
- 하지만 Servlet을 사용하면 위와같이 요청 메시지를 파싱하고 읽고 응답 메시지를 생성하는 것 까지 전부 자동으로 해결해준다.
- 즉 제일 중요한 비즈니스 로직에 집중할 수 있게 해준다.
Servlet
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServelt extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
// Application Logic
...
}
}
- urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행된다.
- HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
- HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
- 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다.
Servlet - HTTP 요청,응답 흐름
- 웹 브라우저에서 WAS에 /hello URL로 HTTP 요청메시지를 보낸다.
- WAS는 웹 브라우저에서 온 HTTP 요청 메시지를 기반으로 request와 response 객체를 만든다.
- Servlet 컨테이너에 있는 Servlet에 request와 response를 parameter로 넘겨서 실행시킨다.
- Servlet이 끝난 후 리턴을 하면 response 객체를 바탕으로 HTTP 응답메시지를 만든다.
- 웹 브라우저에게 HTTP 응답 메시지를 보낸다.
- HTTP 요청 시
- WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다.
- 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용할 수 있다.
- 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력할 수 있다.
- WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성한다.
Servlet 컨테이너
- WAS안에는 Servlet 컨테이너가 있다.
- Servlet 컨테이너에서 Servlet 객체를 자동으로 생성,호출,관리해준다.
- Tomcat처럼 Servlet을 지원하는 WAS를 Servlet 컨테이너라고 한다.
- Servlet 컨테이너는 Servlet 객체를 생성,초기화,호출,종료하는 생명주기를 관리한다.
- Servlet 객체는 싱글톤으로 관리한다.
- 고객의 요청이 올 때마다 계속 객체를 생성하는 것은 비효율적이다.
- 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용한다.
- 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근한다.
- 때문에 공유 변수 사용에 주의해야 한다.
- 서블릿 컨테이너 종료시에 함께 종료된다.
- JSP도 서블릿으로 변환되어서 사용한다.
- 동시 요청을 위한 멀티 쓰레드 처리를 지원한다.