Servlet 학습 내용 정리
Servlet
한 줄 정의
클라이언트 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
- 요약: 자바를 사용하여 웹을 만들기 위해 필요한 기술
- 클라이언트의 어떠한 요청에 대한 결과를 다시 전송 해주는 프로그램
- 로그인을 한다고 하면 사용자에게 입력 받은 ID, PASS를 확인하고 다음 페이지를 띄워준다.
Servlet 특징
- 클라이언트 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- html을 사용하여 요청에 응답한다.
- Java Thread를 이용하여 동작한다.
- MVC 패턴에서 Controller로 이용된다.
- HTTP 프로토콜 서비스는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
- UDP 보다 처리 속도가 느리다.
- UDP: 데이터를 데이터그램 단위(비연결형 서비스)로 처리하는 프로토콜
- HTMl 변경 시 Servlet을 재 컴파일해야하는 단점이 있다.
- 일반적으로 웹서버는 정적인 페이지만을 제공하므로 동적인 페이지를 제공하기 위해서는 다른 곳의 도움을 받아 동적 페이지를 작성해야 합니다. 동적인 페이지로는 임의의 이미지만을 보여주는 페이지와 요청한 시점에서 페이지를 생성해서 전달한다.
한 줄 정의
클라이언트 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
- 클라이언트의 어떠한 요청에 대한 결과를 다시 전송 해주는 프로그램
- 로그인을 한다고 하면 사용자에게 입력 받은 ID, PASS를 확인하고 다음 페이지를 띄워준다.
- UDP: 데이터를 데이터그램 단위(비연결형 서비스)로 처리하는 프로토콜
Servlet 동작 방식
- 사용자가 URL을 입력하면 HTTP Resquest가 Servle Container로 전송한다.
- 요청을 전송받은 객체를 생성(Servlet Contaioner는 HttpServiceRequest, HttpServiceResponse)
- web.xml 기반으로 사용자가 요청한 URL이 어느 서블렛에 대한 요청인지 확인
- 해당 서블릿에서 service메소드를 호출한 후 클라이언트의 GET, POST 여부에 따라 doGet(), doPost()를 호출합니다
// 부모 service 호출 이후 doGet, doPost 호출 super.service(req, resp);
- doGet, doPost 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다.
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.
Servlet Container
서블릿을 관리해주는 컨테이너
- 서블릿이 어떤 역할을 수행하는 정의서라면 서블릿 컨테이너는 정의서를 기반으로 수행을한다.
- 클라이언트 의 요청을 받아주고 응답을 할 수 있게, 웹서버와 소켓으로 통신하여 대표적으로 톰캣이 있다.
- 톰캣을 실제로 웹 서버와 통신하여 JSP(자바 서버 페이지)와 Servlet이 작동하는 환경을 제공해준다.
Servlet Conainer 역할
1. 웹서버와의 통신 지원
- 일반적으로 소켓을 만들고 listen, accept 를 해야하지만 서블릿 컨테이너는 이런 기능을 API로 제공하여 복잡한 과정을 생략할 수 있게 해준다. 그래서 개발자가 서블릿에 구현해야할 비즈니스 로직에 대해서만 초점을 두게끔 도와준다.
2. 서블릿 생명 주기(Life Cycle) 관리
- 서블릿의 탄생과 죽음을 관리한다. 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고 요청이 들어오면 적절한 서블릿 메서드를 호출한다.
- 서블릿 생명이 다 한 순간에는 적절하게 가비지 콜렉션을 진행하여 편의 제공한다.
3. 멀티쓰레드 지원 및 관리
- 요청이 들어올 때 마다 새로운 자바 스레드를 생성하는데 HTTP 서비스 메서드를 실행하고 나면 스레드는 자동으로 죽는다.
- 서버가 다중 스레드를 생성 및 운영해주니 스레드의 안정성이 높다.
4. 선언적인 보안 관리
- 보안관리는 XML 배포 서술자에 다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능하다.
Servlet 생명주기
- 클라이언트의 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인하고, 없을 경우 init()메소드를 호출하여 적재한다.
- init()메소드는 처음 한번만 실행되기 때문에, 서블릿의 쓰레드에서 공통적으로 사용해야하는 것이 있다면 오버라이딩하여 구현하면 된다.
- 실행 중 서블릿이 변경될 경우, 기존 서블릿을 파괴하고 init()을 통해 새로운 내용을 다시 메모리에 적재한다.
- init()이 호출된 후 클라이언트의 요청에 따라서 service()메소드를 통해 요청에 대한 응답이 doGet()가 doPost()로 분기된다.
- 이때 서블릿 컨테이너가 클라이언트의 요청이 오면 가장 먼저 처리하는 과정으로 생성된 HttpServletRequest, HttpServletResponse에 의해 request와 response객체가 제공된다.
- 컨테이너가 서블릿에 종료 요청을 하면 destroy() 메소드가 호출되는데 마찬가지로 한번만 실행되며, 종료시에 처리해야하는 작업들은 destroy()메소드를 오버라이딩하여 구현하면 된다.
Author And Source
이 문제에 관하여(Servlet 학습 내용 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@donsco/Servlet-학습-내용-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)