JAVA - Servlet
클라이언트의 요청을 처리하고, 그 결과를 반환하는
Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
간단히 말해서, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술입니다. 그런데 좀더 들어가서 설명하면
클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다.
예를 들어, 어떠한 사용자가 로그인을 하려고 할 때. 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누릅니다.
그때 서버는 클라이언트의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는
것이 바로 서블릿(Servlet)입니다. 그래서 서블릿은 자바로 구현 된 *CGI라고 흔히 말합니다.
[ Servlet 특징 ]
-
클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
-
html을 사용하여 요청에 응답한다.
-
Java Thread를 이용하여 동작한다.
-
MVC 패턴에서 Controller로 이용된다.
-
HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
-
UDP보다 처리 속도가 느리다.
-
HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.
일반적으로 웹서버는 정적인 페이지만을 제공합니다. 그렇기 때문에 동적인 페이지를 제공하기 위해서 웹서버는
다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 합니다. 동적인 페이지로는 임의의 이미지만을 보여주는 페이지와 같이
사용자가 요청한 시점에 페이지를 생성해서 전달해 주는 것을 의미합니다. 여기서 웹서버가 동적인 페이지를 제공할 수 있도록
도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 어플리케이션이 CGI입니다.
[ Servlet 동작 방식 ]
- 사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송합니다.
- 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
- web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾습니다.
- 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출합니다.
- doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.
* 서블릿 동작 방식에 대하여...
* 1. 사용자(클라이언트)가 URL을 클릭하면 HTTP Request를 Servlet Container로 요청 전송(요청)한다.
* 2. 컨테이너는 web.xml에 정의된 url 패턴을 확인하여 어느 서블릿을 통해 처리해야 할지를 검색한다.(로딩이 안된 경우에는 로딩함. 로딩시, init() 호출됨)
* 3. Servlet Container는 요청을 처리할 개별 쓰레드 객체를 생성하여 해당 서블릿 객체의 service()메서드를 호출한다. (이 때 HttpServletRequest 및 HttpServletResponse 객체를 생성하여 파라미터로 넘겨준다)
* 4. service() 메서드는 메서드 타입을 체크하여 적절한 메서드를 호출한다.(doGet, doPost, doPut, doDelete 등...)
* 5. 요청처리가 완료되면, (httpServletRequest 및 HttpServletResponse 객체는 소멸된다.)
* 6. 컨테이너로부터 서블릿이 제거되는 경우에는 destroy()메서드가 호출된다.
1. 객체가 생성되면 init메서드가 단 한번 호출된다. init 메서드에서는 주로 초기화 작업을 한다.
2. 그 후에는 클라이언트의 요청이 있을 때 service 메서드가 실행된다
3. 여러 클라이언트가 동시에 요청을 하더라도 스레드가 생성되므로 동시에 service메서드가 실행되기 때문에 수행 속도가 빠르다.
4. 서블릿이 더 이상 서비스를 하지 않을 경우 destory메서드가 호출된다.