11 JSTL 사용하기
학습목표 JSTL이란 JSP 페이지를 작성할 때 유용하게 사용할 수 있는 여러 가지 커스 텀 액션과 함수가 포함되어 있는 라이브러리이다. 이 라이브러리는 인터넷 에서 무상으로 다운로드 받을 수 있는데 이 장에서는 라이브러리를 다운로 드 받아서 설치하고 사용하는 방법을 알아보자. 내용 JSTL이란? JSTL 설치하기 코어 라이브러리 사용하기 포매팅 라이브러리 사용하기 함수 라이브러리 사용하기
1. JSTL이란? JSTL 이란? JSP 표준 태그 라이브러리(JSP Standard Tag Library)의 약어 적용 목적 : 간단한 프로그램 로직의 구사(자바의 변수 선언, if 문, for 문 등에 해당하는 로직) 다른 JSP 페이지 호출(<c:redirect>, <c:import>) 날짜, 시간, 숫자의 포맷 JSP 페이지 하나를 가지고 여러 가지 언어의 웹 페이지 생성 데이터베이스로의 입력, 수정, 삭제, 조회 XML 문서의 처리 문자열을 처리하는 함수 호출 문자열을 처리하는 함수 호출을 제외한 나머지 기능들은 모두 커스텀 액션 형 태로 제공된다.
1. JSTL이란? JSTL 커스텀 액션 예 <c:forEach> 커스텀 액션은 자바의 for 문과 비슷한 기능을 한다. <fmt:formatNumber> 커스텀 액션은 수치 값을 포맷하는 기능을 한다. JSTL에는 커스텀 액션만 있는 게 아니라 표현식 언어에서 사용할 수 있는 EL 함수도 지원한다. <c:forEach begin= “1 ” end= “10 ” > <H5>안녕하세요, 여러분!</H5> </c:forEach> 시작 태그와 끝 태그 사이에 있는 코드를 10번 반복해서 출력합니다. <fmt:formatNumber value= “3.14159 ” pattern= “#.00 ” /> 주어진 수치를 소수점 이하 2자리까지 끊어서 출력합니다 ${fn:toUpperCase( “Hello ”)} 이 함수는 ‘HELLO’라는 문자열을 리턴합니다
[표 9-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
1. JSTL이란? JSTL 사용 JSP 페이지에서 taglib 지시자를 이용해서 JSTL 라이브러리의 URI 식별자와 접두어를 연결해야 한다. taglib 지시자는 다른 지시자와 마찬가지로 <%@으로 시작해서 %>로 끝난다. taglib 지시자에는 uri와 prefix라는 두 개의 애트리뷰트를 정의 각각 URI 식별자와 접두어를 값으로 주어야 한다. <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> 접두어 라이브러리를 식별하는 URI
2. JSTL 설치하기 JSTL 1.1 라이브러리 파일 jstl.jar standard.jar ① 9장의 예제를 위한 brain09 웹 애플리케이션 디렉터리를 만들고, 그 아래에 WEB-INF/lib 서브디렉터리를 만드세요 [그림 9-1] JSTL을 설치하는 간단한 방법
2. JSTL 설치하기 ③ examples/WEB-INF/lib 디렉터리에 있는 JSTL 파일을 brain09/WEB-INF/lib 디렉터리로 복사하세요 ② examples 웹 애플리케이션 디렉터리의 WEB-INF/lib 서브디렉터리로 가세요.
2. JSTL 설치하기 JSTL 다운로드 받기 URL - http://jakarta.apache.org/
2. JSTL 설치하기 JSTL 다운로드 받기 왼쪽 메뉴에서 Downloads를 선택한다.
2. JSTL 설치하기 JSTL 다운로드 받기 앞 페이지 화면에서 Taglibs를 선택한다.
2. JSTL 설치하기 JSTL 다운로드 받기 앞 페이지 화면에서 Standard 1.1 Taglib를 선택한다.
2. JSTL 설치하기 JSTL 다운로드 받기 앞 페이지 화면에서 1.1.2.zip 파일을 선택해서 다운로드 받는다.
2. JSTL 설치하기 톰캣에 JSTL 설치하기 ① jakarta-taglibs-standard-1.1.2/lib 디렉터리로 가 보세요 ② jstl.jar와 standard.jar 파일이 있을 것입니다
2. JSTL 설치하기 톰캣에 JSTL 설치하기 brain09 웹 애플리케이션 디렉터리와 WEB-INF/lib 서브디렉터리를 만들고, 다음과 같이 JSTL을 설치한다. ② 압축 파일에서 꺼낸 JSTL 파일을 brain09/WEB-INF/lib 디렉터리에 설치하세요. ① brain09 웹 애플리케이션 디렉터리를 만들고, 그 아래에 WEB-INF/lib 서브디렉터리를 만드세요
3. 코어 라이브러리 사용하기 <c:set> 커스텀 액션 속성 변수를 선언하고 초기값을 대입하는 커스텀 액션 자바 프로그램에서 변수를 선언할 때는 기본적으로 변수의 타입과 이름을 기 술하고, 선택적으로 초기값을 기술한다. <c:set> 커스텀 액션을 이용해서 속성 변수를 선언할 때는 변수의 이름과 초기 값을 설정한다. value 애트리뷰트 값 위치에 EL 식을 쓸 수도 있다. int num=100; 변수의 타입 변수의 이름 초기값 <c:set var= “num ” value= “100 ” /> 변수의 이름 초기값 <c:set var= “sum ” value= “${num1+num2} ” /> value 애트리뷰트 값으로 EL 식을 쓸 수도 있습니다
3. 코어 라이브러리 사용하기 <c:set> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c ” uri= “http://java.sun.com/jsp/jstl/core ” %> <c:set var= “num1 ” value= “7 ” /> <c:set var= “num2 ” value= “9 ” /> <c:set var= “result ” value= “${num1*num2} ” /> <HTML> <HEAD><TITLE>곱셈 프로그램</TITLE></HEAD> <BODY> ${num1}과 ${num2}의 곱은? ${result} </BODY> </HTML> [그림 9-9] 예제 9-1의 실행 결과
<c:set var= “PRICE ” value= “15000 ” scope= “request ” /> 3. 코어 라이브러리 사용하기 <c:set> 커스텀 액션 <c:set> 액션을 이용하여 선언한 변수는 기본적으로 page 데이터 영역의 속성 으로 바인딩된다. scope 애트리뷰트를 이용하여 바인딩되는 내장객체(생존 범위)를 지정 가능 page, request, session, application 중 한 값을 지정 각각 page, request, session, application 내장 객체에 속성으로 바인딩 <c:set var= “PRICE ” value= “15000 ” scope= “request ” /> 변수가 저장될 데이터 영역
3. 코어 라이브러리 사용하기 <c:set> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <c:set var= “CODE” value= “80012 ” scope= “request ” /> <c:set var= “NAME” value= “온습도계 ” scope= “request ” /> <c:set var= “PRICE” value= “15000 ” scope= “request ” /> <jsp:forward page= “ProductInfoView.jsp ” /> request 데이터 영역에 데이터를 저장합니다 호 출 <%@page contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>상품 정보</TITLE></HEAD> <BODY> <H3>상품 정보</H3> 상품코드: ${CODE} <BR> 상품명: ${NAME} <BR> 단가: ${PRICE}원 <BR> </BODY> </HTML> request 데이터 영역에 있는 데이터 값을 가져다가 출력합니다
3. 코어 라이브러리 사용하기 <c:remove> 커스텀 액션 <c:set> 액션으로 선언한 변수는 삭제 시에 명시적으로 삭제하여야 함. <c:remove> 커스텀 액션은 내장 객체에 바인딩된 속성을 삭제 page, request, session, application 내장 객체에 저장되어 있는 num이라는 이름의 애트 리뷰트를 모두 찾아서 제거한다. 특정 영역의 속성만 제거하려면 scope 애트리뷰트를 사용하면 된다. <c:remove var= “num ” /> 변수의 이름 <c:remove var= “code ” scope= “request ” /> request 데이터 영역에 있는 변수를 제거합니다
3. 코어 라이브러리 사용하기 <c:if> 커스텀 액션 <c:if> 커스텀 액션은 자바 프로그램의 if 문과 비슷한 역할을 한다. 자바 프로그램에서 if 문을 작성하는 방법은 다음과 같다. <c:if> 커스텀 액션에서는 조건식을 괄호 안에 쓰는 것은 아니라, test라는 이름 의 애트리뷰트 값으로 지정해야 한다. 조건식 if (num1 > num2) { System.out.println( “num1이 더 큽니다. ”); } 조건식의 결과가 true일 때만 실행되는 명령문 조건식 <c:if test= “${num1 > num2} ”> num1이 더 큽니다. </c:if> 조건식의 결과가 true일 때만 출력되는 코드
3. 코어 라이브러리 사용하기 <c:if> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr”%> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core” %> <HTML> <HEAD><TITLE>최대값 구하기</TITLE></HEAD> <BODY> 최대값: <c:if test= “${param.NUM1 - param.NUM2 >= 0} ”> ${param.NUM1} </c:if> <c:if test= “${param.NUM1 - param.NUM2 < 0} ”> ${param.NUM2} </BODY> </HTML> URL 뒤에 이런 식으로 입력 데이터 값을 직접 쓰세요 [그림 9-11] 예제 9-3의 실행 결과
3. 코어 라이브러리 사용하기 <c:choose> 커스텀 액션 <c:choose> 커스텀 액션은 자바 프로그램의 switch 문과 비슷한 역할을 한다. <c:when>, <c:otherwise> 커스텀 액션과 함께 사용되며, 두 커스텀 액션은 각 각 switch 문의 case, default 절과 비슷한 역할을 한다. 자바 프로그램의 switch 문의 문법은 다음과 같다. 비교의 기준이 되는 변수 switch (num) { case 0 : System.out.println( “처음 뵙겠습니다. ”); break; case 1 : System.out.println( “반갑습니다. ”); default : System.out.println( “안녕하세요. ”); } 첫 번째 조건을 만족할 때 실행되는 명령문 두 번째 조건을 만족할 때 실행되는 명령문 아무 조건도 만족하지 않을 때 실행되는 명령문
3. 코어 라이브러리 사용하기 <c:choose> 커스텀 액션 <c:choose> 커스텀 액션의 전체적인 구조는 switch 문과 비슷 조건식을 <c:when> 커스텀 액션의 test 애트리뷰트에 EL 식 형태로 지정 <c:choose> <c:when test= “${num == 0} ”> 처음 뵙겠습니다. <BR> </c:when> <c:when test= “${num == 1} ”> 반갑습니다. <BR> <c:otherwise> 안녕하세요. <BR> </c:otherwise> </c:choose> 첫 번째 조건을 만족할 때 출력할 코드 조건식을 직접 기술합니다. 두 번째 조건을 만족할 때 출력할 코드 아무 조건도 만족하지 않을 때 출력할 코드
3. 코어 라이브러리 사용하기 <c:choose> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c ” uri= “http://java.sun.com/jsp/jstl/core ” %> <HTML> <HEAD><TITLE>인사하기</TITLE></HEAD> <BODY> <c:choose> <c:when test= “${param.NUM == 0} ”> 처음 뵙겠습니다. <BR> </c:when> <c:when test= “${param.NUM == 1} ”> 반갑습니다. <BR> <c:otherwise> 안녕하세요. <BR> </c:otherwise> </c:choose> </BODY> </HTML> [그림 9-11] 예제 9-3의 실행 결과
3. 코어 라이브러리 사용하기 <c:forEach> 커스텀 액션 <c:forEach> 커스텀 액션은 자바 프로그램의 for 문에 해당하는 기능을 제공 특정 HTML 코드를 지정된 횟수만큼 반복해서 출력하는 등에 사용 <c:forEach> 액션을 사용할 때는 begin과 end라는 이름의 애트리뷰트를 쓰고, 거기에 각각 카운터 변수의 시작 값과 끝 값을 지정하면 된다. 카운터의 초기값 반복 종료의 기준값 카운터를 증가시키는 식 for (int cnt = 0; cnt < 10; cnt++) { System.out.println( “야호 ”); } 반복 실행할 명령문 시작 값 끝값 <c:forEach begin= “1 ” end= ”10 ”> 야호<BR> </c:forEach> 반복 출력할 명령문
3. 코어 라이브러리 사용하기 <c:forEach> 커스텀 액션 반복 출력할 코드 안에서 카운터 변수의 값을 사용해야 할 경우에는 <c:forEach> 태그 안에 var라는 애트리뷰트를 쓰고, 그 값으로 카운터 변수의 이름을 지정하면 된다. 카운터 변수의 값은 기본적으로 1씩 증가하지만, 증가 값을 바꾸려면 <c:forEach> 태그에 step이라는 애트리뷰트를 추가하고 증가치를 지정 카운터 변수 <c:forEach var= “cnt ” begin= “1 ” end= “10 ”> ${cnt} <BR> </c:forEach> 증가치 <c:forEach var= “cnt ” begin= “1 ” end= “10 ” step= “2 ”> ${cnt} <BR> </c:forEach>
3. 코어 라이브러리 사용하기 <c:forEach> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <HTML> <HEAD><TITLE>메아리</TITLE></HEAD> <BODY> <c:forEach var= “cnt ” begin= “1 ” end= “5 ”> <FONT size=${cnt} > 야~호~ </FONT> <BR> </c:forEach> </BODY> </HTML> [그림 9-13] 예제 9-5의 실행 결과
3. 코어 라이브러리 사용하기 <c:forEach> 커스텀 액션의 사용 방법 <c:forEach> 커스텀 액션의 items 애트리뷰트를 이용하면 여러 개의 항목으로 구성된 데이터를 순서대로 출력하는 일도 할 수 있다. java 스타일 반복문 <c:forEach> 액션의 items 애트리뷰트를 이용해서 처리할 수 있는 데이터 배열 java.util.Collection 객체 java.util.Iterator 객체 java.util.Enumeration 객체 java.util.Map 객체 콤마(,)로 구분된 항목들을 포함한 문자열 배열의 각 항목을 저장할 변수 배열의 이름 <c:forEach var= “str ” items= “${arr} ”> ${str} <BR> </c:forEach>
3. 코어 라이브러리 사용하기 <c:forEach> 커스텀 액션 <%@page contentType= ”text/html; charset=euc-kr ”%> <% String arr[] = { “불고기 백반 ”, “오므라이스 ”, “콩국수 ” }; request.setAttribute( “MENU ”, arr); %> <jsp:forward page= “LunchMenuView.jsp ” /> request 데이터 영역에 배열을 저장합니다. 호 출 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <HTML> <HEAD><TITLE>구내 식당</TITLE></HEAD> <BODY> <H3>오늘의 점심 메뉴입니다.</H3> <UL> <c:forEach var= “dish ” items= “${MENU} ”> <LI>${dish}</LI> </c:forEach> </UL> </BODY> </HTML> 배열 항목을 순서대로 가져다가 출력합니다.
3. 코어 라이브러리 사용하기 <c:forTokens> 커스텀 액션 <c:forTokens> 커스텀 액션은 자바의 for 문과 java.util.StringTokenizer 클래스 의 기능을 합친 것 같은 기능을 제공한다. items, delims, var라는 3개의 애트리뷰트를 사용 items에는 토큰을 포함하는 문자열을, delims에는 토큰 분리에 사용할 구획 문자를, var에는 분리된 토큰을 대입할 변수의 이름을 지정 토큰의 구획 문자로 한 종류 이상의 문자를 지정할 수도 있다. 토큰을 대입할 변수 토큰을 포함한 문자열 구획 문자 <c:forTokens var= “pet ” items= “햄스터 이구아나 소라게” delims= “ ” > ${pet} <BR> </c:forTokens> 토큰을 대입할 변수 토큰을 포함한 문자열 구획 문자 <c:forTokens var= “fruit ” items= “딸기*키위/체리-참외” delims= “*/-” > ${fruit} <BR> </c:forTokens>
3. 코어 라이브러리 사용하기 <c:forTokens> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <HTML> <HEAD><TITLE>동물의 왕국</TITLE></HEAD> <BODY> 사자의 생일잔치에 누가 왔을까요? <BR><BR> <c:set var= “guests ” value= “토끼^^거북이~사슴 ” /> <c:forTokens var= “animal” items= “${guests}” delims= “^~ ” > ${animal} <BR> </c:forTokens> </BODY> </HTML> [그림 9-15] 예제 9-7의 실행 결과
3. 코어 라이브러리 사용하기 <c:catch> 커스텀 액션 <c:catch> 커스텀 액션은 자바 프로그래밍 언어의 try문과 비슷 <c:catch> 커스텀 액션의 시작 태그와 끝 태그 사이에서 에러가 발생하면 실행 의 흐름이 곧바로 <c:catch> 액션 다음에 있는 코드로 넘어간다. <c:catch> 커스텀 액션은 자바의 try 블록에 해당하는 일만 하기 때문에 catch 블록에 해당하는 일은 별도로 코딩해야 한다. 익셉션 객체를 저장할 변수 <c:catch var= “e ”> <% int result = num1 / num2 %> 나눗셈의 결과는? <%= result %> </c:catch> 에러가 발생할 수 있는 부분
3. 코어 라이브러리 사용하기 <c:catch> 커스텀 액션 var 애트리뷰트에 지정된 변수(익셉션 객체가 저장되는 변수)는 <c:catch> 액 션의 범위 밖에서도 EL 식을 통해 사용할 수 있으므로, 이를 이용해서 에러 처 리를 하면 된다. ${e.message}라는 EL 식은 익셉션 객체 e에 대해 getMessage 메서드를 호출하는 일을 한다. 익셉션이 발생했는지 체크하는 조건식 <c:if test= “${e != null} ” > 에러 메시지: ${e.message} </c:if> 에러 메시지를 출력하는 코드
3. 코어 라이브러리 사용하기 <c:catch> 커스텀 액션 <%@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); %> <HTML> <HEAD><TITLE>나눗셈 프로그램</TITLE></HEAD> <BODY> <c:catch var= “e ”> <% int result = num1 / num2; %> 나눗셈의 결과는? <%= result %> </c:catch> <c:if test= “${e != null} ” > 에러 메시지: ${e.message} </c:if> </BODY> </HTML> [그림 9-16] 예제 9-8의 실행 결과
<c:redirect url= “http://www.hanb.co.kr ” /> 3. 코어 라이브러리 사용하기 <c:redirect> 커스텀 액션의 사용 방법 <c:redirect> 커스텀 액션은 sendRedirect 메서드를 통해 다른 웹 자원을 호출 하는 일을 한다. 호출할 웹 자원의 URL은 url 애트리뷰트를 이용해서 지정하면 된다. <c:redirect url= “http://www.hanb.co.kr ” /> 호출할 웹 자원의 URL [예제 9-9] <c:redirect> 커스텀 액션의 사용 예 <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <c:redirect url= “Multiply.jsp ” > <c:param name= “NUM1 ” value= “5 ” /> <c:param name= “NUM2 ” value= “25 ” /> </c:redirect>
<c:import url= “http://www.hanb.co.kr/binfo/BrainSeries.jsp ” /> 3. 코어 라이브러리 사용하기 <c:import> 커스텀 액션 <c:import> 커스텀 액션은 <jsp:include> 표준 액션과 비슷 다른 JSP 페이지 뿐만 아니라 다른 종류의 웹 자원도 호출할 수 있다는 점이 차이 호출할 웹 자원의 URL은 url 애트리뷰트를 이용해서 지정 호출할 웹 자원에 데이터를 넘겨주려면 <c:import> 커스텀 액션의 시작 태그 와 끝 태그 사이에 <c:param> 커스텀 액션을 쓰면 된다. <c:import url= “http://www.hanb.co.kr/binfo/BrainSeries.jsp ” /> 호출할 웹 자원의 URL <c:import url= “http://www.hanb.co.kr/AdScrap.jsp ” > <c:param name= “product ” value= “TV ” /> <c:param name= “ad_index ” value= “007 ” /> </c:import> 데이터 이름 데이터 값
<c:url value= “http://localhost:8080/brain09/Add.jsp ” > 3. 코어 라이브러리 사용하기 <c:url> 커스텀 액션 <c:url> 커스텀 액션은 <c:set> 커스텀 액션과 마찬가지로 변수의 선언에 사용 URL을 쉽게 다룰 수 있는 방법을 제공한다는 점이 차이 <c:url>의 사용 방법은 <c:set>과 동일 var 애트리뷰트에 변수 이름을 지정하고, value 애트리뷰트에 변수의 초기값을 지정 <c:url> 커스텀 액션은 세션 유지를 위한 URL 재작성 기법을 지원 <c:url var= “myUrl ” value= “http://localhost:8080/brain09/Add.jsp ” > 변수 이름 변수 값 Response.encodeURL(“http://localhost:8080/brain09/Add.jsp”) <c:url value= “http://localhost:8080/brain09/Add.jsp ” >
3. 코어 라이브러리 사용하기 <c:url> 커스텀 액션 <c:url>의 시작 태그와 끝 태그 사이에 <c:param> 커스텀 액션을 쓰면, URL 뒤에 쿼리 스트링 형태로 덧붙는 데이터를 지정할 수 있다. <c:param> 커스텀 액션은 URL 인코딩도 자동으로 수행 쿼리 스트링에 사용할 수 없는 예약 문자를 다른 문자로 변경 위의 예제에서 변경된 URL <c:url var= “myUrl ” value= “http://localhost:8080/brain09/Add.jsp ” > <c:param name= “NUM1 ” value= “999 ” /> <c:param name= “NUM2 ” value= “1 ” /> <c:param name= “NAME ” value= “Hidden Cursor ” /> </c:url> 데이터 이름 데이터 값 <http://localhost:8080/brain09/Add.jsp ?jsession=123456&NUM1=999&NUM2=1&NAME=Hidden+Sursor
3. 코어 라이브러리 사용하기 <c:url> 커스텀 액션 <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <c:url var= “next ” value= “Divide.jsp ” > <c:param name= “NUM1 ” value= “100 ” /> <c:param name= “NUM2 ” value= “25 ” /> </c:url> <c:redirect url= “${next} ” /> ① [예제 9-10]의 URL을 입력하고 Enter 키를 누르면 ② <c:redirect> 태그의 url 애트리뷰트 값에 해당하는 웹 페이지가 나타납니다.
<c:out value= “<INPUT>은 <FORM>의 서브엘리먼트입니다. ” /> 3. 코어 라이브러리 사용하기 <c:out> 커스텀 액션 <c:out> 커스텀 액션은 데이터를 출력할 때 사용 웹 브라우저에 의해 특수한 문자로 해석되는 <, >, &, ‘, “를 포함하는 데이터를 출력할 때 편리 출력할 데이터는 value 애트리뷰트에 지정 <c:out value= “<INPUT>은 <FORM>의 서브엘리먼트입니다. ” /> 이 두 태그는 HTML 태그로 해석되지 않고, 웹 브라우저 상에 그대로 나타납니다 [예제 9-11] <c:out> 커스텀 액션의 사용 예 (1) <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <HTML> <HEAD><TITLE>HTML 문법 설명</TITLE></HEAD> <BODY> <H3>FONT 태그에 대하여</H3> <c:out value= “<FONT size=7>커다란 글씨</FONT>는 다음과 같은 출력을 합니다. ” /> <BR><BR> <c:out value= “<FONT size=7>커다란 글씨</FONT> ” escapeXml= “false ” /> </BODY> </HTML>
<c:out value= “${str} ” default= “No Data ” /> 3. 코어 라이브러리 사용하기 <c:out> 커스텀 액션 default 애트리뷰트를 이용하면 출력할 데이터의 디폴트 값을 지정할 수 있다. EL 식의 결과를 출력할 때 유용하다. <c:out value= “${str} ” default= “No Data ” /> 이 값이 없으면 이 값을 대신 출력합니다 [예제 9-12] <c:out> 커스텀 액션의 사용 예 (2) <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “c ” uri= “http://java.sun.com/jsp/jstl/core ” %> <HTML> <HEAD><TITLE>간단한 인사</TITLE></HEAD> <BODY> 안녕하세요, <c:out value= “${param.ID} ” default= “guest ” />님 </BODY> </HTML>
<fmt:formatDate value= “${date} ” /> 4. 포매팅 라이브러리 사용하기 <fmt:formatDate> 커스텀 액션 날짜와 시각 데이터를 포맷하는 커스텀 액션 출력할 날짜와 시각을 java.util.Date 클래스 타입의 객체로 넘겨줘야 하므로 먼 저 이 클래스의 객체를 만들어야 한다. <fmt:formatDate> 커스텀 액션의 value 애트리뷰트에 Date 객체를 지정하면 그 객체가 포함하고 있는 날짜가 YYYY. MM. DD 포맷으로 출력된다. Date date = new Date(); 현재의 날짜와 시각을 포함한 Date 객체를 생성합니다. <fmt:formatDate value= “${date} ” /> Date 객체
4. 포매팅 라이브러리 사용하기 <fmt:formatDate> 커스텀 액션 type 애트리뷰트에 date라는 값을 지정하면 날짜가 출력되고, both라는 값을 넘 겨주면 날짜와 시각이 모두 출력된다. 디폴트 값 : date <fmt:formatDate value= “${date} ” type= “time ” /> 시각을 출력하라고 지시하는 애트리뷰트 값 <fmt:formatDate value= “${date} ” type= “both ” /> 날짜와 시각을 모두 출력하라고 지시하는 애트리뷰트 값
4. 포매팅 라이브러리 사용하기 <fmt:formatDate> 커스텀 액션 java.util.Date 클래스를 사용하기 위해 필요합니다 [예제 9-13] <fmt:formatDate> 커스텀 액션의 사용 예 (1) <%@page contentType= “text/html; charset=euc-kr ”%> <%@page import= “java.util.* ”%> <%@taglib prefix= “c ” uri= “http://java.sun.com/jsp/jstl/core ” %> <%@taglib prefix= “fmt ” uri= “http://java.sun.com/jsp/jstl/fmt ” %> <c:set var= “date ” value= “<%= new Date() %> ” /> <HTML> <HEAD><TITLE>현재의 시각</TITLE></HEAD> <BODY> [오늘의 날짜] <fmt:formatDate value= “${date} ” /> <BR> [현재의 시각] <fmt:formatDate value= “${date} ” type= ”time ” /> </BODY> </HTML> <fmt:formatDate> 액션에서 Date 객체를 사용하기 위해서는 <c:set> 액션으로 선언한 변수에 저장해야 합니다. 날짜와 시각을 출력합니다. [그림 9-21] 예제 9-13의 실행 결과
4. 포매팅 라이브러리 사용하기 <fmt:formatDate> 커스텀 액션 dateStyle 애트리뷰트 full, long, medium, short 중 한 값을 넘겨주면 날짜를 다 른 포맷으로 출력할 수 있다. timeStyle 애트리뷰트에 full, long, medium, short 중 한 값을 넘겨주면 시각도 다른 포맷으로 출력할 수 있다. type 애트리뷰트에 both 값을 지정해서 날짜와 시각을 한꺼번에 출력할 때는 dateStyle과 timeStyle 애트리뷰트를 함께 쓸 수 있다. <fmt:formatDate type= “date” value= “${date}” dateStylet= “long” /> 날짜를 ‘2009년 5월 5일 (화)’ 포맷으로 출력하도록 지시합니다 <fmt:formatDate type= “time” value= “${date}” timeStyle= “full” /> 시각을 ‘오후 1시 31분 42초 KST’ 포맷으로 출력하도록 지시합니다 <fmt:formatDate type= “both” value= “${date}” dateStyle= “long” timeStyle= “short” /> 날짜를 ‘2009년 5월 5일 (화)’ 포맷으로, 시각을 ‘오후 2:50’ 포맷으로 출력하도록 지시합니다.
4. 포매팅 라이브러리 사용하기 <fmt:formatDate> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr” %> <%@page import= “java.util.*” %> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core” %> <%@taglib prefix= “fmt” uri= “http://java.sun.com/jsp/jstl/fmt” %> <c:set var= “date” value= “<%= new Date() %>” /> <HTML> <HEAD><TITLE>현재의 시각</TITLE></HEAD> <BODY> [S] <fmt:formatDate value= “${date}” type= “both” dateStyle= “short” timeStyle= “short” /> <BR> [M] <fmt:formatDate value= “${date}” type= “both” dateStyle= “medium” timeStyle= “medium” /> <BR> [L] <fmt:formatDate value= “${date}” type= “both” dateStyle= “long” timeStyle= “long” /> <BR> [F] <fmt:formatDate value= “${date}” type= “both” dateStyle= “full” timeStyle= “full” /> </BODY> </HTML>
4. 포매팅 라이브러리 사용하기 <fmt:formatDate> 커스텀 액션 시각의 포맷도 pattern 애트리뷰트를 이용해서 지정할 수 있다. <fmt:formatDate value= “${date}” type= “time” pattern= “(a) hh:mm:ss ” /> 시각을 ‘(오후) 5:52:03’ 포맷으로 출력하도록 지시합니다 [예제 9-15] <fmt:formatDate> 커스텀 액션의 사용 예 (3) <%@page contentType= “text/html; charset=euc-kr” %> <%@page import= “java.util.*” %> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core” %> <%@taglib prefix= “fmt” uri= “http://java.sun.com/jsp/jstl/fmt” %> <c:set var= “date” value= “<%= new Date() %>” /> <HTML> <HEAD><TITLE>현재의 시각</TITLE></HEAD> <BODY> [오늘의 날짜] <fmt:formatDate value= “${date}” type= “date” pattern= “yyyy/MM/dd (E)” /> <BR> [현재의 시각] <fmt:formatDate value= “${date}” type= “time” pattern= “(a) hh:mm:ss” /> </BODY> </HTML>
4. 포매팅 라이브러리 사용하기 <fmt:formatNumber> 커스텀 액션 출력할 수치 값은 <fmt:formatNumber>의 vaule 애트리뷰트에 지정 세 자리마다 쉼표를 찍은 포맷으로 출력하려면 groupingUsed라는 애트리뷰트 를 추가하고, 그 값으로 true를 지정 pattern 애트리뷰트를 사용하면 소수점 아래의 숫자를 원하는 만큼 끊거나 늘 려서 표시할 수 있다. <fmt:formatNumber value= “10000 ” /> 출력할 수치 데이터 <fmt:formatNumber value= “1234500” groupingUsed= “true” /> 주어진 값을 ‘1,234,500’ 포맷으로 출력하도록 지시합니다 <fmt:formatNumber value= “3.14158 ” pattern= “#.## ” /> 주어진 값을 소수점 아래 2자리까지 끊어서 출력하도록 지시합니다.
<fmt:formatNumber value= “10.5 ” pattern= “#.00 ” /> 4. 포매팅 라이브러리 사용하기 <fmt:formatNumber> 커스텀 액션 pattern 애트리뷰트의 값에서 0이라고 쓴 위치는 표시할 유효숫자가 없으면 0 으로 채워진다. <fmt:formatNumber value= “10.5 ” pattern= “#.00 ” /> 주어진 값을 소수점 아래 2자리까지 끊어서 출력하도록 지시합니다 [예제 9-16] <fmt:formatNumber> 커스텀 액션의 사용 예 (1) <%@page contentType= “text/html; charset=euc-kr” %> <%@taglib prefix= “fmt ” uri= “http://java.sun.com/jsp/jstl/fmt” %> <HTML> <HEAD><TITLE>숫자 포맷</TITLE></HEAD> <BODY> 첫번째 수: <fmt:formatNumber value= “1234500” groupingUsed= “true” /> <BR> 두번째 수: <fmt:formatNumber value= “3.14158” pattern= “#.##” /> <BR> 세번째 수: <fmt:formatNumber value= “10.5 ” pattern= “#.00” /> </BODY> </HTML>
4. 포매팅 라이브러리 사용하기 <fmt:formatNumber> 커스텀 액션 type 애트리뷰트에 percent라는 값을 지정하면 주어진 수치를 퍼센트 단위로 표시 type 애트리뷰트에 currency라는 값을 지정하면 주어진 수치가 금액에 적합한 포맷으로 변환하여 출력 화폐 단위를 표시하기 위해서는 currencySymbol이라는 애트리뷰트를 이용 <fmt:formatNumber value= “0.5” type= “percent” /> 주어진 수치를 퍼센트 단위로 포맷하여 출력하도록 지시합니다 <fmt:formatNumber value= “2500000” type= “currency” /> 주어진 수치를 금액으로 표시하여 출력하도록 지시합니다 <fmt:formatNumber value= “2500000 ” type= “currency ” currencySymbol= “₩” /> 금액 앞에 붙는 화폐 단위 표시
4. 포매팅 라이브러리 사용하기 <fmt:formatNumber> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr”%> <%@taglib prefix= “fmt” uri= “http://java.sun.com/jsp/jstl/fmt” %> <HTML> <HEAD><TITLE>숫자 포맷</TITLE></HEAD> <BODY> 금액: <fmt:formatNumber value= “1000000 ” type= “currency” currencySymbol= “₩” /> <BR> 퍼센트: <fmt:formatNumber value= “0.99” type= “percent” /> </BODY> </HTML> [그림 9-25] 예제 9-17의 실행 결과
4. 포매팅 라이브러리 사용하기 <fmt:setLocale> 커스텀 액션 출력할 데이터의 포맷을 특정 지역에 맞게 설정하고자 할 때 사용 특정 지역을 설정하기 위해서는 value 애트리뷰트에 언어 코드 또는 국가코드_ 언어코드를 지정 위의 액션이 실행되고 나면 날짜와 시각이 영어권에 맞게 포맷되고, <fmt:formatNumber> 액션을 이용해서 출력되는 모든 금액 앞에는 달러를 의미하는 $기호가 자동으로 붙어서 표시된다. <fmt:setLocale value= “en” /> 언어 코드 <fmt:setLocale value= “us_en” /> 국가 코드 및 언어 코드
4. 포매팅 라이브러리 사용하기 <fmt:setLocale> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr” %> <%@page import= “java.util.*” %> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core” %> <%@taglib prefix= “fmt” uri= “http://java.sun.com/jsp/jstl/fmt” %> <c:set var= “date” value= “<%= new Date() %>” /> <HTML> <HEAD><TITLE>나라마다 다른 포맷</TITLE></HEAD> <BODY> <H3>우리나라의 포맷</H3> <fmt:setLocale value=“ko_kr” /> 금액: <fmt:formatNumber value=“1000000” type=“currency” /> <BR> 일시: <fmt:formatDate value=“${date}” type=“both” dateStyle=“full” timeStyle=“full” /> <BR> <H3>미국의 포맷</H3> <fmt:setLocale value=“en_us” /> <H3>일본의 포맷</H3> <fmt:setLocale value=“ja_jp” /> </BODY> </HTML>
4. 포매팅 라이브러리 사용하기 <fmt:timeZone> 커스텀 액션 시간대마다 다른 날짜와 시각을 자동으로 계산해서 표시 시작 태그의 value 애트리뷰트에 특정 시간대에 해당하는 지역 이름을 지정하 면, 이 액션의 시작 태그와 끝 태그 사이에서 출력되는 날짜와 시각은 그 시간 대에 맞게 표시된다. <fmt:timeZone value=“America/New_York ” > 날짜: <fmt:formatDate value= “${date}” type=“date” /> 시각: <fmt:formatDate value= “${date}” type=“time” /> </fmt:timeZone>
4. 포매팅 라이브러리 사용하기 <fmt:timeZone> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr” %> <%@page import= “java.util.*” %> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core” %> <%@taglib prefix= “fmt” uri= “http://java.sun.com/jsp/jstl/fmt” %> <c:set var= “date” value= “<%= new Date() %>” /> <HTML> <HEAD><TITLE>세계시 프로그램</TITLE></HEAD> <BODY> 서울: <fmt:formatDate value= “${date}” type= “both” /> <BR> <fmt:timeZone value= “Asia/Hong_Kong” > 홍콩: <fmt:formatDate value= “${date}” type= “both” /> <BR> </fmt:timeZone> <fmt:timeZone value= “Europe/London” > 런던: <fmt:formatDate value= “${date}” type= “both” /> <BR> <fmt:timeZone value= “America/New_York” > 뉴욕: <fmt:formatDate value= “${date}” type= “both” /> <BR> </BODY> </HTML>
<fmt:setTimeZone value= “Europe/London ” /> 4. 포매팅 라이브러리 사용하기 <fmt:setTimeZone> 커스텀 액션 <fmt:timeZone>처럼 시간대를 설정하는 기능 수행 시작 태그와 끝 태그 사이에만 영향을 미치는 것이 아니라, 이 액션 다음의 모 든 코드에 영향을 미친다. <fmt:setTimeZone value= “Europe/London ” /> 시간대의 기준이 되는 지역 이름 [예제 9-20] <fmt:setTimeZone> 커스텀 액션의 사용 예 <%@page contentType= “text/html; charset=euc-kr ” %> <%@page import= “java.util.* ”%> <%@taglib prefix= “c ” uri= “http://java.sun.com/jsp/jstl/core ” %> <%@taglib prefix= “fmt ” uri= “http://java.sun.com/jsp/jstl/fmt ” %> <c:set var= “date ” value= “<%= new Date() %> ” /> <HTML> <HEAD><TITLE>세계시 프로그램</TITLE></HEAD> <BODY> 서울: <fmt:formatDate value= “${date}” type= “both” /> <BR> <fmt:setTimeZone value= “Asia/Hong_Kong” /> 홍콩: <fmt:formatDate value= “${date}” type= “both” /> <BR> <fmt:setTimeZone value= “Europe/London” /> 런던: <fmt:formatDate value= “${date}” type= “both” /> <BR> <fmt:setTimeZone value= “America/New_York” /> 뉴욕: <fmt:formatDate value= “${date}” type= “both” /> <BR> </BODY> </HTML>
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 <fmt:setBundle>, <fmt:bundle>, <fmt:message> 커스텀 액션을 사용하면 하나 의 JSP 페이지만 가지고 서로 다른 언어로 기술된 두 개 이상의 웹 페이지를 생성할 수 있다. 우선 웹 페이지마다 서로 다른 언어로 기술되어야 할 부분을 추출해서 프로퍼 티 파일(property file)로 만들어 놓아야 한다. 프로퍼티 파일은 “대표명_ISO언어코드.properties”라는 이름으로 만들어서 “WB-INF/classes” 디렉터리에 저장해야 한다. < 한글 데이터가 저장된 프로퍼티 파일 > < 영문 데이터가 저장된 프로퍼티 파일 > TITLE=회사 소개 GREETING=이 사이트를 방문해주셔서 감사합니다. BODY=당사는 소프트웨어 개발을 주업무로 하는 회사입니다. COMPANY_NAME=(주) 듀크 소프트웨어 TITLE=About Us GREETING=Thank you for visiting this site. BODY=We are a dedicated software development company. COMPANY_NAME=Duke Software Inc.
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 영문 프로퍼티 파일은 일반 텍스트 에디터를 이용해서 만들어 저장하면 된다. 2) 영문 프로퍼티 파일을 만들어서 저장하십시오. 1) brain09 웹 애플리케이션의 WEB-INF/ classes 서브디렉터리로 가십시오. [그림 9-30] 영문 프로퍼티 파일을 만드는 방법
[그림 9-31] 한글 프로퍼티 파일을 만드는 방법 (1) 4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 한글 프로퍼티 파일은 일반 텍스트 에디터를 이용해서 만들어 저장한 다음에 ascii2native.exe 프로그램을 이용하여 변환해야 한다. 2) 한글 프로퍼티 파일을 만들어서 저장하십시오. 1) brain09 웹 애플리케이션의 WEB-INF/ classes 서브디렉터리로 가십시오. [그림 9-31] 한글 프로퍼티 파일을 만드는 방법 (1)
[그림 9-32] 한글 프로퍼티 파일을 만드는 방법 (2) 4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 2) Intro_ko.properties.org 파일이 있는 디렉터리로 가세요. 1) 명령 프롬프트 창을 여세요. 3) native2ascii.exe 프로그램을 실행하면 Intro_ko.properties 파일이 생성됩니다. [그림 9-32] 한글 프로퍼티 파일을 만드는 방법 (2)
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 <fmt:message> 커스텀 액션은 프로퍼티 파일에 있는 데이터를 가져다가 출력 하는 역할을 한다. <fmt:setBundle basename= “Intro ” /> 프로퍼티 파일의 대표명 <fmt:message key= “TITLE ” /> 프로퍼티 파일에 있는 데이터의 키
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “fmt ” uri= “http://java.sun.com/jsp/jstl/fmt ” %> <fmt:setBundle basename= “Intro ” /> <HTML> <HEAD><TITLE><fmt:message key= “TITLE ” /></TITLE></HEAD> <BODY> <H3><fmt:message key= “TITLE ” /></H3> <fmt:message key= “GREETING ” /> <BR><BR> <fmt:message key= “BODY ” /> <BR><BR> <FONT size=2><fmt:message key= “COMPANY_NAME ” /></FONT> </BODY> </HTML> [그림 9-33] 예제 9-21의 실행 결과 (1)
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 1) 웹 브라우저의 메뉴에서 도구 → 인터넷 옵션을 선택하면 인터넷 옵션 창이 나타납니다. 2) 언어 버튼을 누르면 언어 기본 설정 창이 나타납니다. [그림 9-34] 웹 브라우저의 언어 기본 설정을 영문으로 바꾸는 방법 3) 추가 버튼을 누르면 언어 추가 창이 나타납니다.
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 4) 영어(미국)을 찾아서 선택한 다음에 확인 버튼을 누르면 이 창은 사라집니다. 5) 영어(미국)을 선택하고 위로 이동 버튼을 누르십시오. 6) 영어(미국) 항목이 제일 위에 위치하면 모든 설정이 끝난 것입니다.
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 [그림 9-35] 예제 9-21의 실행 결과 (2)
<fmt:message var= “title” key= “TITLE” /> 4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 <fmt:message> 커스텀 액션에 var 애트리뷰트를 사용하면 프로퍼티 파일의 데 이터가 출력되는 것이 아니라 변수에 저장된다. <fmt:message var= “title” key= “TITLE” /> 변수 이름 [예제 9-22] <fmt:setBundle> 커스텀 액션의 사용 예 (2) <%@page contentType= “text/html; charset=euc-kr” %> <%@taglib prefix= “fmt” uri= “http://java.sun.com/jsp/jstl/fmt” %> <fmt:setBundle basename= “Intro” /> <fmt:message var= “title” key= “TITLE” /> <fmt:message var= “greeting” key= “GREETING” /> <fmt:message var= “body” key= “BODY” /> <fmt:message var= “companyName” key= “COMPANY_NAME” /> <HTML> <HEAD><TITLE>${title}</TITLE></HEAD> <BODY> <H3>${title}</H3> ${greeting} <BR><BR> ${body} <BR><BR> <FONT size=2>${companyName}</FONT> </BODY> </HTML>
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 <fmt:bundle> 커스텀 액션도 <fmt:setBundle>처럼 프로퍼티 파일의 대표명 지 정에 사용되지만, 시작 태그와 끝 태그 사이에 있는 코드만 영향을 미친다는 점이 다르다. <fmt:bundle> 커스텀 액션은 프로퍼티 파일이 적용되는 코드의 범위를 한 눈 에 알아볼 수 있게 만들기 때문에 코드의 가독성을 높여주는 효과가 있다. <fmt:bundle basename= “Intro” > <fmt:message var= “title” key= “TITLE” /> <fmt:message var= “greeting” key= “GREETING” /> <fmt:message var= “body” key= “BODY” /> <fmt:message var= “companyName” key= “COMPANY_NAME ” /> </fmt:bundle>
GREETING=안녕하세요, {0}님 {1}번째 방문하셨군요. 4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 프로퍼티 파일에도 변수를 사용할 수 있다. 단, 이 때는 영문으로 된 변수 이름 이 아니라 숫자로 된 인덱스 값으로 변수를 표시해야 한다. 변수에 값을 대입하는 일은 JSP 페이지 안에서 해야 한다. <fmt:message> 액 션의 시작 태그와 끝 태그 사이에 <fmt:param> 액션을 사용하여 값을 지정 GREETING=안녕하세요, {0}님 {1}번째 방문하셨군요. 아이디가 들어갈 부분 방문 횟수가 들어갈 부분 <fmt:message var="greeting" key="GREETING" > <fmt:param>Spiderman</fmt:param> <fmt:param>3</fmt:param> </fmt:message> {0} 위치에 들어갈 변수 값을 지정합니다. {1} 위치에 들어갈 변수 값을 지정합니다.
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 변수를 포함하는 프로퍼티 파일을 사용하는 예제를 작성하기 위해 다음과 같 은 두 개의 프로퍼티 파일을 만든다 < 한글 데이터가 저장된 프로퍼티 파일 > < 영문 데이터가 저장된 프로퍼티 파일 > TITLE=환영 인사 GREETING=안녕하세요, {0}님. {1}번째 방문이시군요. BODY=새로운 게임이 추가되었습니다. \ 즐거운 시간 보내시기 바랍니다. COMPANY_NAME=(주) 듀크게임 TITLE=WELCOME GREETING=Hi, {0}. You have visited this site {1} times. BODY=New games are added. Have a good time. COMPANY_NAME=Duke Games Inc.
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 [예제 9-23] 프로퍼티 데이터에 변경 가능한 값을 대입해서 출력하는 예 <%@page contentType= “text/html; charset=euc-kr ”%> <% request.setAttribute( “ID ”, “Spiderman ”); request.setAttribute( “VNUM ”, new Integer(3)); %> <jsp:forward page= “WelcomeView.jsp ” /> request 데이터 영역에 아이디와 방문 횟수를 저장합니다 호 출 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “fmt ” uri= “http://java.sun.com/jsp/jstl/fmt ” %> <fmt:bundle basename= “Welcome ” > <fmt:message var= “title ” key= “TITLE ” /> <fmt:message var= “greeting ” key= “GREETING ” > <fmt:param>${ID}</fmt:param> <fmt:param>${VNUM}</fmt:param> </fmt:message> <fmt:message var= “body ” key= “BODY ” /> <fmt:message var= “companyName ” key= “COMPANY_NAME ” /> </fmt:bundle> <HTML> <HEAD><TITLE>${title}</TITLE></HEAD> <BODY> {greeting} <BR><BR> ${body} <BR><BR> <FONT size=2>${companyName}</FONT> </BODY> </HTML> 아이디와 방문 횟수를 포함한 인사말을 만듭니다 인사말을 출력합니다.
4. 포매팅 라이브러리 사용하기 <fmt:setBundle>과 <fmt:bundle> 커스텀 액션 웹 브라우저가 기본적으로 한글을 사용하도록 설정되어 있을 때 웹 브라우저가 기본적으로 영문을 사용하도록 설정되어 있을 때 [그림 9-38] 예제 9-23의 실행 결과
4. 포매팅 라이브러리 사용하기 <fmt:requestEncoding> 커스텀 액션 POST 메서드로 전송된 한글 입력 데이터를 입력 받기 [예제 9-24] 프로퍼티 데이터에 변수 값을 첨가해서 편집하는 예 <HTML> <HEAD> <META http-equiv= “Content-Type ” content= “text/html;charset=euc-kr ”> <TITLE>한글로 인사하기</TITLE> </HEAD> <BODY> <FORM ACTION=HelloResult.jsp METHOD=POST> 한글 아이디를 입력하세요. <BR> <INPUT TYPE=TEXT NAME=ID> <BR><BR> <INPUT TYPE=SUBMIT VALUE= ‘확인’> </FORM> </BODY> </HTML> <%@page contentType= “text/html; charset=euc-kr ”%> <HEAD><TITLE>인사하기</TITLE></HEAD> 안녕하세요, ${param.ID}님 아이디를 입력받는 HTML 문서 POST 메서드를 이용해서 아이디를 입력받습니다 입력받은 아이디를 가지고 인사말을 출력하는 JSP 페이지 익스프레션 언어를 이용해서 아이디를 포함한 인사말을 출력합니다.
4. 포매팅 라이브러리 사용하기 <fmt:requestEncoding> 커스텀 액션 POST 메서드로 전송된 한글 입력 데이터를 입력 받기 한글 아이디를 입력하고 “확인” 버튼을 누르면 한글이 깨져서 출력될 것입니다. [그림 9-39] 예제 9-24의 실행 결과
<fmt:requestEncoding value= “enc-kr ” /> 4. 포매팅 라이브러리 사용하기 <fmt:requestEncoding> 커스텀 액션 POST 메서드로 전송된 한글 입력 데이터를 입력 받기 POST 메서드로 전송된 한글 입력 데이터를 올바르게 가져오기 위해서는 setCharacterEncoding 메서드를 호출해야 한다. <fmt:requestEncoding> 커스텀 액션은 내부적으로 setCharacterEncoding 메서드를 호출한다. <fmt:requestEncoding value= “enc-kr ” /> 한글 코드 이름 [예제 9-25] <fmt:requestEncoding> 커스텀 액션의 사용 예 <%@page contentType= “text/html; charset=euc-kr ”%> <%@taglib prefix= “fmt ” uri= “http://java.sun.com/jsp/jstl/fmt ” %> <fmt:requestEncoding value= “euc-kr ” /> <HTML> <HEAD><TITLE>인사하기</TITLE></HEAD> <BODY> 안녕하세요, ${param.ID}님 </BODY> </HTML> <fmt:requestEncoding> 액션을 사용하기 위해 필요합니다. 입력받은 아이디를 가지고 인사말을 출력하는 JSP 페이지 한글 데이터를 입력받을 수 있도록 만듭니다
4. 포매팅 라이브러리 사용하기 <fmt:requestEncoding> 커스텀 액션 한글 아이디를 입력하고 “확인” 버튼을 누르면 한글이 올바르게 출력될 것입니다. [그림 9-39] 예제 9-24의 실행 결과
${fn:toUpperCase( “Hello. ”)} ${fn:substring( “도레미파솔라시도 ”, 3, 6)} 5. 함수 라이브러리 사용하기 JSTL 함수 라이브러리 표현식 언어의 EL 식 안에서 사용할 수 있는 EL 함수들의 라이브러리 toUpperCase라는 함수는 문자열에 포함된 모든 영문 소문자를 영문 대문자로 바꾸는 함수 substring이라는 함수는 문자열의 부문자열을 가져오는 함수 ${fn:toUpperCase( “Hello. ”)} 이 함수는 ‘HELLO.’를 리턴합니다. ${fn:substring( “도레미파솔라시도 ”, 3, 6)} 이 함수는 ‘파솔라’를 리턴합니다
5. 함수 라이브러리 사용하기 JSTL 함수 라이브러리 함수
5. 함수 라이브러리 사용하기 [예제 9-26] 함수 라이브러리의 사용 예 <%@page contentType= “text/html; charset=euc-kr ”%> <%@page import= “java.util.* ”%> <%@taglib prefix= “c” uri= “http://java.sun.com/jsp/jstl/core ” %> <%@taglib prefix= “fn” uri= “http://java.sun.com/jsp/jstl/functions ” %> <c:set var= “greeting ” value= “How Are You? ” /> <HTML> <HEAD><TITLE>여러가지 인사말</TITLE></HEAD> <BODY> 본래의 문자열: ${greeting} <BR> 모두 대문자로: ${fn:toUpperCase(greeting)} <BR> 모두 소문자로: ${fn:toLowerCase(greeting)} <BR> Are의 위치는? ${fn:indexOf(greeting, “Are ”)} <BR> Are를 Were로 바꾸면? ${fn:replace(greeting, “Are ”, “Were ”)} <BR> 문자열의 길이는? ${fn:length(greeting)} <BR> </BODY> </HTML> [그림 9-41] 예제 9-26의 실행 결과