웹과 JSP 프로그래밍 이해하기2

songB·2022년 3월 8일
0

JSP

목록 보기
2/13

4. 웹 프로그래밍과 JSP

웹 프로그래밍 언어는 클라이언트 측 실행 언어와 서버 측 실행 언어로 구분된다. 자바 기반의 JSP는 서버 측 언어이다. 원래는 서블릿이 먼저 개발되었으나 방식이 어려워 HTML코드에 직접 삽입할 수 있는 JSP가 개발되었다. JSP와 서블릿은 별개의 기술이 아니며 WAS에서 클라이언트에게 서비스될 떄 서블릿으로 변경된다.

자바 코드안에 HTML 코드를 추가 - 서블릿
HTML 코드안에 자바 코드를 추가 - JSP

특징:

  • JSP는 서블릿의 확장이다. : JSP에서는 서블릿의 모든 기능을 사용가능. 서블릿과 마찬가지로 JDBC,JNDI,EJB 등의 자바 API 사용가능. 쉽게 개발할 수 있도록 내장 객체, 미리 정의된 태그, 표현식 언어와 사용자 정의 태그를 사용가능
  • 유지 관리가 용이하다. : 서블릿과 반대로 프레젠테이션 로직과 비즈니스 로직을 분리가능
  • 빠른 개발이 가능하다. : 서블릿은 코드 수정시 업데이트하고 다시 컴파일해야하나 JSP는 다시 컴파일하고 배포할 필요 없음
  • 코드 길이가 짧아진다. : 액션태그, JSTL, 사용자 정의 태그 등 다양한 태그와 표현언어, 내장 객체 등을 사용

5. JSP 페이지의 처리과정

  1. 클라이언트에서 Hello.jsp 요청
  2. 웹서버는 Hello.jsp를 찾아서 JSP 컨테이너에 전달
  3. JSP 컨테이너는 Hello.jsp를 Hello_jsp.java 서블릿 프로그램으로 변환
  4. JSP 컨테이버는 서블릿 프로그램을 컴파일하여 Hello_jsp.class로 만들고 웹 서버에 전달
  5. 웹서버는 정적 웹 페이지처럼 .class의 실행결과를 브라우저에 응답
  6. 웹브라우저는 가공된 HTML 페이지를 동적으로 처리한 결과를 보여줌

<웹 서버, 웹 컨테이너, 웹 애플리케이션 서버의 차이>

  • 웹 서버(web Server) : HTTP 프로토콜 이용하여 클라이언트의 요청을 받아 html이나 오브젝트를 전송. 요청 중 자체적으로 처리할 수 없는 것은 컨테이너로 전달. 예) 아파치, IIS
  • 웹 컨테이너(Web Container) : JSP와 서블릿을 실행할 수 있는 프로그램. 서블릿 컨테이너로도 불림. 웹서버에서 JSP를 요청하면 JSP파일을 서블릿으로 변환하여 컴파일 수행, 결과를 웹서버에 전달.
  • 웹 애플리케이션 서버(Web Appication Server) : 웹에서 사용하는 컴포넌트를 올려놓고 사용하는 서버. 웹서버 + 웹컨테이너 형태. 예) 톰캣, BEA의 웹로직

6. JSP 생명주기

JSP를 컴파일한 .class 파일에는 jspInit(),_jspService(),jspDestroy() 메소드가 존재한다.

  1. 번역(translation)
    JSP 컨테이너가 JSP파일을 읽고 구문 분석. 페이지와 페이지에 사용된 태그 라이브러리를 참조하는 사용자 정의 태그와 표중 디렉티브, 액션태그의 구문 정확성을 검증. 소스파일을 자바코드(서블릿)으로 변환.
    예) Hello.jsp -> Hello_jsp.java

  2. 컴파일(Compilation)
    자바코드의 모든 구문을 검사. JSP 페이지 내의 선언문, 처리문, 표현문 등의 스크립트 태그를 사용하여 삽입된 구문의 오류를 검사. 변환된 서블릿을 컴파일하여 클래스 파일 생성.
    예) Hello_jsp.java -> Hello_jsp.class

  3. 로딩(Loading) 및 초기화(Initialization)
    JSP 컨테이너가 .class를 로딩하고 클래스의 인스턴스를 작성함. 이때 인수가 없는 생성자를 사용. 컨테이너는 서블릿의 init() 메소드, 즉 jspInit() 메소드를 호출하여 인스턴스가 된 객체를 초기화함. DB연결, 파일 열기, 룩업 테이블 생성 등을 초기화함. 일반적으로 초기화는 한 번만 수행.

  4. 실행(Execution)
    각 클라이언트의 요청에 대해 컨테이너가 요청 및 응답 객체를 전달하는 _jspService() 메소드를 실행. 웹 브라우저가 JSP페이지를 요청하여 페이지가 로딩 및 초기화 될 때마다 컨테이너는 _jspService() 호출하여 응답객체 전달. JSP 생명 주기가 끝날 때까지 모든 요청에 대해 상호작용함.

  5. 소멸(Destruction)
    생명주기완료. 컨테이너는 실행중인 JSP를 jspDestroy() 메소르를 사용하여 제거. 서블릿의 destroy() 메소드에 해당. DB연결 해제 또는 열려있는 파일 닫기 등을 수행해야 할 때 메소드를 오버라이딩. 컨테이너가 해당 서블릿 인스턴스를 제거할 떄 어떤 활동을 정리하기 위해 메소드 호출.

※ jspInit()과 jspDestroy() 메소드는 컨테이너가 기본 기능을 제공하기 때문에 오버라이딩이 선택 사항. _jspService() 메소드는 컨테이너가 추가하기 때문에 오버라이딩 불가능

※ 요청시 JSP 컨테이너는 페이지를 변환(번역)할 필요가 있는지 확인함. 서블릿 클래스가 JSP 페이지보다 오래되었다면 (파일이 수정된 경우, 수정 후 컴파일이 안된 경우) 컨테이너는 서블릿으로 변환. 아니라면 성능 향상을 위해 건너뜀.



출처: 쉽게 배우는 JSP웹 프로그래밍|송미영|한빛아카데미
profile
백송은입니다.

0개의 댓글

관련 채용 정보