Language/Java

[Java] JSP와 Servlet이란?

ooeunz 2019. 10. 13. 22:46
반응형

JSP

jsp의 개념

  • JSP(Java Server Page)Java를 이용하여 동적인 웹 페이지를 만들기 위해 Sun Microsystems사가 개발한 기술이다.
  • 사용자의 요청에 맞는 결과를 동적으로 표시해주는 웹 페이지를 웹 서버 측에서 사용자에게 전송해 주기 위해서는 요청의 처리결과에 따라서 자동으로 응답을 생성할 수 있는 역할을 한다.
  • html 코드 안에 java코드가 삽입된 형태이다.
  • 〈%...%><%!...%>, <%=•••%> 와 같은 형태의 코드가 자바 코드이다.

 

JSP가 html과 java코드를 동시에 사용할 수 있는 이유

  • JSP 파일이면 웹 컨테이너는 먼저 JSP 파일을 파싱(Pairsmg)하여 자바 코드로 변환한다.
  • 파싱이란 코드를 해석해서 그에 맞는 변환 코드로 바꾸는 작업이다.
  • 각각의 패그를 자동으로 감지하여 〈%...%><%!...%>, <%=•••%> 등 자바 코드 부분은 그대로 사용한다.
  • 그 외의 H1ML 태그로 된 부분들은 서블릿 소스에서 write() 메소드를 사용하는 방식으로 변환한다.
  • 자바 코드 파일을 컴파일하여 서블릿 클래스 파일을 작성한다.
  • 만들어진 서블릿 클래스가 실행되면 가장 먼저 인스턴스를 생성하고 init() 메소드에 의해 초기화
  • service() 메서드를doGet() 또는 doPost() 메소드가 실행되어 HTML 코드로 이루어진 결과 페이지가 생성한다.

 


Servlet

Servlet의 개념

  • 브라우저는 기본적으로 HTML 형식의 문서만을 표시할 수 있기 때문에 동적인 처리 불가하다.
  • 웹 서버 측에서 사용자의 요구에 따라 자동으로 생성된 HTML형식의 페이지를 생산해 전송해 줄 수 있는 여러 기술이 개발되었고 그중 자바 진영의 기술이다.
  • 서블릿은 웹 서버 상에서 실행되는 자바의 클래스 파일이라고 할 수 있기 때문에 기본적으로 자바의 모든 API를 그대로 사용할 수 있으며 객체 지향성 등 자바의 장점을 모두 가질 수 있다.

 

Java class와의 차이점

  • 서블릿은 반드시 javax.servlet.Servlet 인터페이스를 구현(Implements)해서 작성해야만 한다.
  • 입력과 출력을 HTTP 프로토콜의 요청(Request)과 응답(Response)의 형태로 다룬다.

 

Web Container란?

  • JSP 파일의 실행 요청을 처리한다.
  • 웹 서버 내부에서 서블릿 클래스 또는 JSP 파일을 실행하기 위한 실행 환경을 제공하는 역할이다.
  • 어떤 주소에(URL) 대한 요청 → HTTP 서버 → 그 주소에 미리 매핑되어 있는 콘텐츠(HTML 파일이나 이미지 등)를  사용자의 브라우저에 응답 형태로 전송한다.

 

Servlet의 동작 원리

1. 사용자의 URL 요청

  • 어떤 사용자의 URL 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹 서버측에 URL 서블릿 클래스를 미리 매핑 시켜놓은 배포 서술자(Deployment Descriptor)가 필요하다.
  • 웹 서버가 배포 서술자를 통해 지금 받은 요청이 서블릿 요청이라는 것을 알게 되면 서블릿을 담당하는 웹 컨테이너로 그 요청을 전달한다.

2. request, response 객체 생성

  • 웹 컨테이너는 받은 요청을 처리하기 위해 HTTP 요청 (Request)을 처리하기 위한 request 객체와 HTTP 응답(Response)을 위한 response 객체를 생성한다.

3. 서블릿 인스턴스와 스레드 생성

  • request, response 객체가 생성된 뒤 사용자의 URL 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자(xml)를 통해 알아낸다.
  • 만일 그 클래스가 웹 컨테이너에서 한 번도 실행된 적이 없거나, 현재 메모리에 생성된 인스턴스(프로세스)가 없다면 새로 인스턴스를 생성하고(메모리에 로드하고) init() 메소드를 실행하여 초기화한 뒤 스레드를 하나 생성한다.
  • 인스턴스가 존재할 경우에는 새로 인스턴스를 생성하지 않고 기존의 인스턴스에 스레드만 하나 새로 생성한다.
  • 서블릿 인스턴스는 웹 컨테이너당 하나만 존재하기 때문에 init() 메소드는 각 서블릿당 한 번씩만 호출한다.

4. service() 메소드 호출과 서블릿 클래스 실행

  • 스레드가 생성되면 각 스레드에서 service() 메소드 호출한다.
  • service() 메서드가HTTP 요청 방식이 GET 방식일 경우에는 서블릿 클래스의 doGet() 메서드,POST 방식일 경우에는 doPost() 메서드가request, response 객체를 인자로 자동으로 호출한다.
  • 개발자가 실제로 동적인 웹 페이지 생성을 할 수 있는 코드를 만들어야 하는 부분이 바로 doGet()doPost() 메소드 부분이다.

5. 응답과 스레드의 소멸

  • doGet() 또는 doPost() 메소드가 호출되어 사용자의 요청에 따른 동적인 웹 페이지를 생성하면 그 결과물이 담긴 response 객체를 웹 컨테이너가 HTTP 응답(Response) 형태로 바꾸어 웹 서버로 전송된다.
  • 사용이 끝난 requestresponse 객체를 소멸시키고 스레드를 종료한다.

 

반응형