서블릿

Woolly·2023년 6월 19일
0

** HTML FORM을 POST로 데이터를 저장할 경우

  • Submit 버튼을 누르면 웹 브라우저가 요청 HTTP 메시지를 생성함
  • HTTP 메시지를 만들어서 서버로 전송
  • 웹 애플리케이션 서버를 처음부터 끝까지 구현해야 할 경우, HTTP 요청 메시지를 분해해야 함.

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=20


• 서버 TCP/IP 연결 대기, 소켓 연결
• HTTP 요청 메시지를 파싱해서 읽기
• POST 방식, /save URL 인지
• Content-Type 확인
• HTTP 메시지 바디 내용 피싱

• username, age 데이터를 사용할 수 있게 파싱

• 저장 프로세스 실행
• 비즈니스 로직 실행

• 데이터베이스에 저장 요청

• HTTP 응답 메시지 생성 시작

• HTTP 시작 라인 생성
• Header 생성
• 메시지 바디에 HTML 생성에서 입력

• TCP/IP에 응답 전달, 소켓 종료


서버에서 개발자가 처리해야하는 작업들이 너무 많음. 비효율적.

-> 서블릿의 등장

서블릿을 지원하는 WAS를 사용하면, 비즈니스 로직 실행 외에 모든 기능들을 자동화 해줌.

서블릿

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override 
    protected void service(HttpServletRequest request, HttpServletResponse response) { 
        //비지니스 로직 
    } 
}
  • HttpServlet 상속 필수
  • 파라미터 2개 : HttpServletRequest, HttpServletResponse
    -> HTTP 요청 정보를 편리하게 사용할 수 있도록 만들어줌
    -> 객체를 사용하면 된다.
  • urlPatterns(“/hello”)의 URL이 호출되면 서블릿 코드가 실행
  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
  • HTTP 응답 정보를 편리하게 사용할 수 있는 HttpServletResponse

1) 웹 브라우저에서 localhost:8080/hello - HTTP 요청
2) WAS 서버에서 HTTP 요청 메시지를 기반으로 request, response 객체 생성
3) request, response 객체를 파라미터로 넘기면서 helloServlet 서블릿 객체 호출
4) 끝나고 리턴하면, response 객체 정보를 바탕으로 HTTP 응답 메시지 생성
5) 웹브라우저에 응답 전달
6) 웹브라우저가 HTML을 렌더링해서 보여줌

  • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
  • 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
  • WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성

서블릿 컨테이너

  • 서블릿 객체를 직접 생성하는 개념이 아님

  • WAS 안에 서블릿 컨테이너가 있는데, 서블릿 객체를 서블릿 컨테이너가 자동으로 생성, 호출, 관리(생명주기)해줌

  • 서블릿 여러개도 가능

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함

  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리

  • 서블릿 객체는 싱글톤으로 관리
    - 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율
    - 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
    - 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
    - 공유 변수 사용 주의
    - 서블릿 컨테이너 종료시 함께 종료

  • JSP도 서블릿으로 변환 되어서 사용

  • 동시 요청을 위한 멀티 쓰레드 처리 지원

** 최초 로딩 시점에 서블릿 객체, 싱글톤으로 하나

profile
Ad Astra

0개의 댓글