JSP-diary

서블릿

reallygeorge? 2020. 2. 13. 14:21

정의

  • 자바에서 제공하는 서버 어플리케이션 개발을 위한 기술
  • 웹 브라우저와 웹 서버를 이요해 웹 애플리케이션을 개발하는 것을 서블릿 프로그래밍이라 한다.
  • 자바 CGI 프로그램은 컴파일 방식, 자바 기반의 CGI 프로그램을 서블릿이라 부른다.
  • 다른 CGI와 다른 점은 웹 서버와 직접 데이터를 주고 받지 않고 서블릿 컨테이너를 통해 관리된다.

*웹 애플리케이션

  • 웹 브라우저에서 사용 할 수 있는 응용 소프트웨어

역할

  • 웹 프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 역할
  • 클라이언트가 HTTP 요청을 하게 되면 그에 맞는 결과를 전송해주는 것

CGI

  • Common Gate Interface의 약자
  • 웹서버에서클라이언트가 요청한 프로그램을 찾아 실행시키고, 그 작업의 결과값을 전달 받는 과정에서
    데이터를 주고 받는 규칙
  • 웹 서버에 의해 실행되며 CGI 규칙에 따라 웹 서버와 데이터를 주고받는 프로그램을 CGI프로그램이라한다.

CGI

*CGI에 대한 언어들의 장단점(컴파일 언어 vs 스크립트 언어)

  • 컴파일 언어(C,C++,JAVA)는 실행 속도가 빠르나 수정 시 컴파일 하여 재배포 해야 한다는 단점이 존재
  • 스크립트 언어(VBScript,PHP,Python,Perl)는 인터프리터 방식으로 읽어들여 속도는 느리나 변경사항
    발생시 즉시 반영이 가능하다.

서블릿 컨테이너

  • 서블릿의 생성 실행 소멸을 관리하는 프로그램.
  • 서블릿을 대신하여 CGI 규칙에 따라 웹 서버와 데이터를 주고 받는다.  -요청에 따른 Thread를 생성해준다.-
  • 사용자는 CGI 규칙이 아닌 JAVA 언어로 된 SERVLET 규칙을 알고 있어야 한다.

웹 서버 ->요청 ->서블릿 컨테이너 ->요청 ->서블릿CLASS ->결과 ->서블릿 컨테이너 -> 결과 -> 웹서버->클라이언트

 

*서블릿 컨테이너 역할

  • 통신지원 
    서블릿과 웹 서버가 통신할 수 있는 방법을 제공한다.
    통신 Process: 1.소켓생성 2. 특정 포트 리스닝 3.연결 요청시 스트림 생성해 요청 수락
  • 생명주기 관리
    Process: 1.서블릿 컨테이너 작동 2. 서블릿 인스턴스 3. 초기화 메소드 호출 4.요청에 따른 적절한 서블릿 메소드                 호출 5.가비지 컬렉션에 이해 서블릿 삭제             

*서블릿 라이프 사이클

  • 멀티스레딩 관리 
    동시에 여러 요청이 들어오면 멀티 스레딩 환경으로 동시 다발적인 작업을 관리
  • 선언적인 보안관리 
    컨테이너 안에 보안 기능 내제 되어있다. 서블릿 코드 안에 보안과 관련된 메소드 구현을 안해도 된다.

JAVA EE

  • Java에는 EE와 SE가 존재하는데 EE는 Enterprise Edition, SE는 Standard Edition
  • Java EE는 servlet을 사용하기 적합
    -호환성,신뢰성,보안성 높다.
    -트랜잭션 관리와 분산 기능을 쉽게 구현 한다.
  • 애플리케이션 개발에 피룡한 복합적인 기술을 정의하고 모아둔 것이 Java EE
  • JAVA EE안에 JAVA Servlet과 JavaServer Pages(JSP)가 내장 되어 있다.
  • 자바로 웹 어플리케이션을 개발한다는 것은 서블릿과 JSP를 이용하여 개발한다는 것.

WAS

  • web application server의 약자이다.
  • 서버쪽 어플리케이션의 생성,실행,소멸을 관리하는 프로그램을 어플리케이션 서버라 부른다.
  • 서블릿 컨테이너와 같이 웹 기술 기반으로 동작되는 어플리케이션 서버를 WAS라 부른다.

*Apache Tomcat은 WAS가 아니다

Java EE가 구현 하고 있는 Servlet,JSP 등의 웹 관련 부분만 구현한 서버인 서블릿 컨테이너 또는 
웹 컨테이너에 해당되는 것이 Apache Tomcat이다.

 

 

JSP와 서블릿의 차이

  • 결과적으로 하는 일은 동일

JSP

  • HTML 코드 안에 Java코드가 있음
  • Presentation(View)에 좋음
    -HTML 중심의 코드 구조라 디자인 작업에 바로사용-
  • 요청 결과를 나타내는 HTML문서를 작성하는데 유용
  • JSP가 수정된 경우 재배포할 필요가 없이 WAS가 알아서 처리

Servlet

  • Java 코드 안에 HTML 코드가 있다.
  • data Processing(Controller)에 좋다.
  • DB와의 통신,Business Logic 호출과 데이터를 읽고 확인하는 작업에 유용하다.
    -복잡한 프로그램 로직 구현에 적합-
  • Servlet이 수정된 경우 Java 코드를 컴파일(.class파일 생성)한 후 동적인 페이지를 처리하기에
    전체 코드를 업데이트하고 다시 컴파일 한 후 재배포하는 작업이 필요하다.
    (개발 생산성 저하)
  • 보안에 좋음 
    -.class 파일만 있어도 가능한데 .java 파일은 읽을 수 있어서 보안에 취약 .class파일은 읽을수가 없다.-


사용법

  • 일반적으로 사용자가 만드는 서블릿은 HTTPServlet을 상속받아 구현
  • 프로그래머가 작성하는 서블릿 클래스는 추상 클래스 HttpServlet에 있는 메소드 중 클라이언트 사용자가 
    요청한 정보에 따라 처리해야 할 메소드를 오버라이딩 해서 구현

doGet() : 클라이언트 HTTP GET 요청에 대해 처리.
 
doPost() : 클라이언트 HTTP POST 요청에 대해 처리.
 
doPut() : 클라이언트 HTTP PUT 요청에 대해 처리.
 
doDelete() : 클라이언트 HTTP DELETE 요청에 대해 처리.
 
init() : 서블릿의 생명주기 처리로 가장처음에 실행.
 
destory() : 서블릿의 생명주기 처리로 서블릿 객체를 메모리에서 제거할때 마지막으로 실행.