"서블릿"
서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스
서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과 전송
서버에서 실행되므로 보안과 관련된 기능도 훨씬 안전하게 수해아능
서블릿 동작 과정
클라이언트 -> 웹 서버에 요청
웹 서버 -> WAS(톰캣)에 위임
WAS -> 요청에 해당하는 서블릿 실행
서블릿 -> 기능 수행 후 클라이언트에 전송
서블릿의 기능
서버 쪽에서 실행되면서 기능 수행
스레드 방식으로 실행
자바로 만들어져 자바의 특징을 가진다
컨테이너에서 실행
보안 기능을 적용하기 쉽다
웹 브라우저에서 요청 시 기능 수행
HttpServlet 클래스
HTTP 프로토콜을 사용하는 서블릿 기능을 구현하는 클래스
서블릿 -> HttpServlet 상속 받아 HTTP 프로토콜로 동작하는 웹 브라우저의 요청을 처리
메서드 | 기능 |
protected doDelete(HttpServletRequest req, HttpServletResponse resq) | DELETE request를 수행하기 위해 service()를 통해 호출 |
protected doGet(HttpServletRequest req, HttpServletResponse resq) | GET request를 수행하기 위해 service()를 통해 호출 |
protected doHead(HttpServletRequest req, HttpServletResponse resq) | HEAD request를 수행하기 위해 service()를 통해 호출 |
protected doPost(HttpServletRequest req, HttpServletResponse resq) | POST request를 수행하기 위해 service()를 통해 호출 |
protected service(HttpServletRequest req, HttpServletResponse resq) | 표준 HTTP request를 public service()에서 전달받아 doXXX() 메서드 호출 |
public service (HttpServletRequest req, HttpServletResponse resq) | 클라이언트의 request를 protected service()에게 전달 |
클라이언트 요청 시 public service() 메서드 먼저 호출 ->
protected service() 메서드 호출 ->
request 종류에 따라 doXXX() 메서드를 호출
서블릿의 생명주기 메서드
생명주기단계 | 호출메서드 | 특징 |
초기화 | init() | 서블릿 요청 시 맨 처음 서블릿 생성 시 초기화 작업 |
작업 수행 | doGET() doPOST() |
서블릿 요청 시 매번 호출 실제로 클라이언트가 요청하는 작업 수행 |
종료 | destroy() | 서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출 서블릿의 마무리 작업 주로 수행 |
doGET() doPOST()와 같이 do로 시작하는 메서드는 서블릿의 핵심 기능을 처리하므로 반드시 구현
서블릿을 만들고 실행하는 과정
1. 사용자 정의 서블릿 클래스 만들기
2. 서블릿 생명주기 메서드 구현
3. 서블릿 매핑 작업
4. 웹 브라우저에서 서블릿 매핑 이름으로 요청하기
1. 사용자 정의 서블릿 만들기
public class FirstServlet extends HttpServlet{
public void init() throws ServletException {
System.out.println("init 메서드 호출");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메서드 호출");
}
public void destroy() {
System.out.println("destroy 메서드 호출");
}
}
2. 서블릿 매핑하기
브라우저에서 서블릿 요청 방법
http://IP주소:포트번호/프로젝트이름/패키지이름이 포함된 클래스이름
서블릿 매핑 과정
- 각 프로젝트에 있는 web.xml에서 설정
- <servlet> 태그와 <servlet-mapping> 태그 이용
- 여러 개의 서블릿 매핑 시에는 <servlet> 태그를 먼저 정의하고 <servlet-mapping> 태그 정의
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>sec01.ex01.FirstServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>bbb</servlet-name>
<servlet-class>sec01.ex01.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>bbb</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
</web-app>
3. 톰캣에 프로젝트 실행
4. 브라우저에서 서블릿 요청
요청 예 : http://localhost:8090/pro05/first
서블릿 동작 과정
1. http://localhost:8090/pro05/first로 요청
2. FirstServlet이 메모리에 존재하는지 확인
3. FirstServlet을 메모리에 로드
4. inti() 호출
5. doGet() 또는 doPost()를 호출
6. 결과 응답