프로그래밍언어/WEB

JSP-Servlet

헬로월드! 2020. 5. 10. 01:14

서블릿이란 ? 자바 플랫폼에서 컴포넌트를 기반으로 하는 웹 애플리케이션을 개발할 때 사용하는 핵심기술이다.

JSP 는 서블릿이라는 서버에 기반하는 웹 프로그래밍 기술로써 내부적으로는 JSP 가 서블릿 형태로 변환되어 실행되는 것이다.

 

복잡한 것 같은 서블릿을 사용하는 이유는 무엇일까? 장점은 아래와 같다.

 

1) 자바를 기반으로 하기 때문에 자바 API를 모두 사용할 수 있다. (API: Application Programming Interface / 특정 클래스를 다른 프로그램에서 사용하려고 필요한 정보를 규격화해놓은 것 ) 

2) 운영체제나 하드웨어의 영향을 받지 않으므로, 한 번 개발된 애플리케이션은 다양한 서버 환경에서도 실행할 수 있다.

3) 웹 애플리케이션에서 효율적인 자료 공유 방법을 제공한다.

4) 다양한 오픈소스 라이브러리와 개발도구를 활용할 수 있다.

서블릿을 이용한다면 웹 애플리케이션 확장이 쉬워지고 독립적인 플랫폼으로 개발할 수 있다!

=> MVC 패턴(Model - View- Controller) 을 쉽게 적용할 수 있고 컨테이너와 밀접한 서버 프로그램을 구현할 수 있다. 

=> MVC 패턴을 적용할 때 콘텐츠와 비즈니스 로직을 분리할 수 있으며 컨트롤러 (servlet) , 뷰 (jsp) 가 역할을 분담함으로서 웹 디자이너와 개발자 사이에 작업을 원활하게 진행할 수 있다.

=> 리스너 및 필터 서블릿 등 고급 프로그래밍 기법을 통해 더욱 효과적인 웹 애플리케이션을 설계할 수 있다.

 

서블릿을 잘 알아둔다면 스프링이나 스트러츠 같은 오픈소스 프레임워크 기반의 웹 애플리케이션을 개발할 때 도움이 될 것이다.

 

1. 서블릿과 서블릿 컨테이너 

서블릿 = 자바로 웹 프로그래밍을 하기 위한 기술

서블릿은 컨테이너라는 서버 소프트웨어에 의해 동작한다. JSP 와 달리 서블릿은 일반적인 자바 클래스 구조다.(= 일반 자바 소스) 서블릿 컨테이너는 웹 서버와 마찬가지로 URL 을 기반으로 한 요청에 따라 해당 서블릿을 실행한다. 즉, JSP 나 서블릿을 사용하지 않는 웹 개발에는 웹 서버만 있으면 되지만 JSP 나 서블릿으로 개발하려면 아파치 톰캣과 같은 서블릿 컨테이너가 필요하다.

 

구분 웹서버 서블릿 컨테이너
사용목적 웹 서비스를 제공하기 위해 필요한 서버 기반의 소프트웨어 서블릿으로 개발된 자바 프로그램을 실행하고 처리하기 위한 서버 기반 소프트웨어
처리컨텐츠 HTML, CSS ,javascript , 이미지 파일 등  서블릿 클래스다
실행 방법 콘텐츠가 위치한 URL 요청에 의해 실행하며 요청할 때 마다 매번 디스크에서 읽어 처리한다. 서블릿 클래스 정보에 따라 서버에 매핑된 URL 정보에 따라 실행하며 컨테이너에 적재된 상태에서 처리한다.
JSP 실행 자체로 처리 X, 서블릿 컨테이너로 넘긴다. JSP 자체 처리 O
특징 웹 서비스 제공을 위한 다양한 설정을 제공하기 때문에 서버를 유연하게 운영하려면 웹 서버를 사용해야한다. 컨테이너에 따라 기본적인 웹 서버 기능을 내장하고 있으나 고급 설정이나 성능이 떨어지기 때문에 웹서버와 병행해서 사용할 것을 권장한다.

 

2. 서블릿 동작과정

서블릿은 사용자가 임의로 실행하는 것이 아니라 컨테이너에 의해 동작, 운영된다.

