본문 바로가기
web/JSP

서블릿(Servlet)

by 바까 2020. 7. 14.
반응형
서블릿(Servlet)이란

Servr + Applet 의 합성어로 서버에서 실행되는 Applet이란 의미로 자바를 이용하여 웹에서 실행되는 프로그램을 작성하는 기술을 말한다.

서블릿은 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다.

서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두 가진다. 하지만 서블릿은 일반 자바 프로그램과 다르게 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다는 점에서 차이가 있다.

서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송한다. 서버에서 실행되므로 보안과 관련된 기능도 훨씬 안전하게 수행할 수 있다.

 

 

서블릿동작과정

클라이언트가 웹서버에 요처앟면 웹 서버는 그 요청을 톰캣과 같은 웹 어플리케이션 서버(WAS)에 위임한다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다.

그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에게 전송한다.

 

서블릿 특징

서버쪽에서 실행되면서 기능을 수행한다.

기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능을 제공한다.

스레드 방식으로 실행된다.

자바로 만들어져 자바의 특징(객체 지향)을 가진다.

컨테이너에서 실행된다.

컨테이너 종류에 상관없이 실행된다.(=플랫폼 독립적)

보안기능을 적용하기 쉽다.

웹 브라우저에서 요청 시 기능을 수행한다.

 

서블릿 API 계층 구조와 기능

 


서블릿 인터페이스

javax.servlet 패키지에 선언되어 있다.

servlet 관련 추상 메서드를 선언한다.

init(), service(), destroy(), getServletInfo(), getServletConfig()를 선언한다.

 

ServletConfig인터페이스

javax.servlet 패키지에 선언되어 있다.

servlet 관련 추상 메서드를 선언한다.

getInitParameter(), getInitPArameterNames(), getServletContext(), getServletName()이  선언되어 있다.

 

GenericServlet 클래스

javax.servlet 패키지에 선언되어 있다.

상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스

GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩해서 구현한다.

 

HttpServlet 클래스

javax.servlet 패키지에 선언되어 있다.

GenericServlet을 상속받아 HTTP프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행한다.

웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용한다.

요청시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 차례대로 호출됩니다.

 

HttpServlet의 메서드 기능

Protected doDelete(HttpServletRequest req, HttpServletResponse resp) -> 서블릿이 DELETE request 를 수행하기 위해 service()를 통해서 호출된다.

Protected doGet(HttpServletRequest req, HttpServletResponse resp) -> 서블릿이 GET request 를 수행하기 위해 service()를 통해서 호출된다.

Protected doHead(HttpServletRequest req, HttpServletResponse resp) -> 서블릿이 HEAD request 를 수행하기 위해 service()를 통해서 호출된다.

Protected doPost(HttpServletRequest req, HttpServletResponse resp) -> 서블릿이 POST request 를 수행하기 위해 service()를 통해서 호출된다.

Protected service(HttpServletRequest req, HttpServletResponse resp) -> 표준 HTTP request를 public service()에서 전달받아 doXXXX()메서드를 호출 한다.

public service(HttpServletRequest req, HttpServletResponse resp) -> 클라이언트의 request를 protected service()에게 전달한다.


정리

클라이언트 요청시 public service()메서드를 먼저 호출한 후 다시 protected service() 메서드를 호출한다.

그런 다음 다시 request 종류에 따라 doXXX()메서드를 호출하는 과정으로 실행된다.


서블릿의 생명주기 메서드

서블릿 생명주기(Life Cycle)메서드란 서블릿 실행단계마다 호출되어 기능을 수행하는 코백 메서드를 말한다.

[단계]

1.초기화init()

서블릿 요총시 맨 처음 한버만 호출

서블릿 생성시 초기화 작읍을 주로 수행

2.작업수행 = goGet(), doPost()

서블릿 요청시 매번 호출

실제로 클라이언트가 요청하는 작업을 수행

3.종료 destroy()

서블릿에 기능을 수행하고 메모리에서 소멸될 때 호출

서블릿의 마무리 작업을 주로 수행

 

정리

init() 메서드는 실행 초기에 서블릿 기능 수해과 관련된 기능을 설정하는 용도로 많이살용한다

destroy() 메서드는 서블릿이 메모리에서 소멸될 때까지 여러가지 종료 작업을 수행한다

따라서 만약 이런 기능이 필요업으면 생략하지 않아도 상관없다.

반면에 doGet()이나 doPost()와 같이 do로 시작하는 메서드는 서블릿의 핵심기능을 처리하므로 반드시 구현한다.

 

서블릿 생성 단계

1.사용자 정의 서블릿 클래스를 만든다.

2.서블릿 생명 주기 메서드를 구현

3. 서블릿 매핑 작업을 수행한다.

4.웹 브라우저에서 서블릿 매핑 이름으로 요청한다.

 

 

서블릿 매핑

[문법]

http://IP주소:포트번호/프로젝트이름/패키지이름이포함된클래스이름

[예시]

http://127.0.0.1:8090/Ch02/exam01.First

 

1 - <servlet>										
2 -   <servlet-name>aaa</servlet-name>				
3 -   <servlet-class>exam01.First</servlet-class>	
  - </servlet>

1. 브라우저에서 요청하는 매핑 이름에 대해 실제로 실행하는 서블릿 클래스를 설정하는 태그

2. <servlet-mapping> 태그의 <servlet-name>태그의 값과 동일하다.(필수)

3. 브라우저에서 요청하는 매핑 이름에 대해 실제로 기능을 수행하는 서블릿 클래스를 설정한다.

 

4 - <servlet-mapping>
5 -  	<servlet-name>aaa</servlet-name>
6 -  	<url-pattern>/first</url-pattern>
  - </servlet-mapping>

4. 브라우저에서 요청하는 논리적인 서블릿을 설정한다.

5. 매핑이름으로 요청 시 값이 같은 <servlet> 태그 안의 <servlet-name> 태그와 연결된다.

6. 브라우저에서 exam01.First를 요청하는 논리적인 서블릿 이름이다.

반응형

댓글