서블릿
📘웹서비스프로그래밍
서블릿
- 자바 기반의 웹 프로그램 개발을 위해 만들어진 기술
- 서블릿 클래스로부터 만들어진 객체
- 자바로 작성된 프로그램을 실행할 수 있는 서버 소프트웨어(톰캣)를 통해 관리
- 서블릿을 실행하기 위해서는 톰캣과 같은 서블릿 컨테이너가 필요
- 일반적으로 WAS(Web Application Server)로 불림
-
서블릿 클래스 -(인스턴스화)> 서블릿 객체 -(초기화)> 서블릿
doGet 또는 doPost 메서드 안에 웹 브라우저로부터 요청이 왔을때 해야할일을 기술
서블릿 클래스의 구조
- javax.servlet.Servlet 인터페이스를 구현한 추상 클래스인 GenericServlet 클래스와 HttpServlet 클래스 중 하나를 상속하여 구현
- HTTP프로토콜에 최족화되어 있는 HttpServlet 클래스를 상속하는 것이 좋음
- HttpServlet을 상속받아 doGet(),doPost()메서드를 오버 라이딩
HttpServletRequest (요청)
- HTTP프로토콜의 request 정보를 서블릿에 전달하기 위한 목적으로 사용
- 서블릿 컨테이너에서 생성되고 클라이언트 요청이 doGet(),doPost()로 전달될때 인자로 함께 전달됨
- 서블릿에서 클라이언트와 연결해 처리할 작업은 HttpServletRequest를 통하여 정보 전달
HttpServletResponse (응답)
- HttpServletRequset와 마찬가지로 클라이언트와 연결된 처리를 위해 사용
- 클라이언트에서 서버로 전달하는 것과 관련된 것이 아니라 서버에서 클라이언트로 전달하려는 목적을 위한 기능으로 구성
- 서블릿 컨테이너는 요청 클라이언트에 응답을 보내기 위해 HttpServletResponse객체를 생성하여 서블릿에 전달
- 서블릿은 해당 객체를 이용하여 content type,응답코드,응답 메시지 등을 전송
서블릿의 생명주기
- 서블릿 초기화 : init()메서드
- 클라이언트 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인
- 메모리에 없을 경우에는 서블릿을 메모리에 적재해야 하는데,이때 서블릿의 init()메서드가 호출되며 초기화 작업 수행
- init()메서드는 처음 한번만 실행되므로,해당 서블릿에서 공통적으로 사용하는 작업이 있다면 init()메서드를 오버라이딩하여 구현
- 실행 중 서블릿이 변경되는 경우 기존 서블릿은 종료되고 다시 시작되면서 init()메서드가 다시 호출됨
- 요청/응답 : service()메서드
- init()메서드는 최초에 한번만 수행되고 이후 요청은 스레드로 실행되며 service()메서드를 통해 doGet()이나 doPost()로 분기
- 이때 파라미터로 HttServletRequest와 HttpServletResponse클래스 타입인 request와 response객체 제공
- 서블릿 종료 : destory()메서드
- 컨테이너로부터 서블릿 종료 요청이 있을때 destory()메서드 호출
- inint()메서드와 마찬가지로 한번만 실행되며, 서블릿이 종료 되면서 정리해야 할 작업이 있을때는 destory()메서드를 오버라이딩하여 구현
정보 공유
- URL rewriting
- HTTP의 Query String을 이용하는 방식으로 URL에 파라미터를 추가해 서버로 요청하는 형식
- 쿠키
- 클라이언트에 저장되는 작은 정보를 의미함
- 서버의 요청에 의해 브라우저가 저장하게 되며 서버가 요청할 때 제공하는 방식 사용
- 세션
- 클라이언트가 웹 애플리케이션 서버에 접속할 때 서버 쪽에 생성되는 공간으로 내부적으로는 세션 아이디를 통해 참조
- 브라우저 : 서버에 접속할때 발급받은 세션 아이디 기억
- 서버 : 해당 세션 아이디로 할당된 영역에 접근
- 세션 유효 시간이나 브라우저 종료 전까지 유지되므로 서로 다른페이지에서도 정보 공유 가능
- 사용자마다 생성되는 공간