-
JSP란?
JSP(JavaServer Pages)는 HTML, DHTML, XHTML,XML과
같은 동적 웹 콘텐츠를 생성하는 애플리케이션을 만들기 위한 J2EE 플랫폼에 자바기술이다.
JSP 개념
동적인 콘텐츠를 만들 때는 어떠한 형태로든 "콘탠츠를 어떻게 생성할지를 " 지시하는 프로그래밍이 필요서블릿처럼 프로그램 소스안에 HTML 태그를 처리하면 변경이 일어날때마다 .변경이 일어날때마다 매번 컴파일 해줘야되서 동적 콘탠츠를 만들기 어려움JSP기술은 동적으로 콘텐츠를 생성하기위해 프로그래밍 코드가 담긴 스크립트를 포함하게 하고 HTML과 유사한 태그를 통해 어려운 자바 코딩 없이 자바객체를 생성할 수 있게 한다.JSP기술은 다음과 같은 개념을 기반으로 만들어졌다.
템플릿 데이터
데부분 동적 웹 콘텐츠를 이루는 많은 부분은 고정 되어 있거나 탬플릿(Template) 데이터이다.템플릿 데이터는 전형적으로 텍스트나 XML조각, HTML 태그들일수 있다.JSP기술은 템플릿데이터들이 변형ㄷ되지 않도록 처리하는 방법을 지원한다.<HTML><BODY><h1>헬로 월드 </h1></BODY></HTML>JSP에서 이러한 탬플릿 데이터부분은 해석하지 않고 그대로 출력 해준다.서블릿은 out.print("<HTML>"); 와 같이 출력해줘야한다. JSP는 프로그램적인 명령문들만 컨테이너가해석해서 처리하고, HTML은 그대로 HTML 로 처리되므로 별도의 명령문 처리할 필요가 없다.동적인 데이터의 추가
JSP 기술은 템플릿 데이터에 동적인 데이터를 끼워 넣을 수있는 간단하지만 강력한 방법을 제공한다.JSP에서 제공하는 request를 이용해서 쉽게 동적인 데이터를 추가할 수 있다.이처첨 JSP 에서는 템플릿 데이터와 함께 출력을 쉽게 할 수있는표현실 이라는 스크립팅 요소를 제공하고 있으며JSP2.0부터 EL이라는 것을 제공할 수있어서 동적 콘텐츠를 쉽게 작업 할 수 있다.기능의 추상화
추상화는 객체지향 프로그램에서 사용하는 용어로서 세부 구현은 숨기고 기능을 사용할 수 있도록 구현하는 것을 의미하며재사용성을 높이는 기술이다.JSP는 이런 추상화를 위해 2가지 메커니즘을 제공한다.1. 자바빈즈 컴포넌트 아키텍져- 컴포넌트라는 개ㅁ념은 규격에 맞게 조각들을 만들어 놓고 조각들을 이용해 완성된 하나의 제품을 만들자는 것이다.자바에 규격에 맞는 조각이 자바빈즈 ,JSP에서는 JSP 자바빈즈라고 한다. 자바빈즈를 재사용성이 높은 애플리케이션 개발이가능하다.2. 태그 라이브러리- 자주 사용하는 기능을 매번 구현하는 것이 아니라 . JSP 태그로 만들어 사용한다면 한버의 작성으로 여러곳에서 사용할 수있어 재사용성을 높일 수있다.JSP의 장점
Write ONce , Run Anywhere properies- JSP는 플랫폼에 무고나하고 JSP 스펙을 지원하느 어떤 웹 애플리케이션 서버에서도 동작함, 또한 어떠한 웹브라우저로도 접근가능함플랫폼에 구애되지 않는다.
역할분리
JSP는 프레젠테이션 기능과 비즈니스 로직 기능을 분리할 수있어서 개발자와 디자이너 역할을 분리할 수 있다.
컴포넌트와 태그 라이브러리의 재사용
소프트웨어 개발의 큰이슈는 생산성 향상
빠른 시간 내에 효율적으로 작성하기 위해 여러방법을 고민하고 적용해왔다.
JSP는 자바빈즈 컴포넌트와 EJB태그 라이브러리 기반을 두고 재사용성을 강조
정적인 콘텐츠와 동적이 콘텐츠 분리
JSP 태그이외에는 정적인 콘탠츠로 처리되어 동적인 콘텐츠와 쉽게 분리될 수 있다.
액션 , 표현식, 스크립팅 제공
액션은 JSP에서 사용되는 요소중 하나 내장객체 혹은 서버측 객체와 상호동작할 수 있도록 유용한 기능을 추상화한 표준 태그이다.
스크립팅은 자바코드를 그대로 쓸수 있는 기능 제공
표현식은 데이터에 접근하기 위해 제공 됨
스크립트는 이러한 기능들을 서로 엮어서 콘텐츠를 생성 해 낼수 있도록 페이지 내에 자바 코드를 삽입 할 수 있는 영역을 제공.
N-tier 엔터프라이즈 애플리케이션을 위한 웹 접근 레이어
대규모의 웹 애플리케이션 대부분은 아키ㄴ텍처를 여러 레이어로 분리한다.
프레젠테이션 레이어 , 비즈니스레이어 , 퍼시스턴트 레이어등 멀티 레이어로 구성
JSP기술을 데이터를 프레젠 테이션 하기 위한 웹 접근 레이어 역할을 담당할 수있으며
웹 구축시 많이 사용된다.
JSP 동작원리
JSP는 응답정보를 만들기 위해 요청을 어떻게 처리할 것인가를 명세한 태그 기반의 문서이다.JSP에는 템플릿 데이터와 동적인 기능을 담당하는 액션들이 혼합되어 있으며 , JAVA2 기반에서 동작한다.JSP 기술이 지원하는 주요 항목- 표준 지시자- 표준 액션- 스크립트 요소- 태그 확장 메커니즘- 템플릿 콘텐츠웹 애플리케이션
웹 애플리케이션 개념은 서블릿 스펙에서 상속 되었다.웹 애플리케이션은 다음과 같은 항목으로 구성될 수있다.- 서버상에서 동작하는 자바 런타임 환경- 요청을 처리하고 동적 콘텐츠를 생성하는 JSP- 요청을 처리하고 동적 콘텐츠를 생성하는 서블릿- 서버 측 자바빈즈 컴포넌트- HTML DHTML XHTML, XML 등의 페이지- 클라이언트 측 자바 애플릿, 자바빈즈 컴포넌트, 자바 클래스파일- 클라이언트측에서 동작하는 자바 런타임 환경컴포넌트와 컨테이너
컨테이너는 JSP와 서블릿 클래스를 웹 컴포넌트로 인식한다.요청된 JSP는 컨테이너에 전달되고 컨테이너는 해당 JSP를 해석하며 해석된 결과물이 실제 서비스를 제공한다.컴포넌트와 컨테이너를 분리하는 것은 컨텡이너가 제공하는 서비스를 통해 컴포넌트의 재사용을 가능하게 해주기 때문이다.변환과 실행
스크립트 언어는 실행되기 전에 , 먼저 실행 가능한 코드로 번역된다. JSP는 컨테이너가 해석하는 텍스트 형태의 컴포넌트이다.실제 JSP 실행단계는 변환과 요청 단계로 구분한다;변환 : 컨테이너는 JSP를 해석하여 하나의 서블릿 소스로 만든다음에 해당소스를 컴파일한다.그러면 서블릿 클래스 파일이 생성됨JSP가 실행될 수 있는 상태로 구현된 JSP 클래스이러한 변환 과정은 웹컴포넌트가 배치되는 시점이나 , 해당 페이지에 대한 최초 요청이 있을 때 컨테이너가 수행한다.실행 : 실행은 요청이 있을 때마다 발생한다. 컨테이너는 / 서블릿으로 변환되어 컴파일되 구현 서블릿 클래스를/ 초기화 하고,이 서블릿 클래스를 통해 요청하고 처리하고 응답한다.클라이언트가 웹브라우저를 통해 JSP를 요청 하였을때 구체적으로 JSP변환과 실행과정이 어떻게 이루어지는지 알아본다.1. 개발자는 HTML과 JSP 태그를 사용하여 페이지를 작성한고 .jsp로 저장한다. 태그를 사용하여 서블릿을 간단하게 만들 수있는 기술이 JSP 이지만 어쨋든 JSP도 서블릿이므로 서블릿으로 동작한다.2. 클라이언트로 부터 JSP요청이 들어오면 JSP 컨테이너는 태그로 만들어지 JSP 파일을 완벽히 자바 소스로 변환하여 *.java 파일로 만듬3. JSP 컨네티어는 *.jsp 파일을 변화한 *.java파일을 컴파일하여 *.class 파일을 만든다.4. 컴파일된 자바 실행파일은 서블릿 컨테이너에 의해서 서블릿으로 동작한다.5. 변환과 컴파일 작업은 최초요청이나 JSP가 변경 되었을때만 수행된다.스크립트 기반 태그
JSP 페이지는HTML 텍스트등과 같은 정적인 데이터와 함께 JSP구문 요소 를 이용해서 텍스트 기반으로 작성할 수 있다.JSP에서 사용하는 테그들- 주석문- 지시자- 스크립트- 표현식- 선언문XML 기반 테그- 표준 액션 태그- 커스텀 태그JSP스크립트 태그는 크게 4가지가 있다.<%@ ... %> 페이지에 대한 정보 설정<%! .... %> 멤버 변수 또는 메소드 설정<% ... %> _jspService() 내에 그대로 옮겨짐<%= ... %> _jspService() 내에 그대로 옮겨짐. 단 out.print( ); 로 변경됨주석문
패스지시자
지시자는 클라이언트로 어떠한 출력을 처리하거나 동적 데이터를 생성하기 위한 프로그램 코드 구문이 아니다.지시나는 JSP 컨테이너가 JSP페이지를 파싱하여 자바 소스로 변환하는데 필요한 정보를 알려주기 위해 사용한다.파싱이란 ?데이터형태를 다른 데이터형태로 가공하는것(1) page 지시자page 지시자는 컨테이너가 참조하는 다양한 정보중에서 JSP페이지에 종속적인 설정 정보들을 알려주기 위한 수단으로 사용된다.contentType 속성
- 웹브라우저에 전송되는 문서의 타입과 문자 코드를 지정한다.- 별도로 지정하지 않으면 문서의 타입은 HTML , 문자 코드은 ISO-8859-1로 지정된다.ISO-8859-1는 한글을 지원 하지 않으므로 이클립스에 오류 메세지가 나타난다.UTF-8로변경하고 저장하면 문제없다JSP 파일 한글 기본설정preferenceswebjspfile인코딩 타입변경import속성
만약에 객체를 JSP 파일 안에서 쓰고 싶다면 import로 지정해줘야한다.import= 패키지.파일명errorPage와 is ErrorPage속성errorPage= "파일명"isErrorPage="true/false"페이지에 오류를 처리하기 위한 속성<%@ page isErrorPage="true">이 페이지를 에러 페이지로 지정오류페이지에는 exception 객체가 전달된다.exception 객체러 오류의 정보를 얻는 것이 가능하다.<%@ page errorPage="example3.jsp%>현재 페이지가 오류가 발생하면 해당 오류를 처리할 페이지로 example3.jsp로 지정하고있다.어떤 오류가 발생하더라고 프로그램이 중단되지 않는다.trimDirectiveWhitespace 속성
trimDirectiveWhitespace ="true/false"
페이지 지시자가 첫줄에오면 빈줄이 생기는데
그것 없애줌
pageEncoding 속성
JSP 저장시 사용할 문자코드를 지정한다.생략시에는 contentType속성에 지정된 값으로 설정된다.session 속성
session="true/false"주어진 JSP페이지의 세션 관리 처리 여부를 지정하고자 할때사용된다.true or false로 값을 지정하며 기본값은 true이다.buffer 속성
JSP 페이지에서 웹브라우저로 출력할때 버퍼를 사용하여 출력일정크기의 버퍼를 잡아 두는 것이 클라이언트로 부터 요청이 들어 올때 마다 JSP 컨테이너가 출력 버퍼를 생성해야하는 부담이 없어지고수행 성능이 높아진다.isThreadSafe 속성
JSP가 서블릿으로 변환 될때 SinggleThreadModel의 추가 상속 여부를 결정한다.이 속성 값이 false 이면 SingleTreadModel을 추가 상속한다. 기본값은 true 이다.Info 속성
info ="text"페이지 역할을 설명하는 문자열을 추가할 수 있다.일반적으로 작성자에 대한 정보와 버전 , 저작권등에 대한 정보를 정의한다.language 속성
language="언어 이름"페이지에서 사용되는 스크립트 언어를 지정할 때 사용된다.생략하면 JSP 기본 적으로 자바 언어로 간주한다.JSP컨테이너 제품에 따라서 다른 언어를 지원 할 수도 있다.extends 속성
JSP컨테이너가 JSP페이지를 파싱하여 생성되는 서블릿 클래스가 상속할 부모 클래스를 지정한다.이 속성은 거의 사용되지 않는다.JSP컨테이너는 부모클래스를 미리 구현해 놓고 이 부모클래스를 상속하는 서블릿 소스코드를 생성하기 때문이다.자바개발자가 굳이 지정하는 일은 없다.isELIgnored 속성
EL표현식의 사용여부를 결정한다.(2)include 지시자
하나의 JSP 페이지는 여러 JSP 파일의 일부 일 수 잇다.
반복되는 부분을 include지시자를 이용해서 다른파일을 가져다 사용할 수 있다.
<%@ include file="파일명">
스크립트릿
스크립트릿은 JSP 페이지가 요청 될 때마다 수행되어야 하는 자바 코드를 추가하고자 할 때 사용하는 태그이다.<%와 %> 사이의 코드는 자바 소스로 변환시 _jspService() 메소드내로 그대로 옮겨진다.스크립트릿 테그 안에 메소드안에 들어갈 수 있는 실행문을 지정하여 이 실행문 클라이언트로부터 요청될 때마다 수행된다.JSP태그 안에 태그를 사용해야하므로 가독성이 떨어짐표현식
동적인 데이터를 응답결과에 포함하기 위해 사용한다.JSP는 동적 웹 콘텐츠를 쉽게 만들기 위해 사용하는 기술이다.스크립트릿 태그는 데이터 베이스나 질의 문자열에서 데이터를 가져와서 필요한 로직과 연산을 통해 동적인 데이터를 만듬동적인 데이터를 정해진 위치에 표현하는 태그가 바로 표현식<$= 실행문 %>선언문
선언문은 JSP 페이지 내의 스크립트 코드에서 사용할 멤버 변수를 선언하거나 메소드를 정의 하고자 할때 사용되는 특별 목적의 태그로서선언문을 이용해 작성한 코드는 자바 소스로 변환시 멤버로 선언된다.1234567891011121314151617181920<%@ page language="java" contentType="text/html; charset=EUC-KR"pageEncoding="UTF-8"%><%@ page %><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h3>선언문으로 구현한 덧셈</h3><%!public int sum (int a , int b ){return a+b;}%>덧셈의 결과 : <%= this.sum(20,30) %></body></html>cs 'Servlet' 카테고리의 다른 글
내장 객체 (0) 2019.03.03 JSP프로그래밍 정리 (0) 2019.03.03 상태정보 유지 기술 (0) 2019.02.25 질의 문자열(Query String) (0) 2019.02.21 서블릿 디렉터리를 WEB-INF/classes 로지정하는 이유 (0) 2019.02.21