아직은 정체성이 없는 블로그

[Web][Servlet] Servlet 이란? 본문

Web

[Web][Servlet] Servlet 이란?

coooding 2020. 6. 23. 01:38

servlet 이란?

 

 

서블릿의 정의를 위키백과를 참고하자면 아래와 같습니다.

 

자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다.

자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다.

서블릿은 JSP와 비슷한 점이 있지만, JSP HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.

자바 서블릿은 자바 EE 사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.

-출처 위키백과

 

 

다시 한번 한줄로 서블릿을 정의하자면 아래와 같이 정의할 수 있습니다.

 

웹프로그래밍에서웹 프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게

전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

 


 

Servlet Program의 기본적인 동작 과정

 

1. Web ServerHTTP requestWeb Container(Servlet Container)에게 위임한다.

   1) web.xml 설정에서 어떤 URL과 매핑되어 있는지 확인

   2) 클라이언트(browser)의 요청 URL을 보고 적절한 Servlet을 실행

 

 

2. Web Containerservice() 메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.

   1) Web Container는 적절한 Servlet 파일을 컴파일(.class 파일 생성)한다.

   2) .class 파일을 메모리에 올려 Servlet 객체를 만든다.

   3) 메모리에 로드될 때 Servlet 객체를 초기화하는 init() 메서드가 실행된다.

 

 

3. Web ContainerRequest가 올 때마다 thread를 생성하여 처리한다.

   1)각 threadServlet의 단일 객체에 대한 service() 메서드를 실행한다.

 


 

Servlet 생명주기

 

 

클라이언트의 요청이 들어오면 WAS는 해당 요청에 맞는 Servlet이 메모리에 있는지 확인한다.

 

  -만약 메모리에 없다면

      -> 해당 Servlet Class를 메모리에 올린 후(Servlet 객체 생성) init() 메서드 실행

      -> 이후 service() 메서드를 실행

 

  -메모리에 있다면

      -> 바로 service() 메서드 실행

 

 

메소드 설명

  • init()

    • 한 번만 수행된다. 클라이언트의 요청에 따라 적절한 Servlet이 생성되고 Servlet이 메모리에 로드될 때 이 메서드가 호출된다

    • 역할: Servlet 객체를 초기화

  • service(request, response)

    • 응답에 대한 모든 내용은 service() 메서드에 구현해야 한다.

      • HttpServlet을 상속받은 Servlet 클래스(이하 하위 클래스)에서 service() 메서드를 오버라이드 하지 않았다면, 그 부모인 HttpServletservice()가 호출된다.

      • HttpServletservice() 메서드는 템플릿 메서드 패턴으로 구현되어 있다.

      • service() 메서드는 requesttype(HTTP Method: GET, POST, PUT, DELETE )에 따라 적절한 메서드(doGet, doPost, doPut, doDelete )를 호출한다.

    • 메서드가 return하면 해당 thread는 제거된다.
  • destroy()
    • 한 번만 수행된다.  Web Application이 갱신되거나 WAS가 종료될 때 호출된다.
    • 역할: Servlet 객체를 메모리에서 제거

 


 

서블릿의 기본 코드

public class LoginServlet extends HttpServlet {
   
  public void doGet(HttpServletRequest request,
  	HttpServletResponse response) throws IOException {
 		 ……여기에 GET 처리를 쓴다…… } 
  
  public void doPost(HttpServletRequest request,
  	HttpServletResponse response) throws IOException {
  		……여기에 POST 처리를 쓴다…… }

}

 

1. 클래스는 HttpServlet을 상속받는다.

 

서블릿의 기본이 되는 것은 javax.servlet.http 패키지에 준비되어 있는 HttpServlet 클래스이다. 서블릿은 이 클래스를 상속하여 만든다.

 

2. 기본은 'doGet'과 'doPost' 메소드

 

클래스에 거의 필수 항목으로 제공되는 것은 'doGet'과 'doPost'메소드이다. 이들은 각각 HTTP 메소드인 GET/POST에 액세스할 때 실행된다. 이 중에 하나(또는 양쪽)가 반드시 준비될 것이다. 어느 메소드도 IOException이 발생할 수 있으므로 throws IOException해 둔다.

 

3. HttpServletRequest에서 요청 정보를 관리

 

이러한 메소드는 두 가지 중요한 객체가 인수로 전달된다. 하나는 'HttpServletRequest'이다. 이것은 요청 정보(클라이언트가 서블릿에 액세스 하여 왔을 때 정보)를 관리하는 객체이다. 요청에 대한 다양한 정보는 이 객체의 메소드를 호출하여 얻을 수 있다.

 

4. HttpServletResponse에서 응답을 관리

 

또 다른 객체가 "HttpServletResponse"이다. 이것은 응답 정보(서블릿에서 클라이언트에 반환하는 정보)를 관리하는 객체이다. 클라이언트에 출력 등도 이 HttpServletResponse에서 PrintWriter를 꺼내어 써서 내보낸다.

 

 

 


 

참고사이트

https://mangkyu.tistory.com/14
https://breath91.tistory.com/m/82
https://araikuma.tistory.com/275
https://gmlwjd9405.github.io/2018/10/28/servlet.html
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF

 

Comments