본문 바로가기
Back/Servlet

JSP와 Servlet(서블릿)

by Hyeon_ 2021. 12. 28.

JSP와 Servlet (서블릿)

JSP (Java Server Pages)

  • HTML 내에 Java 언어를 삽입한 문서
  • .jsp

Servlet (Server + Applet)

  • Java 언어로 이루어진 웹 프로그래밍 문서
  • 자바 코드에 의존적
  • .java

JSP 페이지의 실행 과정

Servlet (서블릿)

  • 서버 측에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스 (응답 : HTML 형식)
  • 자바 플랫폼에서 컴포넌트 기반의 웹 애플리케이션을 개발하는 핵심 기술 (동적 웹 애플리케이션 컴포넌트)
  • 컨테이너 종류에 상관없이 실행 (플랫폼이 독립적)
  • 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행
  • 자바로 만들어졌기 때문에 자바의 특징 (객체지향)을 가짐 : 자바 코드
  • 스레드 기반
  • JSP 페이지처럼 화면에 내용을 표시할 목적으로 사용하는 것이 아니라, MVC 패턴에서 로직인 모델과 화면에 결과를 표시하는 뷰 사이에서 제어를 담당하는 컨트롤로 사용됨
  • .java이기 때문에 Java Resources / src 위치에 저장 : src/main/java

서블릿 처리 순서

  • 클라이언트 에서 서블릿 요청
  • 서버에서 서블릿 컨테이너 만들고 스레드 생성(요청할 때마다)
  • 서블릿 컨테이너는 스레드 가동하여 서블릿 객체 생성(서블릿 객체 실행 종료되면 스레드 종료 후 반환)
  • 서블릿 실행 결과가 웹 서버로 전송
  • 결과를 웹 서버가 웹 브라우저에 전송

동일한 Servlet class에 대한 요청을 처리하는 모든 thread(스레드)는 같은 Servlet 객체 공유 -> 동시성 문제 발생할 수 있음

로컬 변수는 각 요청 스레드마다 각각의 스택 영역에 저장되기 때문에 동시성 문제를 발생시키지 않음

서블릿 라이프 사이클 (생명주기)

서블릿 패키지

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

서블릿 클래스

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

서블릿을 많이 사용하는 이유는?

  • 빠른 응답속도
  • 서블릿은 최초 요청 시 객체가 만들어져 메모리에 로드되고, 이후 요청 시에는 기존의 객체를 재활용한다 => 동작 속도 빨라짐

서블릿의 장점

  • 신뢰성
  • 확장성 - 기능 확장 용이함
  • 플랫폼과 서버에 독립적 (자바 기반)
    • 한 번 개발된 애플리케이션은 다양한 서버 환경에서 실행 가능
  • Java에서 제공되는 다른 기술 사용 가능
    • Ex) Servlet + JDBC 연동

서블릿 생성 과정

서블릿 매핑 (mapping)

  • 서블릿 경로 연결 (url 주소에 출력될 경로 이름 설정)
  • 서블릿 파일 경로 노출로 인한 보안 문제를 없애고 url을 간단히 줄일 수 있음
  • 웹 브라우저에서 서블릿을 요청하기 위해서는 서블릿 매핑 필요
  • http://localhost:8080/프로젝트명/서블릿 매핑 이름/

서블릿 매핑 방법

  • web.xml에서 설정
  • 어노테이션 사용 (자동 지정해주지만 변경 가능)

어노테이션 이용

  • 어노테이션(Annotation)을 이용한 서블릿 매핑
  • web.xml에서 여러 서블릿 매핑 설정 시 복잡
  • 서블릿 클래스에서 직접 어노테이션으로 서블릿명 설정
    • 가독성 좋고 편리 & 쉬움
  • @WebServlet을 이용해서 서블릿 매핑 구현
    • @WebServlet("서블릿 매핑 이름")
    • @WebServlet("/FirstServlet")
  • 어노테이션이 적용되는 클래스는 반드시 HttpServlet 클래스를 상속받아야 한다

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

서블릿 DB 연동(3)  (0) 2021.12.28
서블릿 DB 연동(2)  (0) 2021.12.28
[Intellij]서블릿 DB 연동  (0) 2021.12.28
Servlet 요청 API  (0) 2021.12.28
Web 개요  (0) 2021.12.27