JSP프로그래밍 기초- JSP란?, JSP동작원리,스크립트 기반 태그

2020. 5. 31. 13:30자바 Java/JSP(Java Server Page)

반응형

<정리>

  • JSP는 태그를 이용해 간단하게 서블릿을 작성할 수 있게 하는 기술 이다 .
  • JSP 소스는 최초 요청시 자바 소스로 변환, 변환후 컴파일 되어 클래스 파일 만들어진다. 
  • *.jsp -> *.java ->*.class 순으로 처리 
  • JSP소스의 자바 소스변환과 컴파일 작업은 JSP 컨테이너가 한다 
  • 컴파일된 클래스 파일은 서블릿 컨테이너가 실행 한다 
  • 모든 JSP 는 _jspService() 메소드를 가지며 _jspService()는 JSP가 실행 될 때마다 호출 된다. 
  • JSP 태그는 스크립트 기반 태그와 XML 기반 태그를 지원한다 
  • 스크립트 기반 태그는 다음과 같다. 

  • 1.  <%      %> 태그 내에 실행문 구현, 실행문은 _jspService() 메소드 내로 그대로 옮겨진다. 

  • 2. <%=     %>태그는 _jspService() 메소드 내에서 out.print(); 로 변환된다. 

  • 3. <%!      %> 태그는 멤버변수, 메소드를 선언할 때 사용  

  • 4. <%@    %>태그는 페이지에 대한 정보를 지정할 때 사용한다. 

  • 5. <%--    --> 는 주석 처리 하는 태그이다. 

 

 

 

 

JSP 은 아래와 같은 개념을 기반으로 만들어졌다.

템플릿 데이터 

→ 대부분 동적 웹 쿤텐츠를 이루는 많은 부분은 고정되어 있더나 템플릿 데이터(Template)이다. 템플릿데이터는 클라이언트로 출력되는 컨텐츠로 HTML, 자바스크립트, 스타일 시트, JSON, XML, 일반 텍스트 등이 여기에 해당한다. JSP에서는 이러한 템플릿 데이터 부분은 해석하지 않고 그대로 출력한다. 

 

동적인 데이터의 추가 

→ JSP기술은 템플릿 데이터에 동적인 테이터를 끼워넣을 수 있는 간단하지만 강력한 방법을 제공. JSP에서는 템플릿 데이터와 함께 출력을 쉽게 할수 있는 '표현식(expression)' 이라는 스크립팅 요소를 제공, JSP2.0은 좀더 확장된 기능으로 EL(Expression Language)라는 것도 제공 

 

기능의 추상화 

추상화는 객체지향 프로그램에서 사용하는 용어로 세부구현은 숨기고 기능을 사용할 수 있도록 구현하는 것을 의미, 재사용 성을 높이는 기술이다. ( 즉, 중요한 것은 남기고 불필요한 것은 제거하는 일이다) 

     자바빈즈(JavaBeans) 컴포넌트 아키텍쳐 : 컴포넌트 라는 개념은 규격에 맞게 조각들을 만들어 놓고 조각들을 이용해 완성된 하나의 제품을 만들자는 것, 자바에서도 규격에 맞는 조각이 있는데 이것을 자바빈즈라고 하며, JSP에서 사용하는 컴포넌트는 JSP자바빈즈 라고 한다. 

    태그라이브러리 : 자주 사용가는 기능을 매번 구현하는 것이 아니라 JSP 태그로 만들어 사용하여 재사용성을 높일 수 있다. 

 

 

 

JSP의 장점 

Write Once, Run Anywhere properties 

JSP는 플랫폼에 무관하고, JSP스펙을 지원하는 어떠한 웹 애플리케이션 서버에서도 동작 한다. 어떠한 웹 브라우저로도 접근 할 수 있다.

 

역할 분리 

JSP는 프레젠테이션 기능과 비지니스 로직 기능을 분리할 수 있어서, 개발자와 디자이너의 역할을 분리할 수 있다 

디자이너가 프레젠테이션 역할을 하는 HTML 페이지를 만들어주면 개발자는 자신이 개발한 컴포넌트와 JSP 문법을 이용해 디자이너가 작업해준 HTML  페이지에 프로그램 코드를 작성해 넣고, 확장자를 .jsp로 변경하는 방식으로 작업을 분담 합니다. 

 

컴포넌트와 태그라이브러리 재사용

JSP는 자밥빈즈 컴포넌트와 EJB, 태그라이브러리에 기반을 두고 재사용성을 강조 

 

정적 콘텐츠와 동적 콘텐츠의 분리 

 

액션, 표현식, 스크립팅 제공

액션(Action)은 JSP에서 사용되는 요소의 하나로 내장객체, 혹은 서버 측 객체와 상호 동작할 수 있도록 유용한 기능을 추상화한 표준태그이다. JSP는 액션뿐만 아니라 자바 코드를 그대로 쓸 수 있는 스크립팅 요소(Scripting Elements)도 제공. 표현식(Expression)은 데이터에 접근하기 위해 제공, 스크립트는 이러한 기능들을 서로 엮어서 콘텐츠를 생성해 낼 수 있도록 페이지 내에 자바 코드를 삽입할 수 있는 영역을 제공 

 

N-tier 엔터프라이즈 애플리케이션을 위한 웹 접근 레이어 

대규모 웹 애플리케이션 대부분은 아키텍처를 여러 레이어로 분리, 콘텐츠를 프레젠테이션하기위한 레이어, 비지니스 로직을 위한 레이어, 데이터베이스를 위한 레이어 등의 멀티 레이어로 구성.

