블릿이란?
서블릿은 자바 플랫폼에서 웹 애플리케이션을 개발할 때 사용하는 핵심 기술로 웹 애플리케이션 확장이 용이하고 플랫폼에 독립적인 개발이 가능합니다.
장점
1. 스레드를 기반으로 하므로 웹 애플리케이션 운영에 효율적입니다.
2. 자바를 기반으로 하므로 자바API를 사용할 수 있습니다.
3. 운영체제나 하드의 영향을 받지 않아 개발된 애플리케이션은 다양한 환경에서 실행이 가능합니다.
4. 콘텐츠와 비즈니스 로직을 분리할 수 있습니다.
서블릿 컨테이너
웹 서버는 서블릿 자체를 실행하지 못하므로 자바 가상머신을 내장한 컨테이너라는 서블릿 실행환경이 필요합니다.
클라이언트 요청에 대한 서블릿 동작 과정
1. 컨테이너는 서블릿 클래스를 로딩합니다.
2. 서블릿 클래스의 생성자 메소드를 호출해 인스턴스를 생성합니다.
3. 인스턴스의 init() 메소드가 호출됩니다. [단 한번만 실행됩니다.]
4. web.xml 파일을 참조해 url매핑을 확인하고 서블릿 인스턴스로부터 스레드를 생성하고 service() 메소드를 호출합니다.
5. 서블릿 종료시에 destory() 메소드를 호출합니다.
웹 어플리케이션 서버 [WAS]
기본적으로 JAVA EE를 지원하는 서버 소프트웨어로 기본적으로 서블릿과 JSP를 실행할 수 있습니다. 이 외에도 대규모 사용자 접속 등에서 성능을 보장하기 위한 클러스터링 및 페일오버, 트랜잭션, 데이터베이스 처리를 위한 다양한 관리 기능을 제공합니다.
서블릿 API
모든 서블릿은 javax.servlet.Servlet 인터페이스를 구현해야 합니다.
일반적으로는 javax.servlet.GenericServlet과 javax.servlet.http.HttpServlet 클래스 중 하나를 상속해서 구현합니다. [HttpServlet은 GenericServlet의 하위 클래스로 HTTP 처리와 관련된 부가 기능이 추가된 구조입니다.]
GET 방식과 POST 방식
HTTP에서 클라이언트 요청은 크게 GET방식과 POST방식으로 나뉩니다.
GET 방식
1. GET은 서버에 있는 정보를 가져오기 위해서 설계되었습니다. [최대 240 Byte까지 서버로 정보를 전달할 수 있습니다.]
2. 아래와 같은 형식으로 ?이후의 값들은 서버에서 QUERY_STRING 환경변수를 통해서 서버로 전달되고 &는 여러 속성 값을 전달할 때 연결해주는 문자열입니다.
http://www.xxx.com/servlet/login?id=xx&name=yy
3. URL이 노출되기 때문에 보안 문제가 생길수 있습니다.
POST 방식
1. 서버로 정보를 올리기 위해 설계되었고 전달할 수 있는 데이터 크기는 제한이 없습니다.
2. URL에는 파라미터가 표시되지 않습니다.
클라이언트 요청이 있을시 처리 순서
1. 컨테이너는 서블릿 클래스를 로딩합니다.
2. 서블릿 클래스의 생성자 메소드를 호출해 인스턴스를 생성합니다.
3. 인스턴스의 init() 메소드가 호출됩니다. 이때 init() 메소드는 단 한번만 실행됩니다.
4. 서블릿에 사용자 요청에 대해서는 web.xml 파일을 참조해 URL매핑을 확인하고, 해당 서블릿 인스턴스로부터 스레드를 생성하고 service() 메소드를 호출합니다. 모든 사용자 요청에 대해 개별적인 service() 메소드가 호출되며, 이후 GET/POST에 대해 doGet()이나 doPost()등의 메소드가 호출됩니다. 서블릿 개발자는 이들 메소드에 필요한 기능을 구현 합니다.
5. destory() 메소드는 서블릿 종료 시 호출되는 메소드입니다.
서블릿 생명주기
1. 서블릿 로딩 : init() 메소드
클라이어트 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인하고 없을 경우 init()메소드를 호출하여 다시 적재합니다. 즉, init() 메소드는 처음 한 번만 실행되기 때문에 해당 서블릿에 각각의 스레드에서 공통적으로 사용하기 위해 필요한 작업이 있다면 init() 메서드를 오버라이딩해서 구현하면 됩니다. 실행중 서블릿이 변경될 경우에는 기존 서블릿은 파괴되고 새로운 내용을 다시 적재하기 위해 init() 메소드가 호출됩니다.
2. 요청 처리 : service() 메소드
init() 메소드는 최초에 한 번만 수행되고 이후 요청은 스레드로 실행되며 각각 service() 메소드를 통해서 doGet() 이나 goPost()로 분기됩니다. 이때 HttpServletRequest와 HttpServletResponse 구현으로 사용자 요청처리를 하는 request와 응답처리를 하는 reponse객체가 제공됩니다.
3. 서블릿 종료 : destory() 메소드
컨테이너로부터 서블릿 종료 요청이 있을 때는 destory() 메소드를 호출합니다. init() 메소드와 마찬가지로 한 번만 실행되며, 서블릿이 종료되면서 정리해야 할 작업이 있을 때는 destory()메소드를 오버라이딩해서 구현하면 됩니다.
출처 : http://blog.naver.com/gmlwns77/50173254067
'프로그래밍 > JSP' 카테고리의 다른 글
Java request.getContextPath() 와 request.getRequestURI() 와 request.getRequestURL() 와 request.ServletPath() 와 request.getRealPath() (0) | 2014.06.11 |
---|---|
JSP 웹어플리케이션 구조 및 서블릿 (1) | 2014.06.10 |
HttpseverletRequest 정리 (0) | 2014.06.10 |
Media query에 대한 이해 (0) | 2014.06.06 |
xml 노드 검색 (0) | 2013.05.30 |