오봉이와 함께하는 개발 블로그

Servlet - Servlet 개요 본문

BE/Servlet

Servlet - Servlet 개요

오봉봉이 2021. 12. 27. 19:55
728x90

JSP와 Servlet

  • JSP (Java Server Pages)
    • HTML 내에 Java 언어를 삽입한 문서
    • .jsp
  • Servlet (Server + Applet)
    • Java 언어로 이루어진 웹 프로그래밍 문서
    • 자바 코드에 의존적
    • .java

JSP 페이지의 실행 과정

서블릿(Servlet)

  • 서버 측에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스(응답 : HTML 형식)
  • 자바 플랫폼에서 컴포넌트 기반의 웹 애플리케이션을 개발하는 핵심 기술(동적 웹 애플리케이션 컴포넌트)
  • 컨테이너 종류에 상관없이 실행됨(플랫폼 독립적)
  • 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행
  • 자바로 만들어졌기 때문에 자바의 특징(객체 지향)을 가짐
  • 스레드 기반
  • JSP 페이지처럼 화면에 내용을 표시할 목적으로 사용하는 것이 아니라 MVC 패턴에서 로직인 모델과 화면에 결과를 표시하는 뷰 사이에서 제어를 담당하는 컨트롤로 사용됨
  • Servlet을 많이 사용하는 이유는 빠른 응답 속도 때문
    • 최초 요청 시 객체가 만들어져 메모리에 로드되고 이후 요청 시 기존 객체 재활용하기 때문에 동작 속도가 빠르다.
  • 장점
    • 신뢰성
    • 확장성(기능 확장 용이)
    • 플랫폼과 서버에 독립적(자바 기반)
      • 한 번 개발된 애플리케이션은 다양한 서버 환경에서 실행 가능
    • Java에서 제공되는 다른 기술 사용 가능
      • 예 : Servlet + JDBC 연동
  • 생성 과정
    1. Servlet 클래스 생성
    2. Servlet 생명주기 메소드 구현
    3. Servlet 매핑 작업
    4. 웹 브라우저에서 Servlet 매핑 이름으로 요청
    • 서블릿 매핑(mapping)
      • 서블릿 경로 연결 (url 주소에 출력될 경로 이름 설정)
      • 서블릿 파일 경로 노출로 인한 보안 문제를 없애고, url을 간단하게 줄일 수 있음
      • 웹 브라우저에서 서블릿을 요청하기 위해서는 서블릿 매핑 필요
      • 방법
        • web.xml에서 설정
        • 어노테이션 이용 (이클립스에서 자동 지정 ) : 변경 가능

서블릿 처리 순서

  • 동일한 Servlet class에 대한 요청을 처리하는 모든 thread(스레드)는 같은 Servlet 객체를 공유해서 동시성 문제가 발생할 수 있지만, 로컬 변수는 각 요청 스레드마다 각각의 스택 영역에 저장되기 때문에 동시성 문제를 발생시키지 않음
  1. 클라이언트에서 서블릿 요청이
  2. 서버에서 서블릿 컨테이너 만들고 스레드 생성(요청 시 마다 스레드 생성)
  3. 서블릿 컨테이너는 스레드를 가동하려 서블릿 객체 생성
  4. 서블릿 실행 결과가 웹 서버로 전송
  5. 결과를 웹 서버가 웹 브라우저에게 전송
  6. 서블릿 객체의 실행이 종료되면 스레드 종료되고 반환

서블릿 패키지

  • javax.servlet.*
    • 서블릿 작성을 위한 인터페이스와 클래스 제공
  • javax.servlet.http.*
    • HTTP 프로토콜은 이용한 서블릿 작성에 필요한 인터페이스 제공(GET/POST)

서블릿 클래스

  • Servlet 인터페이스
  • GenericServlet 추상 클래스
  • HttpServlet 클래스 상속 받음
  • HttpServlet -> GenericServlet -> Servlet