JSP 기술은 데이터를 프레젠테이션 하기 위한 웹 접근 레이어의 역할을 담당 

 

 

 

 

JSP동작원리

다음은 JSP기술이 지원하는 주요항목으로 JSP를 작성할 때 사용한다. 

표준지시자(Standard Directives)

표준액션(Standard Actions)

스크립팅요소(Scripting Element)

태그확장 매커니즘(Tag Extension Mechanism)

템플릿 콘텐츠(Template Content) 

 

웹 애플리케이션

-개념은 서블릿 스펙에서 상속

-구성 항목 

서버 상에서 동작하는 자바 런타임 환경

요청을 처리하고 동적 콘텐츠를 생성하는 JSP

요청을 처리하고 동적 콘텐츠를 생성하는 서블릿 

서버 측 자바빈즈 컴포넌트 

HTML, DHTML, XHTML, XML 등의 페이지 

클라이언트 측 자바 애플릿, 자바빈즈 컴포넌트, 자바 클래스 파일들

클라이언트 측에서 동작하는 자바 런타임 환경 

 

 

 

컴포넌트와 컨테이너 

컨테이너는 JSP 와 서블릿 클래스를 웹 컴포넌트로 인식한다. 요청된 JSP는 컨테이너에 전달되고 컨테이너는 해당 JSP를 해석하며, 해석된 결과물이 실제 서비스를 제공한다. 컴포넌트와 컨테이너를 분리하는 것은 컴테이너가 제공하는 서비스를 통해 컴포넌트의 재사용을 가능하게 해주기 때문이다. 

 

 

 

변환과 실행 

스크립트 언어는 실행되기 전에 먼저 실행 가능한 코드로 변역된다. JSP는 컨테이너가 해석하는 텍스트 형태의 컴포넌트 이다. 실제 JSPㅢ 실행은 변환단계와 요청단계로 구분한다 

           변환 (Translation) :  컨테이너는 JSP를 해석하여 하나의 서블릿 소스로 만든 다음에 해당 소스를 컴파일 한다. 그러면 서블릿 클래스 파일이 생성되는데, 이 서블릿 클래스는 JSP가 실행 될 수 있는 형태로 구현된 JSP 구현 클래스 이다. 이러한 변환 과정은 웹 컴포넌트가 배치되는 시점이나 해당페이지에 대한 최초 요청이 있을 때 컨테이너가 수행한다 

         실행 (Execution) : 실행은 요청이 있을 때마다 발생. 컨테이너는 서블릿으로 변환되어 컴파일된 구형 서블릿 클래스를 초기화 하고 이 서블릿 클래스를 통해 요청을 처리하고 응답한다. 

 

 

 

 

 

1. 개발자는 HTML 태그와 JSP 태그를 사용하여 페이지를 작성 한 후 확장자를 .jsp 로 저장한다. 태그를 사용하여 서블릿을 간단하게 만들수 있는 기술이 JSP 지만, 어쨋든 JSP도 서블릿 이므로 서블릿으로서 동작한다. 

2. 클라이언트로부너 JSP 요청이 들어오면, JSP컨테이너는 태그로 만들어진 JSP파일을 완벽한 자바소스로 변환하여 *.java 파일로 만든다.

3. JSP컨테이너는 *.jsp 파일을 변환한 *.java 파일을 컴파일 하여 *.class 파일을 만든다. 

4. 컴파일된 자바 실행 파일은 서블릿 컨테이너에 의해 서블릿으로서 동작한다.

5. 변환과 컴파일 작업은 최초의 요청이나 JSP 변경되었을때만 수행된다. 

 

 

 

 

자바 서블릿 소스 

모든 JSP가 자바소스로 변환 될 때, _jspService() 메소드가 삽입된다.

_jspService() 메소드는 JSP가 실행 될 때마다 자동으로 호출되는 메소드 이다. 

 

 

JSP 구문요소 

 스크립트 기반 태그  스크립트 기반 태그들은 <% 로 시작해서 %> 로 끝나늑 서이 특징 

1. 주석문(Comment)  <%--       --%>

 종류 구문 주석으로 처리되는 시점 
JSP 주석  <%--      --%> 서블릿 코드로 변환 될 때 
HTML 주석 <!--       -->  브라우저에 의해 응답이 파싱 될 때 
자바 주석  // 
/*            */
서블릿 소스가 컴파일 될 때 

 

2. 지시자(directive)   <%@ 지시자 속성 = 값 %>

 지시자에는 page, include, taglib 이 있다. 

 

 

 

3. 스크립트릿(scriptlet) <% 실행문 %> 

<% 와 %> 사이의 코드는 자바소스로 변환시 _jspService() 메소드 내에 그대로 옮겨진다. 

4. 표현식(expression) <%= 실행문 %>

동적인 데이터를 응답결과에 포함 하기 위해 사용한다.

<%= 와 %> 사이의 코드는 자바소스로 변환시 out.print(실행문); 으로 변환된다. 

 

5. 선언문 (declaration)  <%! 변수 선언 %> 또는 <%! 메소드 선언 %> 

JSP 페이지 내의 스크립트 코드에서 사용할 멤버변수를 선언하거나 메소드를 정의하고자 할 때 사용 되는 특별한 목적의 태그

<%! ... %> 선언문 태그는 자바소스로 변환 시 클래스의 멤버로서 선언만 됩니다. 

 

 

  XML 기반 태그 

1. 표준 액션 태그 (Standard action tag)

2. 커스텀 태그 (Custom tag) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형