본문 바로가기
Back/Servlet

자바 서블릿(Servlet) 기초

by 시월해 2021. 5. 3.

# Servlet?

  • 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스임.
  • 서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두 가지고 있음.
  • 서블릿은 사버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송.
  • 서버에서 실행이 되기 때문에 보안과 관련된 기능도 훨씬 안전하게 수행이 가능.

# Servlet Life Cycle(서블릿 생명 주기)
* init() : - 단 한 번만 호출이 됨.
- 서블릿이 서비스하기 위해 필요한 초기화 작업을 수행을 함.
* service() : - init() 메서드가 service() 메서드를 호출함.
- 사용자의 요청에 따라 스레드 단위로 실행되는 메서드임. (여러번 실행)
- 각각 service() 메서드를 통해서 doGet(), doPost() 메서드가 호출이 됨.
- 파라미터인 HttpServletRequest와 HttpServletResponse를 통해서 사용자의 요청을 처리함.
* destroy() : - 서블릿이 종료 요청이 오면 한 번만 호출되는 메서드임.
- 서블릿이 종료되면서 정리할 작업이 있으면 destroy() 메서드를 오버라이딩(재정의) 해서 구현을 함.

# Sevlet 동작 과정

  • 클라이언트가 요청을 하면 요청하는 서블릿이 메모리에 로딩이 되어 있는지 확인을 함.
  • 최초의 요청이면 init() 메서드를 호출하여 요청하는 클래스의 인스턴스(객체)를 메모리에 로딩을 함.
  • 그런 다음 doGet()이나 doPost() 메서드를 호출하여 서비스를 함.
  • 클라이언트가 다시 동일한 서블릿을 요청을 하면 톰캣은 요청하는 서블릿이 메모리에 로딩이 되어 있는지 확인을 함.
  • 이번에는 메모리에 로딩이 되어 있는 것이 확인이 되므로 바로 doGet()이나 doPost() 메서드를 호출함.

# JSP에서 사용되는 Servlet 동작 방식
- 웹 개발을 위한 표준이 되는 클래스를 말함.
- 웹 브라우저의 요청을 스레드 방식으로 처리하는 기술을 말함.
- 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스임.
- 처리해야 할 일들을 기술하는 곳.
- 서블릿은 일반 자바 프로그램과 다르게 독자적으로 실행되지 못하고 톰캣과 같은 서버에서 실행됨.
- 서블릿의 특징.
* 서버 쪽에서 실행되면서 기능을 수행함.
* 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공함.
* 스레드 방식으로 실행됨 - 중요
* 클라이언트의 요구를 처리하는 기능은 최초 한 번만 메모리로 로딩이 됨.
* 클라이언트가 동일한 기능을 요구하면 기존에 사용한 기능을 재사용함.
* 자바로 만들어져서 자바의 특징(객체 지향)을 가지고 있음.
* 보안 기능을 적용하기 쉬움.
* 웹 브라우저에서 요청 시 기능을 수행함.

- 서블릿의 기본 기능 - 3가지

1) 클라이언트로부터 요청을 받음.
2) 데이터베이스 연동과 같은 비지니스 로직을 수행함.
3) 처리된 결과를 클라이언트에게 돌려줌.

요청과 관련된 API : javax.servlet.http.HttpServletRequest 인터페이스
응답과 관련된 API : javax.servlet.http.HttpServletResponse 인터페이스

  1. 클라이언트가 서블릿에 요청을 하면 먼저 톰캣 서버가 해당 요청을 받음.
  2. 그런 다음 사용자의 요청이나 응답에 대한 HttpServletRequest 객체와 HttpServletResponse 객체를 만들게 됨.
  3. 그리고 난 후 Servlet의 doGet() 메서드나 doPost() 메서드를 호출하면서 이 객체들을 전달함.
  4. 톰캣이 사용자의 요청에 대한 정보를 모든 HttpServletRequest 객체의 속성으로 담아 메서드로 전달함. 따라서 각 HttpServletRequest에서 제공하는 메서드들은 매개변수로 넘어온 객체들을 이용하여 사용자가 전송한 데이터를 받아오거나 응답을 할 수 있는 것임.
  5. 서블릿에서 클라이언트의 요청을 얻는 방법
  • HttpServletRequest 클래스에서태그로 전송된 데이터를 받아오는데 사용되는 메서드
  • getParameter(String name) => 태그의 name 속성에 들어간 변수명을 받아서 사용을 함. 반환형은 String 타입임.
  • getParameterValues(String name) ==> 태그의 같은 name에 대하여 여러 개의 값을 얻을 때 사용함. 반환형은 String[] 배열 타입임. 서블릿에서 요청 받은 내용을 처리하여 클라이언트에 보내는 방법.
  1. HttpServletResponse 객체를 이용하여 응답을 함.
  2. doGet()이나 doPost() 메서드 안에서 처리함.
  3. javax.servlet.http.HttpServletResponse 객체를 이용함.
  4. setContentType() 메서드를 이용하여 클라이언트에게 전송할
    데이터의 종류(MIME-TYPE)를 지정함.
  5. 클라이언트(웹 브라우저)와 서블릿의 통신은 자바 I/O의 스트림을 이용함.
  6. 웹 브라우저에서 서블릿으로 데이터를 전송하는 방법 - 2가지
  7. get 방식
  • 서블릿에 데이터를 전송할 때는 데이터가 url 뒤에 name=value 형태로 전송이 됨.
  • 여러 개의 데이터를 전송할 때는 '&'로 구분하여 전송이 됨.
  • 보안이 취약함.
  • 전송할 수 있는 데이터는 최대 255자.
  • 기본 전송 방식이고 사용이 쉬움.
  • 웹 브라우저에 직접 입력해서 전송할 수도 있음.
  • 서블릿에서는 doGet() 메서드에서 전송된 데이터를 처리함.
  1. post 방식
  • 서블릿에 데이터를 전송할 때는 TCP/IP 프로토콜 데이터의 head 영역에 숨겨진 채 전송이 됨.
  • 보안에 유리함.
  • 전송 데이터의 용량이 무제한임.
  • 처리 속도가 get 방식보다 느림.
  • 서블릿에서는 doPost() 메서드에서 전송된 데이터를 처리함.