View

[Servlet] Servlet 개념과 동작과정

다슬다슬 2019. 7. 24. 23:34

HTML Form -> Servlet -> HTML Page

 

1. 사용자가 웹 페이지 form(HTML Form)을 통해 자신의 정보를 입력 (Input)

2. Servlet의 doGet() 또는 doPost() 매서드는 입력한 from data에 맞게 DB또는 다른 소스에서 관련된 정보를 검색

3. 이 정보를 이용하여 사용자의 요청에 맞는 적절한 동적 컨텐츠(HTML Page)를 만들어서 제공 (Output)

 

 

Form Method

form을 서버에 전송하는 방식으로, 두 가지 HTTP 메소드 지정 가능

 

1. GET Method

 - 사용자가 입력한 내용(form data)이 URL 뒤에 텍스트 문자열로 추가됨

 - data는 ?를 기준으로 action URL과 분리됨

 - HTTP 메서드를 지정하지 않으면 GET Method를 호출함

 - Query-Type actions : DB에 영향을 주지 않는 단순 읽기 위주의 작업

 - Idempotemt actions : 몇 번이고 같은 연산을 반복해도 같은 값이 나오는 작업

2. POST Method

 - 사용자가 입력한 내용(form data)을 별도의 메시지로 보냄

 - Request Body에 data를 추가

 - URL에 직접적으로 data가 노출되지 않음 -> GET Method보다 보안상으로 조금 더 안전

 - actions with side-effects : DB에 영향을 주는 작업

 

 

Servlet 이란 ?

웹 기반의 요청에 대한 동적인 처리가 가능한 하나의 클래스

 

Servlet Program

1. Web Server는 HTTP request를 Web Container(Servlet Container)에게 위임한다.

 - 1) web.xml 설정에서 어떤 URL과 매핑되어 있는지 확인

 - 2) 클라이언트(browser)의 요청 URL을 보고 적절한 Servlet을 실행

2. Web Container는 service() 메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.

 - 1) Web Container는 적절한 Servlet 파일을 컴파일(.class 파일 생성)한다.

 - 2) .class 파일을 메모리에 올려 Servlet 객체를 만든다.

 - 3) 메모리에 로드될 때 Servlet 객체를 초기화하는 init() 메서드가 실행된다.

3. Web Container는 Request가 올 때 마다 thread를 생성하여 처리한다.

 - 각 thread는 Servlet의 단일 객체에 대한 service() 메서드를 실행한다.

 

 

Servlet Life Cycle

 

Servlet Life Cycle

클라이언트의 요청이 들어오면 WAS는 해당 요청에 맞는 Servlet이 메모리에 있는지 확인한다.

 - 만약 메모리에 없다면 해당 Servlet Clas를 메모리에 올린 후 (Servlet 객체 생성) init 메서드 실행

   -> 이후 service 메서드를 실행

 - 만약 메모리에 있다면 바로 service 메서드 실행

 

init()

 - 한 번만 수행됨

 - 클라이언트(browser)의 요청에 따라 적절한 Servlet이 생성되고 이 Servlet이 메모리에 로드될 때 init() 메서드가 호출

 - 역할 : Servlet 객체를 초기화

 

service(request, response)

 - 응답에 대한 모든 내용은 service() 메서드에 구현해야 함

 - Servlet이 수신한 모든 request에 대해 service() 메서드가 호출됨

   - HttpServlet을 상속받은 Servlet 클래스 (이하 하위 클래스) 에서 service() 메서드를 오버라이드 하지 않았다면,

     그 부모인 HttpServlet의 service()가 호출됨   

   - service() 메서드는 request의 type(HTTP Method : GET, POST, PUT, DELETE 등)에 따라 적절한 메서드

     (doGet, doPost, doPut, doDelete 등)를 호출함

   - 즉, 하위 클래스에서 doGet, doPost 등의 메서드를 오버라이드 해두면 HttpServlet의 service() 메서드가 요청에

     맞는 메서드(하위 클래스에서 오버라이드한 메서드)를 알아서 호출할 수 있게 되는 것

 - 메서드가 return 하면 해당 thread는 제거됨

 

destory()

 - 한 번만 수행됨

 - Web Application이 갱신되거나 WAS가 종료될 때 호출됨

 - 역할 : Servlet 객체를 메모리에서 제거

 

HttpServletRequest request 객체

 - 사용자가 HTML Form에 입력한 내용(username과 password)을 request 객체에서 받아온다.
   즉, HTTP 프로토콜의 Request 정보를 Servlet에게 전달
 - 헤더 정보, 파라미터, 쿠키, URI, URL, Body의 Stream 등을 읽어 들이는 메서드가 있다.
 - getHeader(“원하는 헤더 이름”) : 이 메서드를 통해 원하는 헤더 정보를 확인할 수 있다.
 - getParameter() : 이 메서드를 호출하여 form parameter 값을 가져온다.
   이런 parameter 값은 URL 또는 form의 input tag를 통해서 넘어올 수 있다.
 - getParameterValues()
    form parameter가 두 번 이상 나타나고 여러 개의 값을 반환할 때 이 메서드를 호출한다. (Ex. checkbox)


HttpServletResponse response 객체
 - 인자의 내용에 맞게 동적인 HTML 코드를 생성하여 response 객체에 담아 반환한다.
 - getWriter() 메서드를 호출하여 PrintWriter 객체을 가져온 후 해당 객체에서 print, println 메서드를 실행한다.
 - 즉, form data를 처리한 결과를 Web Page에 생성(view 생성)하여 반환한다.

 

 

reference : https://gmlwjd9405.github.io/2018/11/04/servlet-vs-jsp.html

Share Link
reply
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31