계속되는 JSTL 의활약 <c:foreach> 액션의 items에사용할수있는자료의형태 - <c:foreach var="dish" items="${???}"> - 즉, 위의??? 부분에사용할수있는자료의형태는다음과같다. 배열, 컬렉션프레임워크,, 로구분된항목들을포함한문자열 - 위의로또번호생성페이지에서생성된로또번호가 TreeSet에저장되어있을경우, TreeSet에저장된로또번호를그대로위의 <c:foreach> 태그를사용해서출력할수있다. <c:fortokens> 태그 - 문자열을작은토큰으로분리한후분리된토큰각각을반복해서처리할수있는기능을제공한다. - 사용예 <c:fortokens var="pets" items=" 호랑이고양이망아지 " delims=" " > ${pets}<br> </c:fortokens> - 위의예는 호랑이고양이망아지 문자열을 ( 공백 ) 을기준으로토큰으로분리한다음, 각토큰들 ( 즉, 호랑이, 고양이, 망아지 ) 를순서대로출력한다. - 토큰으로구분하는문자를위의에에서는 ( 공백 ) 문자하나만정의했지만, 다수의구분문자를사용할수있다. - 다음은구분문자로 *, /, - 를사용하는예 <c:fortokens var="fruits" items=" 딸기 * 사과 / 바나나-복숭아 " delims="*/-" > ${fruits}<br> </c:fortokens> - 다양한상품의이름들을다양한구분문자를사용해서분리한후상품각각의이름을출력하는 JSP(ProductList.jsp) <HEAD><TITLE> 동물의왕국 </TITLE></HEAD> 매장의상품목록을출력합니다. <BR><BR> <c:set var="goods" value=" 라디오^^컴퓨터 ~ 카메라 " /> <c:fortokens var="listofgoods" items="${goods}" delims="^~" > ${listofgoods} <BR> </c:fortokens>
예외까지처리할수있는 JSTL. 제법이군! - <c:catch> 태그를사용해서자바에서처럼예외를처리할수있다. - 다음은 0으로나누었을경우에발생하는예외를처리하는 JSP(DivideZero.jsp) <% int num1 = 1; int num2 = 0; %> <HEAD><TITLE> 나눗셈프로그램 </TITLE></HEAD> <c:catch var="e"> <% int result = num1 / num2; %> 나눗셈의결과는? <%= result %> </c:catch> <c:if test="${e!= null}" > 에러메시지 : ${e.message} </c:if> - 발생하는예외객체는자바객체이므로, 자바코딩에서만 <c:catch> 태그를사용한다. 다른웹서버에있는페이지도출력하는 <c:redirect> 태그 - 페이지를변경하는방법은두가지가존재한다. 1 Redirect : 다른웹서버의자원으로도이동가능. 클라이언트의 URL창의주소가바뀐다. 2 Forward : 동일한웹서버의자원으로만이동. 클라이언트의 URL창의주소가바꾸지않는다. - <c:redirect> 태그는위의 redirect 방식으로페이지를전환한다. - 다른웹서버의페이지를호출하는예 <c:redirect url="http://www.naver.com" /> - 만일데이터를전달해야하는경우라면, 태그의몸체에파라미터를만들고값을설정할수있다. <c:redirect url="url주소 " > <c:param name="code" value="12345" /> <c:param name="price" value="10000" /> </c:redirect> - 다음은 NUM1과 NUM2 파라미터에값을설정해서 Multiply.jsp를호출하는 JSP(Redirect.jsp) <c:redirect url="multiply.jsp" > <c:param name="num1" value="5" /> <c:param name="num2" value="25" /> </c:redirect>
<c:import> 액션태그 - <jsp:include> 표준액션과비슷한동작을한다. 즉, 현재의페이지에다른페이지의결과를포함시킨다. - <c:import> 와 <jsp:include> 의차이점은, <c:import> 는다른웹서버에있는자원을불러올수있다. - 사용예 <c:import url="http:// 어쩌구저쩌구 / 그럭저럭.jsp" /> - 만일전달해야할데이터가있는경우에는태그의몸체에파라미터를만들고값을설정할수있다. <c:import url="http:// 어쩌구저쩌구 / 그럭저럭.jsp" > <c:param name="name1" value="tiger" /> <c:param name="name2" value="lion" /> </c:import> <c:url> 액션태그 - <c:set> 액션태그처럼변수의선언에사용되지만, 주로 URL을저장하기위한변수의선언에사용된다. - 변수를선언하고변수에 URL을설정한다. <c:url var="myurl' value="http://localhost:8080/ 프로젝트이름 / 어쩌구.jsp" /> - 만일 URL을통해서데이터를전송하고저한다면, URL에데이터를추가하는형태로사용할수있다. - URL에데이터를설정하는예 <c:url var="myurl" value="http://localhost:8080/ 프로젝트이름 /Add.jsp" > <c:param name="num1" value="100" /> <c:param name="num2" value="200" /> </c:url> - 위의액션태그를실행하면 myurl에 http://localhost:8080/ 프로젝트이름 /Add.jsp?NUM1=100&NUM2=200 값이저장된다. - 이태그는 <c:redirect>, <c:import> 액션태그와함께유용하게사용될수있다. - 다음은 next라는변수에 URL을저장하고, next로페이지를 redirect하는예 (UrlRedirect.jsp) <c:url var="next" value="add.jsp" > <c:param name="num1" value="100" /> <c:param name="num2" value="200" /> </c:url> <c:redirect url="${next}" /> <c:out> 액션태그 - 이태그는데이터를클라이언트화면에직접출력할때사용한다. - JSP의내장객체 "out" 과그기능이유사하지만, 태그자체를그냥문자로처리할수있는장점이있다. - 예를들어, 클라이언트화면에 <INPUT> 은 <FORM> 의하위속성입니다. 라는메세지를출력한다면, 메세지에태그가포함되어있기때문에정상적으로출력되지않을수도있다. 이런경우에, <c:out> 액션태그를사용하면태그가달려있는일반문자열도아무런문제없이클라이언트화면에출력할수있다. - 사용예 <c:out value="<input> 은 <FORM> 의하위속성입니다. /> - 위와같이하면, 웹브라우저가특별한의미로해석하는 <INPUT> 과 <FORM> 태그가그대로문자열로출력된다.
- 하지만, 웹브라우저가태그를특별한의미로해석하게할수도있다. escapexml을 false로설정하면된다. <c:out value="<h1> 반갑습니다.</H1>" escapexml="false" /> - 위와같이하면, 웹브라우저에 반갑습니다 라는문자열이굵은기사제목형태로출력된다. 즉, <H1> 을일반문자가아니라웹브라우저의특별한의미로해석한다. - 다음은태그문자를그냥일반문자열로출력하는 JSP(NormalTag.jsp) <%@page contenttype="text/html; charset=euc-kr" %> <html> <head><title> 태그문법설명 </title></head> <body> <h3> 폰트태그에대한설명 </h3> <c:out value="<font size=7> 커다란글씨 </FONT> 는다음과같이출력합니다." /><br><br> <c:out value="<font size=7> 커다란글씨 </FONT>" escapexml="false" /> </body> </html> - 위의예에서첫번째출력은 <FONT size=7> 커다란글씨 </FONT> 는다음과같이출력합니다." 이되고, 두번째출력은 커다란글씨 만확대되어서출력된다. - <c:out> 액션태그에는디폴트값을지정할수도있다. 즉, 값이없는경우에대신다른값을출력하도록설정할수있다. <c:out value="${str}" default="there is no data" /> - 위는 str변수에값이없으면 "There is no data" 가대신출력된다. - 다음은화면에서사용자가 ID 값을입력하면입력한 ID와 안녕하세요 를출력하고, 입력하지않으면 손님, 안녕하세요 를출력하는 JSP(defaultHello.jsp) <%@page contenttype="text/html; charset=euc-kr" %> <html> <head><title> 간단한인사 </title></head> <body> 안녕허세요, <c:out value="${param.id}" default=" 손님 " /> </body> </html> 이렇게해서 JSTL 의코어기능액션태그는마무리합니다 ~. 마무리기념도전과제 : 화면에서문자열을입력하면, 입력된문자열에서공백 ( ) 과쉼표 (,) 를기준으로단어의 갯수를세는 JSP 를작성하세요.( 힌트 : <c:fortokens> 액션태그를사용하면됩니다.)
포맷팅 JSTL 액션태그 - 이액션태그는주로출력되는값의형태를정의하는데사용된다. - 예를들어, 동일한날짜정보를서로다른형태로출력하려는경우에사용할수있으면, 숫자를천단위에쉼표를추가한다거나, 소순점까지출력하도록하는경우등에이액션태그를사용한다. - 게다가, 세계각국의현지상황에맞게데이터를출력할수있도록국제화를지원하는액션태그도있다. - 지금부터시작 ~ 날짜와시각의출력형태를정의하는 <fmt:formatdate> 액션태그 - 이액션태그를사용하려면우선 java.util.date 객체를생성해야한다. 따라서, 약간의자바코딩이필요하다. <%@ page import="java.util.*" %> <c:set var="date" value="<%= new Date %>" /> <fmt:formatdate value="${date}" /> - 위의결과는 date에포함된날짜를 "YYYY, MM, DD" 형태로출력한다. - 이액션태그는시각을출력하기위해서도사용할수있다. 시각을출력하려면 type="time" 을설정한다. <fmt:formatdate value="${date}" type="time" /> - 위의 type에는 "date","both" 도사용할수있다. "date" 는기본이기때문에지정을안해도된다. "both" 는날짜와시간을모두출력하도록한다. - 다음은오늘의날짜와시간을출력하는 JSP(DateTime.jsp) <%@page import="java.util.*"%> <c:set var="date" value="<%= new Date() %>" /> <HEAD><TITLE> 현재의시각 </TITLE></HEAD> [ 오늘의날짜 ] <fmt:formatdate value="${date}" /> <BR> [ 현재의시각 ] <fmt:formatdate value="${date}" type="time" /> - 출력되는형태의길이를 4단계로조절할수있다. 즉, short, mdium, long, full 을사용해서출력되는형태의길이를조절할수있다. 길게출력하면좀더많은정보를출력하게된다. - 다음은날짜와시간정보를각각 4단계로출력하는 JSP(DateTimeSteps.jsp) <%@page import="java.util.*"%> <c:set var="date" value="<%= new Date() %>" /> <HEAD><TITLE> 현재의시각 </TITLE></HEAD>
[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" /> - 이외에도출력되는형태를별도로지정할수도있다. pattern을사용해서직접형태를지정한다. <fmt:formatdate value="${date}" type="date" pattern="yyyy/mm/dd (E)" /> 대소문자에유의 - 위의결과는 2011/04/01 ( 금 ) 형태롤출력된다. - 다음은시간을 pattern으로지정한예 <fmt:formatdate value="${date}" type="time" pattern="(a) hh:mm:ss" /> - 위의결과는 ( 오후 ) 3:28:12 형태로출력된다. 수치의출력형태를설정하는 <fmt:formatnumber> 액션태그 - 세자리마다쉽표를추가해서수치를출력하거나, 수치앞에화폐단위를출력할수있고, 소수점을포함해서출력할수도있다. 이렇게수치값의출력형태를설정하는기능을한다. - 수치값세자리마다쉼표를추가하는예 <fmt:formatnumber value="123456" groupingused="true" /> - 위의실행결과는 123,456 이된다. - 수치를출력할때소수점이하의자리를지정할수있다. 이런경우에는 pattern을사용하고그값으로는 #,0, 소수점으로지정한다. # 과 0은모두숫자로대체된다. # 은유효숫자가있는경우에만숫자로채워지고없으면빈칸으로남겨진다. 0은유효숫자가없는경우에는 0이채워진다. - 다음은지정된수치를천단위별로쉼표를추가하고, # 문자와 0문자로숫자를출력하는 JSP(NumberFormat.jsp) <HEAD><TITLE> 숫자포맷 </TITLE></HEAD> 첫번째수 : <fmt:formatnumber value="1234500" groupingused="true" /> <BR> 두번째수 : <fmt:formatnumber value="3.14158" pattern="#.##" /> <BR> 세번째수 : <fmt:formatnumber value="10.5" pattern="#.00" /> - 지정된수치를퍼센트로출력할수도있다. type="percent" 를추가한다. 다음은 50% 를출력하는예 <fmt:formatnumber value="0.5" type="percent" /> - type에는이밖에도 currency" 를지정할수있는데, 이것은금액에적합한형태로변경되어출력된다. 즉, 3 자리마다쉼표가추가되고경우에따라서는소수점아래 2자리까지표시된다. <fmt:formatnumber value="3400000" type="currency" /> - 일반적으로금액앞에는화폐단위가추가된다. 원화는 가추가되고달러는 $ 이추가된다. - 다음은퍼센트와원화표시를추가하여출력하는 JSP(NumberType.jsp)
<HEAD><TITLE> 숫자포맷 </TITLE></HEAD> 금액 : <fmt:formatnumber value="1000000" type="currency" currencysymbol=" " /> <BR> 퍼센트 : <fmt:formatnumber value="0.99" type="percent" />