서블릿 생성 과정

  1. Servlet 클래스 생성
  2. 서블릿 생성주기 메소드 구현
  3. 서블릿 매핑 작업
  4. 웹 브라우저에서 서블릿 매핑 이름으로 요청

서블릿 매핑 (mapping)

  • 서블릿 경로 연결 (url 주소에 출력될 경로 이름 설정)
  • 서블릿 파일 경로 노출로 인한 보안 문제를 없애고 url을 간단하게 줄일 수 있음
  • 웹 브라우저에서 서블릿을 요청하기 위해서는 서블릿 매핑 필요
  • http://localhost:8080/프로젝트명/서블릿 매핑 이름/
  • 서블릿 매핑 방법
    • web.xml에서 설정
    • 어노테이션 이용 (이클립스에서 자동 지정 ) : 변경 가능

HttpServletRequest request, HttpServletResponse response

  • 톰캣에서 request 객체와 response 객체 생성해서 doGet() 메소드 안에 인자 값으로 넣어줌
  • request 객체 : 요청 처리 객체
    • 클라이언트에서 입력한 데이터가 request 객체에 담겨져서 서버로 전달
  • response 객체 : 응답 처리 객체
    • 서버 측에서 처리한 결과를 response 객체에 담아서 클라이언트로 전달
  • doGet()과 doPost() 둘 다 매개변수로 request/ response 객체를 갖음
    • 클라이언트 요청 처리
    • 클라이언트에게 응답 처리

서블릿 동작 과정

컨텍스트 (Context)

  • 톰캣의 server.xml에 등록하는 웹 애플리케이션을 컨텍스트(Context)라고 함
    • 즉, 톰캣 입장에서 인식하는 한 개의 웹 애플리케이션에 해당
  • 웹 애플리케이션 당 하나의 컨텍스트가 등록됨
  • 웹 애플리케이션 이름과 같을 수도 다를 수도 있음
  • 컨텍스트 이름은 중복되면 안 됨 (유일한 이름)
  • 대소문자 구분
  • server.xml에 등록
  • 이클립스에서 프로젝트 생성하면 자동으로 server.xml에 추가됨
  • 최종 실행 시 포함된 프로젝트가 Context로 남게 됨
  • <Context docBase="Servlet01" path="/Servlet01" reloadable="true" source="org.eclipse.jst.jee.server:Servlet01"/>
  • 구성 요소
    • path : 웹 애플리케이션의 컨텍스트 이름, 웹 애플리케이션 이름과 다를 수도 있으며 웹 브라우저에서 실제 웹 애플리케이션을 요청하는 이름
    • docBase : 컨텍스트에 대한 실제 웹 애플리케이션이 위치한 경로. WEB-INF 상위 폴더 까지의 경로를 나타낸다.
    • reloadable : 실행 중 소스 코드가 수정될 경우 바로 갱신할지를 설정. 만약 false로 설정하면 톰캣을 다시 실행해야 추가한 소스 코드의 기능이 반영

URL / URI / ContextPath / ServletPath

  • URL : 전체 주소
  • URI : ContextPath + ServletPath
    • /Servlet01/second
    • 프로젝트명 + 서블릿 매핑 이름
  • ContextPath : 프로젝트명
    • /Servlet01
  • ServletPath : 서블릿 매핑 이름 (원래 : 패키지명 + 파일명) 임의로 변경해서 용
    • /second
    • 간결성 / 보안 유지

728x90

'BE > Servlet' 카테고리의 다른 글

Servlet - 포워딩  (0) 2021.12.29
Servlet - Servlet DB연동(Connection Pool)  (0) 2021.12.28
Servlet - Servlet DB 연동(기본 JDBC)  (0) 2021.12.28
Servlet - DOM 객체, name 속성, jQuery 사용  (0) 2021.12.28
Servlet - Servlet 요청 API  (0) 2021.12.27
Comments