[ Servlet 계층 구조 ]
<<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)을 구분해서 설계하면
- 결합도를 낮추어 유지보수성을 향상할 수 있다.
→ 인터페이스란 사용하는 측(일반 유저 or 프로그램 or 웹 컨테이너)과 구현하는 측(우리가 구현하는 Servlet)과의
약속(메세지 방식)이다.
→ 구현부가 변경되어도 사용하는 측에서는 사용법이 변경되지 않는다 (→ 낮은 결합도 → 유지보수성 향상 ) - 인터페이스 사용법만 알면 구현체(구현부)를 몰라도 사용할 수 있다
→ 사용자 편의성 또는 생산성을 향상한다 (업무 분담을 통한 신속한 개발이 가능!)
* 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/
[ The Generic Servlets API ]
→ java 웹 프로그래밍의 최상위 인터페이스는 Servlet이다.
(*java se 프로그래밍의 최상위 인터페이스는 Obejct이다)
그렇다면 우리가 코딩할 때(servlet class), 자주 쓰이는 HttpServlet의 API를 자세히 살펴보자.
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 ]
'Java Web Programming > 3. Servlet' 카테고리의 다른 글
[Servlet] 서블릿 ServletConfig / ServletContext (2) | 2020.08.21 |
---|---|
[Servlet] 서블릿 Life Cycle 생명주기 (0) | 2020.08.21 |
CODE [Servlet] check box 연습 예제 (3) | 2020.08.21 |
[Servlet] form 연동 (2) | 2020.08.20 |
[Servlet] Web 기초 (0) | 2020.08.20 |