본문 바로가기
Java Web Programming/3. Servlet

[Servlet] 서블릿 Hierarchy 계층 구조 (Web Container, Web Server)

by 파프리카_ 2020. 8. 21.
728x90
반응형

[ Servlet 계층 구조 ]

출처 : cherwoo.tistory.com

<<interface>>

Servlet

: 모든 서블릿과 JSP가 하위로 implements 해야 하는 java web programming 의 최상위 인터페이스

* 주요 추상 메서드(abstract method)

→ init() / service(request, response) / destroy() 가 있다.

 

<<abstract>>

GenericServlet

: 프로토콜에 독립적인 클래스

: service()  메서드( ← abstract method)를 제외한

서버프로그램을 구현하는 데 유용한 메서드들을 하위(자식) 클래스에게 제공한다.

* 대표 메서드 →  init() / service(request, response) 등이 있다.

 

<<abstract>>

HttpServlet

: 일반적으로 java web programming을 위한 프로그램(Servlet, jsp)을 만들 때 상속받는 클래스

부모인 GenericServlet을 상속받고 있으며, Http Protocol에 의거한 서비스를 제공하는 데 유용한 기능을 내장하고 있다.

* 대표 메서드 →  service(request, response) /  doGet((request, response) / doPost(request, response) 등이 있다.

 

 

* 실생활 예제로 다시 한번 상기해보자

- 인터페이스 (interface)

 : Collection Framework, JDBC, Servlet 등의 응용기술이 인터페이스를 계층구조 상에 최상위로 두는 이유!

인터페이스(interface)와 구현 클래스(implementation)을 구분해서 설계하면 

  1. 결합도를 낮추어 유지보수성을 향상할 수 있다.
    → 인터페이스란 사용하는 측(일반 유저 or 프로그램 or 웹 컨테이너)과 구현하는 측(우리가 구현하는 Servlet)과의
    약속(메세지 방식)이다.

    → 구현부가 변경되어도 사용하는 측에서는 사용법이 변경되지 않는다 (→ 낮은 결합도 → 유지보수성 향상 )
  2. 인터페이스 사용법만 알면 구현체(구현부)를 몰라도 사용할 수 있다
    → 사용자 편의성 또는 생산성을 향상한다 (업무 분담을 통한 신속한 개발이 가능!)

* interface를 implements하는 하위 클래스들은 interface에서 명시한 abstract method를 반드시 구현해야 한다.

(만약 구현하지 않으면 자신도 abstract class로 선언되어야 한다.)

→ 표준화 (메세지 방식의 표준화를 의미) : 상위 인터페이스만 보고 사용이 가능

    (ex - 유튜브, CD Player의 재생버튼)

    (ex-  Collection interface만 이해하면 Set, List 계열의 자료구조체 사용 가능)


- 추상 클래스 (abstract class)

 : interface와 다르게 instance variable(인스턴스 변수)와 구현된 메서드(알고리즘)를 하위 클래스에 제공.

→ 재사용성 측면에서 장점

(but, interface는 다중상속-다양한 계층구조 형성이 가능하다. / 본래 자바는 단일상속-단일한 계층구조를 제공한다.)

 

참고 ) Encapsulation, Inheritance, Polymorphism (객체 지향 주요 개념 3가지 !)

상속 개념 정리 링크 https://creamilk88.tistory.com/19?category=865316

다형성 개념 정리 링크 https://creamilk88.tistory.com/22?category=865316


API 링크 : https://javaee.github.io/javaee-spec/javadocs/

 

Java(TM) EE 8 Specification APIs

 

javaee.github.io

[ The Generic Servlets API ]

( java EE API 사이트 참고 )

 

java 웹 프로그래밍의 최상위 인터페이스Servlet이다.

(*java se 프로그래밍의 최상위 인터페이스는 Obejct이다) 

 

 

그렇다면 우리가 코딩할 때(servlet class), 자주 쓰이는 HttpServlet의 API를 자세히 살펴보자.

( HTTP Servlet 계층구조 )

 

 

HttpServlet은 Servlet > GenericServlet > HttpServlet 구조이며,

 

> HttpServlet <<abstract>>

상단의 service는 클라이언트의 request method(요청방식)에 의거한 Servlet의 method이다.

→ 이에 의거해 내부적으로 doGet() / doPost() / doPut() / doDelete() 등으로 분기하여 dispatch한다.

→  abstract class로 부터 구현(상속)받은 것을 overriding한 것이어서 protected void로 반환

 

> Servlet <<interface>>

하단의 service 웹 컨테이너(user/client)에 의해 호출되는 메서드이다.

이  method는 내부적으로 HttpServletRequest와 HttpServletResponse 객체를 생성해서

오버로딩된 protexted service 메서드를 dispatch(처리해 보냄)한다.

 

상단의 service가 본인에게 맞게 overriding된 method이기 때문에 더 구체적인 기능을 한다.

(doGet / doPost / 등등등..)

 

결론적으로 개발자들은 서블릿을 만들 때, 

MyServlet (개발자들이 만드는 서블릿)

    extends HttpServlet 한 후

      doGet(request, response){  } or   doPost(request, response) 을 이용한다.

 


 

[ Web Container ]

: web container는 우리가 웹을 잘 만들기 위한 준비를 갖추고 있다!

→ browser(User/Client)가 GET 혹은 HTTP 방식으로 요청(request)하면

→ web server에서 감지하고

→ web container에서 그것을 실행해준다.

 

 

[ HTTP GET Request ]


 

728x90
반응형