JSP&Servlet - JSP 구성요소
1. 디렉티브(Directive, 지시자/지시어)
표현법 : <%@ --내용-- %>
디렉티브(지시자)는 jsp 페이지의 설정 정보를 지정하고 클래스 속성을 변경하는 요소이다. 디렉티브는 page, include, taglib 총 세 가지 종류로 구성되어 있다.
- page
: jsp 페이지에 대한 기본 정보(속성)를 입력한다. page 디렉티브는 JSP 페이지와 관련된 속성을 정의하고 이 속성들은 웹 컨테이너에 정보를 제공한다. 해당 페이지의 처리 방법에 대한 정보를 알려주게 된다. 또한, 한 페이지에 page 디렉티브는 여러 번 등장할 수 있고 위치도 관계가 없다.
주요 속성 | |
info | 페이지에 대한 설명 |
language | 스크립트 코드에서 사용되는 프로그래밍 언어 지정(기본값 : java) |
contentType | 생성할 문서 타입(기본값 : text/html) |
import | 사용할 자바 클래스 지정, 중복 사용 가능 |
session | HttpSession 사용 여부 지정(기본값 : true) |
buffer | 출력 버퍼의 크기 지정(기본값 : 8kb) |
autoFlush | 출력 버퍼가 다 채워졌을 경우, 버퍼에 있는 데이터를 자동으로 비우게 할지의 여부(기본값 : true) |
isTreadSafe | 하나의 jsp 페이지가 여러 브라우저의 요청을 도잇에 처리할 수 있는지의 여부(기본값 : true) |
errPage/isErrorPage | 실행 도중 에러 발생 시 보여줄 페이지 지정/에러 처리 담당 페이지인지의 여부(기본값 : false) |
pageEncoding | 페이지 자체의 캐릭터 인코딩 지정 |
- include
: 여러 JSP 페이지에서 공통적으로 포함하는 내용이 있을 때 이러한 내용을 매번 반복해서 입력하지 않고 별도의 파일에 저장해 두었다가 JSP 파일에 삽입하도록 하는 것이다. include 디렉티브 처리 과정은 정적으로 include 지시자를 사용한 JSP 페이지가 컴파일 되는 과정에서 incldue 되는 JSP 페이지 소스 내용을 그대로 포함해서 컴파일한다. 즉, 두 개의 파일이 하나로 구성되기 때문에 페이지가 따로 존재하지만 하나의 페이지같은 마음가짐으로 프로그래밍을 해야한다.(변수선언, 변수사용 등...)
- taglib
: 태그 라이브러리(tag library)로 사용자가 만든 태그 모음이다. (사용자가 직접 기능 설정)
2. 스크립트(Script)
JSP에서 사용되는 문법의 표현을 말하며 선언문, 스크립트릿, 표현식, 주석으로 총 네 가지로 구성되어 있다.
- 스트립트 릿(Scriptlet)
: JSP 에 자바 코드를 기술하는 영역이다. 오로지 자바 코드만 올 수 있고 스크립트 릿에서 선언된 변수는 지역 변수 성격을 가지게 된다. 스크립트릿 요소는 서블릿으로 변환되는 과정에서 서블릿 안에 있는 service() 메소드 안에 선언이 되기 때문에 지역 변수의 성격을 가지게 되고 선언부처럼 메소드의 선언은 불가능하다.(service() 메소드 안에 또다른 메소드를 선언하게 되는 것이므로) 변수를 선언하게 된다면 초기화를 꼭 해주어야 한다!(지역 변수의 성격을 가지게 되므로)
표현법 : <% %>
- 표현식(Expression)
: HTML 문서에 변수를 출력하거나 메소드의 결과 값을 출력할 때 사용한다. 표현식에서는 스크립트릿과 달리 세미콜론을 표기하지 않는다. 왜냐하면 서블릿으로 변환되는 과정에서 자동으로 붙여주기 때문에~!
표현법 : <%= %>
- 선언부(Declaration)
: 스크립트릿이나 표현식에서 사용할 수 있는 변수나 함수(메소드) 작성 시 사용한다. 선언부에서 선언한 변수는 서블릿으로 변환되는 과정에서 멤버 변수의 입장을 취하게 되며 전역 변수의 성격을 가진다. 전역 변수이기 때문에 변수 선언과 동시에 초기화를 하지 않으면 0 또는 null 값으로 자동 초기화 된다. 또한, _jspInit(), _jspDestory()와 같은 생명주기 운영을 위해 메소드를 재정의 할 수 있다.
하지만 선언부에서 선언된 메소드는 자기 자신의 jsp 페이지에서만 사용 할 수있기 때문에 선언부를 활용하여 메소드를 선언하는 일은 거의 없다.
표현법 : <%! %>