서블릿(Servlet)의 정의는 다음과 같습니다.
"웹 요청(request)의 동적인 처리가 가능한 서버(Server-side)의 자바 프로그램"
[서블릿의 특징]
- 서블릿은 WAS안에 있는 서블릿 컨테이너를 통해 관리가 됩니다. (참고: was설명)
- 서블릿을 사용하게 되면 동적인 페이지를 생성할 수 있습니다.(참고 : 동적페이지 vs 정적 페이지)
- 서블릿은 JAVA 코드입니다. 서블릿 안에는 HTML 코드가 들어가 있습니다.
(※JSP는 HTML코드 안에 JAVA 코드를 넣습니다.)
[서블릿 동작 순서 예시]
다음과 같은 HTML FORM이 있습니다.
<form name="loginForm" method="post" action="loginServlet">
Username: <input type="text" name="username"/> <br/>
Password: <input type="password" name="password"/> <br/>
<input type="submit" value="Login" />
</form>
1) form 태그에서 action에 어떤 서블릿을 사용할지 정해주고("loginServlet"), method에는 어떤 method를 사용할지 정해줍니다.("post")
2) 그 다음 웹 서버로 전달합니다.
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// html 폼에서 받은 정보
String username = request.getParameter("username");
String password = request.getParameter("password");
// get response writer
PrintWriter writer = response.getWriter();
// HTML 코드 생성
String htmlResponse = "<html>";
htmlResponse += "<h2>Your username is: " + username + "<br/>";
htmlResponse += "Your password is: " + password + "</h2>";
htmlResponse += "</html>";
// 생성된 HTML 코드를 return response
writer.println(htmlResponse);
}
}
3) 웹 서버에서 받은 정보는 Web Application Server에 있는 서블릿 컨테이너에게 전달 됩니다.
4) 서블릿 컨테이너는 "loginServlet"에서 처리해야 한다는 것을 확인한 후에
-> LoginServlet 인스턴스가 없다면 생성하여 초기화 후 스레드를 생성합니다.
-> 있다면 기존 인스턴스에 스레드를 생성합니다.
서블릿 인스턴스는 서블릿 컨테이너 당 하나만 존재합니다!
5) doPost method를 실행하여 동적인 HTML 파일을 작성 한 후에 서블릿 컨테이너에 전달합니다.
6) 서블릿 컨테이너는 HTTP 형태로 바꾸어 웹 서버로 전송합니다. 그리고 스레드는 종료됩니다.
[서블릿 라이프 사이클]
위에서 본 것과 같이 서블릿 컨테이너는 서블릿 인스턴스를 찾거나, 생성하여 스레드를 사용해 실행합니다.
다시 말하면, 서블릿 컨테이너는 요청을 받으면, 스레드를 생성하여 서블릿 인스턴스를 실행합니다.
만약 요청이 N개가 들어온다면 스레드도 N개가 생성됩니다. (최대 스레드 개수를 넘지 않는 선에서)
서블릿 인스턴스는 다음과 같은 라이프 사이클을 가지고 있습니다.
- 생성 될때 init() 메서드가 실행됩니다.
- 서블릿이 요청을 받을 때마다 서블릿의 service() 메서드가 호출됩니다.
- service() 메서드는 HTTP 요청 타입(GET, POST, PUT, DELETE 등등)을 확인하고 그에 맞는 메서드(doGet, doPost 등등)을 호출합니다.
- 마지막으로 서블릿 인스턴스가 소멸할 때는 destroy() 메서드가 호출 됩니다.
'프로그래밍 > WEB' 카테고리의 다른 글
[Web/용어정리] JSP와 Servlet (0) | 2021.10.25 |
---|---|
[Web/용어정리] 동적, 정적 웹 페이지 (0) | 2021.10.24 |
[Web/용어정리] 웹 서버, 웹 컨테이너, 웹 어플리케이션 서버의 차이 (0) | 2021.10.24 |