Contents
- Servlet이 뭐임!
- Servlet 컨테이너가 뭐임!
- Servlet 컨테이너 뭐함!!
- Servlet이 왜 됨??
Servlet
클라이언트의 요청을 처리하고, 그 결과를 반환하는
Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술입니다. 클라이언트의 요청에 대한 결과를 다시 전송해주는 역할을 하는 자바 프로그램입니다. CGI는 사용자의 입력을 받아서 동적인 웹페이지를 만드는 것인데 Servlet은 JAVA언어로 구현 된 CGI라고 말합니다.
Servlet 컨테이너
Servlet을 관리해주는 컨테이너입니다. 우리가 서블릿을 만든다고 해서 클라이언트의 요청을 처리해주지는 않습니다. 그렇기 때문에 서블릿을 관리해주는 무언가가 필요한테 이것을 서블릿 컨테이너라고 합니다. 서블릿 컨테이너는 서블릿의 생명주기를 관리하고 요청에 따른 쓰레드를 생성해 줍니다.
Servlet 컨테이너의 역할
1. 웹서버와의 통신 지원
서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해줍니다. 서블릿 컨테이너는 소켓을 만들고 listen, accept 등의 기능을 API로 제공하여 복잡한 과정을 생략할 수 있게 해줍니다. 개발자가 서블릿에 구현해야 할 비지니스 로직에 대해서만 초점을 두게끔 도와줍니다.
2. 서블릿 생명주기 관리
서블릿 컨테이너는 서블릿의 실행부터 종료까지의 과정을 관리합니다. 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메소드를 호출합니다. 요청이 들어오면 적절한 서블릿 메소드를 호출합니다. 수명이 다 된 서블릿을 적절하게 가비지 콜렉터를 호출하여 안전하게 프로그램을 종료합니다.
3. 멀티쓰레드 지원 및 관리
서블릿 컨테이너는 요청이 올 때마다 새로운 자바 쓰레드를 하나 생성하는데, 서비스 메소드를 실행하고 나면, 해당 쓰레드는 자동으로 죽게 됩니다. 여러 요청이 들어온다면 컨테이너가 멀티쓰레드를 생성 및 운영해줍니다.
4. 선언적인 보안 관리
서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 됩니다. 일반적으로 보안관리는 XML 배포 서술자에다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능합니다.
Servlet 동작 방식
사용자의 요청
- url 입력합니다
컨테이너에서 request, response 객체 생성
- HttpServletRequest 객체와 HttpServletResponse 객체 생성합니다
사용자 요청 처리
- 컨테이너가 web.xml을 참조하여 사용자가 요청한 URL이 어떤 Servlet에 mapping 되는지 찾습니다.
- 사용자가 요청한 Servlet이 이전에 요청된 적이 없다면 객체를 생성하고, 해당 servlet의 init()매소드를 호출하고 메모리에 로드시킵니다.
- 컨테이너가 사용자의 요청을 처리할 쓰레드를 생성합니다.
- 쓰래드를 통해 Servlet의 service()메소드를 실행합니다.
- Service()메소드에서는 사용자의 요청 메소드(get, post)에 따라 doGet(), doPost()메소드가 호출된다. 이때 HttpServletRequest, HttpServletResponse 객체를 톰캣에 의해 인수로 전달받습니다.
응답
- doGet()또는 doPost()가 호출되어 사용자의 요청에 따른 페이지를 생성한 뒤 그것이 담긴 response객체를 컨테이너에서 HttpServletResponse로 바꾸어 사용자에게 응답을 보냅니다.
소멸
- 응답이 끝나면 HttpServletRequest 객체와 HttpServletResponse 객체를 소멸시킵니다.
- 쓰레드를 종료합니다.
'아 이게 뭐임!' 카테고리의 다른 글
SQL developer가 뭐임! (0) | 2021.07.06 |
---|---|
Web.xml이 뭐임! (0) | 2021.07.05 |
자바스크립트 시간 가져오기(시간 찍기) (0) | 2021.07.02 |
REST API가 뭐임!! (0) | 2021.07.02 |
Servlet이 뭐임!! (0) | 2021.07.01 |