본문 바로가기

JAVA

Servlet (서블릿)

  서블릿 (Servlet)

자바를 사용하여 웹을 만들기 위해 필요한 기술.

웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램으로, Java Thread를 이용하여 동작한다. 자바로 구현 된 CGI(공통 게이트웨이 인터페이스의 약어.)

 

- CGI : 웹서버는 요청에 의해 응답을 HTML로만 보여준다. HTML만으로는 모든 정보를 다 처리할 수가 없고, 따라서 요청과 응답에 따른 양방향으로 정보처리를 하기위해 외부 프로그램을 수행한다. 이 결과를 HTML 형태로 보여주는 것.

 

클라이언트가 웹서버에 요청(request)하면 웹서버는 그것을 서블릿에서 분석,처리하여 클라이언트에게 response에 담아 넘겨준다.

 

▶ HttpServlet

GenericServlet(추상클래스)을 상속받아 구현이 되었으며, http 환경에 맞도록 최적화(재가공) 된 클래스 이다.

(doGet(), doPost() 메서드가 분기된 클래스)

 

 ▶ Servlet 생명 주기 ( Life Cycle )

서블릿 생명주기는 서블릿 컨테이너에서 관리하며, 서블릿의 생성과 소멸을 관리한다.

서블릿이 소멸 후 Garbage Collection 에서 메모리를 관리한다.

 

서블릿은 웹서버와 같이 같은 프로세스의 한 부분으로 웹서버  플랫폼에서 돌아간다.
웹서버는 각각의 서블릿을 초기화하고, 사용하고 소멸짓는 책임을 지고있다.

클라이언트가 Servlet에 요청하면 바로 호출되지 않고, 
객체를 생성하고 초기화 작업을 거친 후 요청을 처리하는 생명 주기를 갖고 있습니다.
Servlet의 생명 주기는 다음과 같이 이루어집니다.

 

▶ 메소드 실행 순서

 - init() : 최초 1번 실행시 실행
 - service() : doGet(), doPost(), toDelete(), toPut() 등 http 환경으로 최적화 되어 분기되어 실행된다.
 - destroy() : 서블릿 제거시 실행되며, 1번만 실행.


JSP 페이지도 결국은 Servlet이기 때문에 아래와 같은 생명 주기를 갖습니다.

 

1. 요청이 오면, Servlet 클래스가 로딩되어 요청에 대한 Servlet 객체가 생성됩니다. 
2. 서버는 init() 메소드를 호출해서 Servlet을 초기화 하며, init()메소드는 재정의가 가능합니다. 
3. service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리하도록 합니다.또한 재정의가 가능하다. 
4. service() 메소드는 특정 HTTP 요청(GET, POST 등)을 처리하는 메서드 (doGet(), doPost() 등)를 호출합니다. 
5. 서버는 destroy() 메소드를 호출하여 Servlet을 제거합니다. 
   (객체의 삭제. 서블릿 객체가 삭제되는 시점은 웹서버에서 웹 어플리케이션 서비스가 중지되는 시점이다.)

 

  서블릿 사용하기

▶ 서블릿 만들기

java class 파일을 만들때 이클립스에서 제공하는 Servlet을 만든다.

패키지 생성 - 패키지 우클릭 - 서블릿 생성

확장자 명으로 경로를 컨트롤러로 이동시킬수 있는 방법이다.

 

톰캣 버전 낮을때  - xml 

톰캣 버전 높을 때  - 어노테이션

 

▶ 어노테이션 설정하기

클래스명 입력후 next 버튼 클릭하면 다음과 같이 파라미터와 맵핑 설정하는 창이 뜬다.

 

 - 파라미터 값 확인

String firstParam = config.getInitParameter("firstParam");

 - 맵핑 

설정한 경로 패턴으로 접근시 서블릿에서 Get, Post 방식에 따라 doGet, doPost 메소드를 실행시킨다.

 

▶ 서블렛 메소드 사용

 

HttpServlet 클래스의 메서드들. 사용하길 원할경우 체크해서 사용

 

Servlet은 HttpServlet 클래스를 상속받아 구현한다.

Servlet은 정보(url 맵핑 및 초기 설정값)은 @WebServlet 어노테이션 혹은 web.xml에서 설정이 가능하다.

'JAVA' 카테고리의 다른 글

Generic(제네릭)  (0) 2020.05.13
필터 (Filter)  (0) 2020.05.12
인터페이스  (0) 2020.05.07
추상 클래스  (0) 2020.04.27
메소드 오버라이딩  (0) 2020.04.27