JSP 페이지를 작성하려면 다양한 요소들이 필요하다. JSP 페이지에 대한 정보를 지정해야 하고, 웹 브라우저가 전송한 데이터를 읽어오는 기능이 필요하며, JSP 페이지에서 사용할 데이터를 생성하는 실행 코드가 필요하고, 웹 브라우저에 문서 데이터를 전송해주는 기능이 필요하다. 이처럼 HTML 문서를 생성하기 위해서는 다양한 것들이 필요한데, 이를 위해 JSP는 다음과 같은 것을 제공하고 있다.
디렉티브(Directive)
는 JSP 페이지에 대한 설정 정보
를 지정할 때 사용되며, 다음과 같은 구문을 통해서 디렉티브를 선언할 수 있다.
<%@ 디렉티브이름 속성1="값1" 속성2="값2" ... %>
디렉티브는 '<%@'으로 시작하고 그 뒤에 디렉티브 이름이 위치한다. 사용하려는 디렉티브에 따라서 알맞은 속성이 위치하며, '%gt;'로 디렉티브 선언이 끝난다.
<%@ page contentType="text/html; charset=utf-8" %>
여기서 디렉티브 이름은 "page"가 되고, contentType이라는 속성을 사용했으며, contentType 속성의 값은 "text/html; charset=utf-8"이 된다.
JSP가 제공하고 있는 디렉티브는 아래 표와 같다.
JSP가 제공하는 디렉티브
디렉터리 | 설명 |
page | JSP 페이지에 대한 정보를 지정한다. JSP가 생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등 JSP 페이지에서 필요로 하는 정보를 설정한다. |
taglib | JSP 페이지에서 사용할 태그 라이브러리를 지정한다. |
include | JSP 페이지의 특정 영역에 다른 문서를 포함시킨다. |
JSP에서 문서의 내용을 동적으로 생성하기 위해 사용되는 것이 바로 스크립트 요소
이다. 스크립트 요소를 사용하면 사용자가 폼에 입력한 정보를 데이터베이스에 저장할 수 있으며, 데이터베이스로부터 게시글 목록을 읽어와 출력할 수도 있다. 또한, 스크립트를 사용하면 자바가 제공하는 다양한 기능도 사용할 수 있다. JSP를 스크립트 언어라고 부르는 이유가 바로 막강한 스크립트 코드를 제공해주기 때문이다.
JSP의 스크립트 요소는 다음과 같이 세 가지가 있다.
JSP는 웹 어플리케이션 프로그래밍을 하는데 필요한 기능을 제공해주는 기본 객체(implicit object)
를 제공하고 있다. request, response, session, application, page 등 다수의 기본 객체가 존재하는데, 이들은 각각 요청 파라미터 읽어오기, 응답 결과 전송하기, 세션 처리하기, 웹 어플리케이션 정보 읽어오기 등의 기능을 제공하고 있다.
이들 기본 객체를 모든 JSP 페이지에서 사용하는 것은 아니며, request 기본 객체, session 기본 객체 그리고 response 기본 객체를 주로 사용한다.
JSP의 스크립트 요소(스크립트릿과 표현식 그리고 선언부)는 자바 문법을 그대로 사용할 수 있기 때문에, 자바 언어의 특성을 그대로 사용할 수 있다는 장점이 있다. 하지만, 스크립트 요소를 사용하면 JSP 코드가 다소 복잡해진다.
<%
int a = Integer.parseInt(request.getParameter("a"));
int b = Integer.parseInt(request.getParameter("b"));
%>
a * b = <%= a * b%>
위 코드는 두 개의 문자열 값을 정수로 변환한 뒤, 두 숫자를 곱한 값을 응답으로 출력하는 코드이다. 위 코드를 표현 언어(expression language)를 사용하면 다음과 같이 간결하게 작성할 수 있다.
a * b = ${param.a * param.b}
표현 언어는 '${'와 '}' 사이에 정해진 문법을 따르는 식(expression : 값을 생성하는 코드)을 입력한다. JSP는 이 식을 분석해서 알맞은 기능을 실행한다. 위 코드에서 보는 것처럼 JSP 스크립트 코드를 사용하는 것보다 표현 언어를 사용하는 것이 코드를 간결하고 이해하기 좋게 만들어주기 때문에, 특별한 이유가 없는 한 표현 언어를 주로 사용한다.
액션 태그
는 JSP 페이지에서 특별한 기능을 제공한다. 예를 들어, 다음 코드에서 사용한 <jsp:include>가 액션 태그인데, 이 액션 태그는 특정한 페이지의 실행 결과를 현재 위치에 포함시킬 때 사용된다.
<%@ page contentType="text/html; charset=utf-8">
<html>
'''
<jsp:include page="header.jsp" flush="true"/>
'''
</html>
액션 태그는 <jsp:액션태그>의 형태를 띠며 액션 태그 종류에 따라서 서로 다른 속성과 값을 갖는다.
커스텀 태그
는 JSP를 확장시켜주는 기능으로서, 액션 태그와 마찬가지로 태그 형태로 기능을 제공한다. 액션 태그와 차이점이 있다면 커스텀 태그는 개발자가 직접 개발해주어야 한다는 것이다. 일반적으로 JSP 코드에서 중복되는 것을 모듈화하거나 스크립트 코드를 사용할 때 발생하는 소스 코드의 복잡성을 없애기 위해 커스텀 태그를 사용한다.
커스텀 태그 중에 자주 사용되는 것들을 별도로 표준화한 태그 라이브러리가 있는데 이것이 바로 JSTL(JavaServer Pages Standard Tag Library)
이다. JSTL은 if-else 조건문 그리고 for 구문과 같은 반복 처리를 커스텀 태그를 이용해서 구현할 수 있도록 해 준다. 또한, 커스텀 태그는 스크립트 코드보다 이해하기 쉽기 때문에 자바 언어에 익숙하지 않더라도 JSTL을 이용해서 어느 정도 논리적인 처리를 수행할 수 있다.
참고