JSTL 사용하기
2/65
Contents
학습목표
JSTL이란 JSP 페이지를 작성할 때 유용하게 사용할 수 있는 여러 가지 커스텀 액션과 함수가 포함되어 있는 라이브러리이다. 이 라이브러리는 인터넷에서 무상으로 다운로드 받을 수 있는데 이 장에서는 라이브러리를 다운로드 받아서 설치하고 사용하는 방법을 알아보자.
내용
JSTL이란?
JSTL 설치하기
코어 라이브러리 사용하기
포매팅 라이브러리 사용하기
함수 라이브러리 사용하기
3/78
JSTL 이란?
JSP 표준 태그 라이브러리(JSP Standard Tag Library)의 약어
적용 목적 :
간단한 프로그램 로직의 구사(자바의 변수 선언, if 문, for 문 등에 해당하는 로직)
다른 JSP 페이지 호출(
, )
날짜, 시간, 숫자의 포맷
JSP 페이지 하나를 가지고 여러 가지 언어의 웹 페이지 생성
데이터베이스로의 입력, 수정, 삭제, 조회
XML 문서의 처리
문자열을 처리하는 함수 호출
문자열을 처리하는 함수 호출을 제외한 나머지 기능들은 모두 커스텀 액션 형태로 제공된다.
1. JSTL이란?
4/78
JSTL 커스텀 액션 예
커스텀 액션은 자바의 for 문과 비슷한 기능을 한다.
커스텀 액션은 수치 값을 포맷하는 기능을 한다.
JSTL에는 커스텀 액션만 있는 게 아니라 표현식 언어에서 사용할 수 있는 EL 함수도 지원한다.
1. JSTL이란?
안녕하세요, 여러분!
시작 태그와 끝 태그 사이에 있는 코드를
10번 반복해서 출력합니다.
주어진 수치를 소수점 이하 2자리까지 끊어서 출력합니다
${fn:toUpperCase( “Hello ”)}
이 함수는 ‘HELLO’라는 문자열을 리턴합니다
5/78
1. JSTL이란?
라이브러리 기 능 URI 식별자 접두어
코어 일반 프로그래밍 언어에서 제공하는 것과 유사한
변수 선언. 실행 흐름의 제어 기능을 제공하고, 다
른 JSP 페이지로 제어를 이동하는 기능도 제공합
니다.
http://java.sun.com/jsp/jstl/core c
포매팅 숫자, 날짜, 시간을 포매팅하는 기능과 국제화, 다
국어 지원 기능을 제공합니다
http://java.sun.com/jsp/jstl/fmt fmt
데이터베이스 데이터베이스의 데이터를 입력/수정/삭제/조회하
는 기능을 제공합니다.
http://java.sun.com/jsp/jstl/sql sql
XML 처리 XML 문서를 처리할 때 필요한 기능을 제공합니다 http://java.sun.com/jsp/jstl/xml x
함수 문자열을 처리하는 함수를 제공합니다. http://java.sun.com/jsp/jstl/functions fn
[표 9-1] JSTL을 구성하는 작은 라이브러리들
JSTL 구성 라이브러리
6/78
JSTL 사용
JSP 페이지에서 taglib 지시자를 이용해서 JSTL 라이브러리의 URI 식별자와 접두어를 연결해야 한다.
taglib 지시자는 다른 지시자와 마찬가지로 <%@으로 시작해서 %>로 끝난다.
taglib 지시자에는 uri와 prefix라는 두 개의 애트리뷰트를 정의
각각 URI 식별자와 접두어를 값으로 주어야 한다.
1. JSTL이란?
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
접두어
라이브러리를 식별하는 URI
7/78
JSTL 1.1 라이브러리 파일
jstl.jar
standard.jar
2. JSTL 설치하기
① 9장의 예제를 위한
brain09 웹 애플리케이션
디렉터리를 만들고, 그
아래에 WEB-INF/lib
서브디렉터리를 만드세요
[그림 9-1] JSTL을 설치하는 간단한 방법
8/78
2. JSTL 설치하기
② examples 웹 애플리케이션
디렉터리의 WEB-INF/lib
서브디렉터리로 가세요.
③ examples/WEB-INF/lib
디렉터리에 있는 JSTL 파일을
brain09/WEB-INF/lib
디렉터리로 복사하세요
9/78
JSTL 다운로드 받기
URL - http://jakarta.apache.org/
2. JSTL 설치하기
10/78
JSTL 다운로드 받기
왼쪽 메뉴에서 Downloads를 선택한다.
2. JSTL 설치하기
11/78
JSTL 다운로드 받기
앞 페이지 화면에서 Taglibs를 선택한다.
2. JSTL 설치하기
12/78
JSTL 다운로드 받기
앞 페이지 화면에서 Standard 1.1 Taglib를 선택한다.
2. JSTL 설치하기
13/78
JSTL 다운로드 받기
앞 페이지 화면에서 1.1.2.zip 파일을 선택해서 다운로드 받는다.
2. JSTL 설치하기
14/78
톰캣에 JSTL 설치하기
2. JSTL 설치하기
① jakarta-taglibs-standard-1.1.2/lib
디렉터리로 가 보세요
② jstl.jar와 standard.jar 파일이
있을 것입니다
15/78
톰캣에 JSTL 설치하기
brain09 웹 애플리케이션 디렉터리와 WEB-INF/lib 서브디렉터리를 만들고, 다음과 같이 JSTL을 설치한다.
2. JSTL 설치하기
① brain09 웹 애플리케이션
디렉터리를 만들고, 그 아래에
WEB-INF/lib 서브디렉터리를
만드세요
② 압축 파일에서 꺼낸 JSTL 파일을
brain09/WEB-INF/lib 디렉터리에
설치하세요.
16/78
커스텀 액션
속성 변수를 선언하고 초기값을 대입하는 커스텀 액션
자바 프로그램에서 변수를 선언할 때는 기본적으로 변수의 타입과 이름을 기술하고, 선택적으로 초기값을 기술한다.
커스텀 액션을 이용해서 속성 변수를 선언할 때는 변수의 이름과 초기값을 설정한다.
value 애트리뷰트 값 위치에 EL 식을 쓸 수도 있다.
3. 코어 라이브러리 사용하기
int num=100;
변수의 이름
초기값
변수의 타입
변수의 이름
초기값
value 애트리뷰트 값으로 EL 식을 쓸 수도 있습니다
17/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-1] 커스텀 액션의 사용 예
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@taglib prefix= “c ” uri= “http://java.sun.com/jsp/jstl/core ” %>
곱셈 프로그램
${num1}과 ${num2}의 곱은? ${result}
[그림 9-9] 예제 9-1의 실행 결과
18/78
커스텀 액션
액션을 이용하여 선언한 변수는 기본적으로 page 데이터 영역의 속성으로 바인딩된다.
scope 애트리뷰트를 이용하여 바인딩되는 내장객체(생존 범위)를 지정 가능
page, request, session, application 중 한 값을 지정
각각 page, request, session, application 내장 객체에 속성으로 바인딩
3. 코어 라이브러리 사용하기
변수가 저장될 데이터 영역
19/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-2] 커스텀 액션의 사용 예
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
<%@page contentType= “text/html; charset=euc-kr ”%>
상품 정보
상품 정보
상품코드: ${CODE}
상품명: ${NAME}
단가: ${PRICE}원
request 데이터 영역에
데이터를 저장합니다
request 데이터 영역에 있는
데이터 값을 가져다가 출력합니다
호 출
20/78
커스텀 액션
액션으로 선언한 변수는 삭제 시에 명시적으로 삭제하여야 함.
커스텀 액션은 내장 객체에 바인딩된 속성을 삭제
page, request, session, application 내장 객체에 저장되어 있는 num이라는 이름의 애트리뷰트를 모두 찾아서 제거한다.
특정 영역의 속성만 제거하려면 scope 애트리뷰트를 사용하면 된다.
3. 코어 라이브러리 사용하기
변수의 이름
request 데이터 영역에 있는 변수를 제거합니다
21/78
커스텀 액션
커스텀 액션은 자바 프로그램의 if 문과 비슷한 역할을 한다.
자바 프로그램에서 if 문을 작성하는 방법은 다음과 같다.
커스텀 액션에서는 조건식을 괄호 안에 쓰는 것은 아니라, test라는 이름의 애트리뷰트 값으로 지정해야 한다.
3. 코어 라이브러리 사용하기
if (num1 > num2) {
System.out.println( “num1이 더 큽니다. ”);
}
조건식의 결과가 true일 때만
실행되는 명령문
조건식
num2} ”>
num1이 더 큽니다.
조건식의 결과가 true일 때만
출력되는 코드
조건식
22/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-3] 커스텀 액션의 사용 예
<%@page contentType= “text/html; charset=euc-kr”%>
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core” %>
최대값 구하기
최대값:
= 0} ”>
${param.NUM1}
${param.NUM2}
[그림 9-11] 예제 9-3의 실행 결과
URL 뒤에 이런 식으로 입력 데이터 값을 직접 쓰세요
23/78
커스텀 액션
커스텀 액션은 자바 프로그램의 switch 문과 비슷한 역할을 한다.
, 커스텀 액션과 함께 사용되며, 두 커스텀 액션은 각각 switch 문의 case, default 절과 비슷한 역할을 한다.
자바 프로그램의 switch 문의 문법은 다음과 같다.
3. 코어 라이브러리 사용하기
switch (num) {
case 0 :
System.out.println( “처음 뵙겠습니다. ”);
break;
case 1 :
System.out.println( “반갑습니다. ”);
break;
default :
System.out.println( “안녕하세요. ”);
break;
}
첫 번째 조건을 만족할 때
실행되는 명령문
비교의 기준이 되는 변수
두 번째 조건을 만족할 때
실행되는 명령문
아무 조건도 만족하지
않을 때 실행되는 명령문
24/78
커스텀 액션
커스텀 액션의 전체적인 구조는 switch 문과 비슷
조건식을 커스텀 액션의 test 애트리뷰트에 EL 식 형태로 지정
3. 코어 라이브러리 사용하기
처음 뵙겠습니다.
반갑습니다.
안녕하세요.
조건식을 직접
기술합니다.
첫 번째 조건을 만족할 때
출력할 코드
두 번째 조건을 만족할 때
출력할 코드
아무 조건도 만족하지 않을 때
출력할 코드
25/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-4] 커스텀 액션의 사용 예
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@taglib prefix= “c ” uri= “http://java.sun.com/jsp/jstl/core ” %>
인사하기
처음 뵙겠습니다.
반갑습니다.
안녕하세요.
[그림 9-11] 예제 9-3의 실행 결과
26/78
커스텀 액션
커스텀 액션은 자바 프로그램의 for 문에 해당하는 기능을 제공
특정 HTML 코드를 지정된 횟수만큼 반복해서 출력하는 등에 사용
액션을 사용할 때는 begin과 end라는 이름의 애트리뷰트를 쓰고, 거기에 각각 카운터 변수의 시작 값과 끝 값을 지정하면 된다.
3. 코어 라이브러리 사용하기
for (int cnt = 0; cnt < 10; cnt++) {
System.out.println( “야호 ”);
}
카운터의 초기값
반복 종료의 기준값
카운터를 증가시키는 식
반복 실행할 명령문
야호
시작 값
끝값
반복 출력할 명령문
27/78
커스텀 액션
반복 출력할 코드 안에서 카운터 변수의 값을 사용해야 할 경우에는 태그 안에 var라는 애트리뷰트를 쓰고, 그 값으로 카운터 변수의 이름을 지정하면 된다.
카운터 변수의 값은 기본적으로 1씩 증가하지만, 증가 값을 바꾸려면 태그에 step이라는 애트리뷰트를 추가하고 증가치를 지정
3. 코어 라이브러리 사용하기
${cnt}
카운터 변수
${cnt}
증가치
28/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-5] 커스텀 액션의 사용 예 (1)
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
메아리
야~호~
[그림 9-13] 예제 9-5의 실행 결과
29/78
커스텀 액션의 사용 방법
커스텀 액션의 items 애트리뷰트를 이용하면 여러 개의 항목으로 구성된 데이터를 순서대로 출력하는 일도 할 수 있다.
java 스타일 반복문
액션의 items 애트리뷰트를 이용해서 처리할 수 있는 데이터
배열
java.util.Collection 객체
java.util.Iterator 객체
java.util.Enumeration 객체
java.util.Map 객체
콤마(,)로 구분된 항목들을 포함한 문자열
3. 코어 라이브러리 사용하기
${str}
배열의 각 항목을 저장할 변수
배열의 이름
30/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-6] 커스텀 액션의 사용 예 (2)
<%@page contentType= ”text/html; charset=euc-kr ”%>
<%
String arr[] = { “불고기 백반 ”, “오므라이스 ”, “콩국수 ” };
request.setAttribute( “MENU ”, arr);
%>
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
구내 식당
오늘의 점심 메뉴입니다.
request 데이터 영역에 배열을 저장합니다.
호 출
배열 항목을 순서대로 가져다가 출력합니다.
31/78
커스텀 액션
커스텀 액션은 자바의 for 문과 java.util.StringTokenizer 클래스의 기능을 합친 것 같은 기능을 제공한다.
items, delims, var라는 3개의 애트리뷰트를 사용
items에는 토큰을 포함하는 문자열을, delims에는 토큰 분리에 사용할 구획 문자를, var에는 분리된 토큰을 대입할 변수의 이름을 지정
토큰의 구획 문자로 한 종류 이상의 문자를 지정할 수도 있다.
3. 코어 라이브러리 사용하기
${pet}
토큰을 대입할 변수
토큰을 포함한 문자열
구획 문자
${fruit}
토큰을 대입할 변수
토큰을 포함한 문자열
구획 문자
32/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-7] 커스텀 액션의 사용 예
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
동물의 왕국
사자의 생일잔치에 누가 왔을까요?
${animal}
[그림 9-15] 예제 9-7의 실행 결과
33/78
커스텀 액션
커스텀 액션은 자바 프로그래밍 언어의 try문과 비슷
커스텀 액션의 시작 태그와 끝 태그 사이에서 에러가 발생하면 실행의 흐름이 곧바로 액션 다음에 있는 코드로 넘어간다.
커스텀 액션은 자바의 try 블록에 해당하는 일만 하기 때문에 catch 블록에 해당하는 일은 별도로 코딩해야 한다.
3. 코어 라이브러리 사용하기
<% int result = num1 / num2 %>
나눗셈의 결과는? <%= result %>
익셉션 객체를 저장할 변수
에러가 발생할 수 있는 부분
34/78
커스텀 액션
var 애트리뷰트에 지정된 변수(익셉션 객체가 저장되는 변수)는 액션의 범위 밖에서도 EL 식을 통해 사용할 수 있으므로, 이를 이용해서 에러 처리를 하면 된다.
${e.message}라는 EL 식은 익셉션 객체 e에 대해 getMessage 메서드를 호출하는 일을 한다.
3. 코어 라이브러리 사용하기
에러 메시지: ${e.message}
익셉션이 발생했는지 체크하는 조건식
에러 메시지를 출력하는 코드
35/78
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-8] 커스텀 액션의 사용 예
<%@page contentType= “text/html; charset=euc-kr ”%>
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
<%
String str1 = request.getParameter( “NUM1 ”);
String str2 = request.getParameter( “NUM2 ”);
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
%>
나눗셈 프로그램
<% int result = num1 / num2; %>
나눗셈의 결과는? <%= result %>
에러 메시지: ${e.message}
[그림 9-16] 예제 9-8의 실행 결과
36/78
커스텀 액션의 사용 방법
커스텀 액션은 sendRedirect 메서드를 통해 다른 웹 자원을 호출하는 일을 한다.
호출할 웹 자원의 URL은 url 애트리뷰트를 이용해서 지정하면 된다.
3. 코어 라이브러리 사용하기
호출할 웹 자원의 URL
[예제 9-9] 커스텀 액션의 사용 예
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
37/78
커스텀 액션
커스텀 액션은 표준 액션과 비슷
다른 JSP 페이지 뿐만 아니라 다른 종류의 웹 자원도 호출할 수 있다는 점이 차이
호출할 웹 자원의 URL은 url 애트리뷰트를 이용해서 지정
호출할 웹 자원에 데이터를 넘겨주려면 커스텀 액션의 시작 태그와 끝 태그 사이에 커스텀 액션을 쓰면 된다.
3. 코어 라이브러리 사용하기
호출할 웹 자원의 URL
데이터 이름
데이터 값
38/78
커스텀 액션
커스텀 액션은 커스텀 액션과 마찬가지로 변수의 선언에 사용
URL을 쉽게 다룰 수 있는 방법을 제공한다는 점이 차이
의 사용 방법은 과 동일
var 애트리뷰트에 변수 이름을 지정하고, value 애트리뷰트에 변수의 초기값을 지정
커스텀 액션은 세션 유지를 위한 URL 재작성 기법을 지원
3. 코어 라이브러리 사용하기
변수 이름
변수 값
Response.encodeURL(“http://localhost:8080/brain09/Add.jsp”)
39/78
커스텀 액션
의 시작 태그와 끝 태그 사이에 커스텀 액션을 쓰면, URL 뒤에 쿼리 스트링 형태로 덧붙는 데이터를 지정할 수 있다.
커스텀 액션은 URL 인코딩도 자동으로 수행
쿼리 스트링에 사용할 수 없는 예약 문자를 다른 문자로 변경
위의 예제에서 변경된 URL
3. 코어 라이브러리 사용하기
데이터 이름
데이터 값
커스텀 액션
3. 코어 라이브러리 사용하기
[예제 9-10] 커스텀 액션의 사용 예
<%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %>
① [예제 9-10]의 URL을
입력하고 Enter 키를
누르면
② 태그의 url 애트리뷰트
값에 해당하는
웹 페이지가 나타납니다.
41/78
커스텀 액션
커스텀 액션은 데이터를 출력할 때 사용
웹 브라우저에 의해 특수한 문자로 해석되는 <, >, &, ‘, “를 포함하는 데이터를 출력할 때 편리
출력할 데이터는 value 애트리뷰트에 지정
3. 코어 라이브러리 사용하기
은