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