서블릿은 생명주기를 따른다. (생명주기란? 서블릿 클래스가 컨테이너에 의해 실행되고 서비스되고 종료되는 과정)

서블릿은 단순히 버튼을 누르면 시작되고 처리를 마치면 종료되는 구조 X , 각 생명주기 과정에 특정한 이벤트와 상태가 존재하는 구조 O

 

1) 컨테이너는 서블릿 클래스를 로딩한다.

2) 서블릿 클래스의 생성자 메서드를 호출해서 인스턴스를 생성한다.

3) 생성된 인스턴스의 init() 메서드가 호출된다. init() 메서드는 서블릿 생명주기에서 단 한 번 실행! 따라서 init() 메서드는 각종 초기화 작업 등을 수행

4) 서블릿에 대한 사용자 요청에 대해서는 web.xml 파일 이나 애너테이션@ 을 참조해서 URL 매핑을 확인하고, 해당 서블릿 인스턴스로부터 스레드를 생성하고 service() 메서드를 호출한다. 모든 사용자 요청에 대해서는 개별적인 service 메서드가 호출되며 , 이후 GET /POST 에 대해 doGet() 이나 doPost() 등의 메서드가 호출된다. 따라서 서블릿 개발자는 이들 메서드에 필요한 기능을 구현한다.

5) destroy () 메서드는 서블릿이 종료될 때 호출되는 메서드, 필요한 작업이 있다면 여기 내용을 작성해주면 된다.

 

3. 서블릿 구조

모든 서블릿은 javax.servlet.Servlet 인터페이스를 구현해야한다. 하지만 개발자가 직접 Servlet 인터페이스를 구현하는 것은 아니고 일반적으로 미리 정의된 javax.servlet.GenericServlet 과 javax.servlet.http.HttpServlet 클래스 중 하나를 상속하여 구현한다. 보통 HttpServlet 을 상속한다. HttpServlet 은 GenericeServlet 의 하위 클래스로 http 처리와 관련된 부가 기능이 추가된 구조이다. 

 

클라이언트 요청에 따라 서블릿 컨테이너는 service() 메서드를 호출하고, service() 메서드는 요청이 GET 인지 POST 인지를 구분하여 각각 doGet(), doPost() 메서드를 호출한다. service() 메서드는 자동 호출(생명주기)되므로 개발자는 doPost() doGet() 을 구현하면 된다. 클라이언트의 특성을 고려해서 GET 과 POST 의 각각의 요청을 다르게 처리해야 하는 경우도 존재한다. 

하지만 굳이 사용자의 요청을 구분할 필요가 없으면 doGet() 메서드에서 다시 doPost() 를 호출하거나 service()메서드를 오버라이딩해서 각각의 요청에 상관없이 특정 메서드를 호출해서 처리하는 방법을 널리 사용한다.

 

HTTP 사용자 요청은 프로토콜에 정의된 명령에 의해 처리되는데 일반적으로 GET 과 POST 를 사용한다.

 

  • GET 방식: 서버에 있는 정보를 가져오려고 설계된 방법 ( 서버 => 웹브라우저) , 서버에는 최대 240byte 까지 데이터를 전달할 수 있다. QUERY_STRING 환경 변수를 통해서 서버로 전달되는데  http://www.jitori.co.kr/servlet/login?id=ii&name=hh 이런식으로 ? 이후 값은 서버에서 QUERY_STRING 을 통해 전달된다. "속성=값" 으로 사용해야하며 &는 연결, URL 이 노출되므로 보안상 문제가 생길 수 있다. 
  • POST 방식: 서버로 정보를 올리려고 설계된 방법이다. (ex. html 폼에 입력한 내용= > 서버로 전달) , 서버에 전달할 수 있는 데이터 크기에는 제한 X , URL 에 매개변수 표시 X

4. 서블릿 생명주기

서블릿 초기화 : init() 메서드 => 요청/응답: servie() 메서드 => 서블릿 종료: destroy()메서드

 

 

 

'프로그래밍언어 > WEB' 카테고리의 다른 글

표현언어  (0) 2020.06.26
빈즈  (0) 2020.06.04
JSP : 내장객체 -session  (0) 2020.04.17
JSP : 내장 객체 - out  (0) 2020.04.17
JSP - 내장 객체 - request , response  (0) 2020.04.10