- XML 태그를 통해 JSP 코드 관리하는 라이브러리
- JSP의 소스 코드 가독성향상
- Custom tag 지원 : 개발자가 직접 태그 작성 가능
특징
- 태그로 간단한 프로그램 로직 사용(변수 선언, 반복문, 조건문 등)
- 다른 JSP 페이지 호출(<c:redirect>, <c:import>)
- 날짜, 시간, 숫자의 포맷
- JSP 페이지 하나를 가지고 여러 가지 언어의 웹 페이지 생성
- 데이터베이스로의 입력, 수정, 삭제, 조회
- XML 문서의 처리
- 문자열을 처리하는 함수 호출
문자열 처리 함수 호출을 제외한 나머지 기능들은 모두 커스텀 액션 형태로 제공
즉, 이는 뭐.. 미리 만들어둔걸 내가 taglib에 추가함으로서 쉽게 사용할 수 있는 라이브러리를 칭한다고 보면 된다.
JSTL을 구성하는 라이브러리들은
코어, 포맷팅, 데이터베이스...많이 있다.
<c:forEach>
커스텀 액션 : 자바의 for 문과 유사<c:forEach begin= "1" end="10">
<H5>안녕하세요, 여러분!</H5>
</c:forEach>
<fmt:formatNumber>
커스텀 액션 : 수치 값을 포맷<fmt:formatNumber value="3.14159" pattern="#.00" />
JSTL에는 커스텀 액션만 있는 게 아니라 EL에서 사용할 수 있는 EL 함수도 있다.
${fn:toUpperCase("Hello")}
우리는 core 라이브러리를 집중적으로 보자.
이와 같은 다양한 태그가 존재한다.
하나씩 보자..
변수 선언 및 초기값을 대입
- 변수의 타입을 쓰지 않음, scope default PAGE
c:set var="변수명" value="값" [scope="영역"] />
- EL에서 사용 및 EL 식의 값 사용 가능
<c:set var="sum" value="${num1+num2}" /> ${sum}
자바랑 비교해서, 변수의 타입을 기입하지 않아도 된다는 편리한점이 있다.
<%@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>
뭐.. 이렇게 사용할 수 있다.
그리고 scope를 request로 지정하면 아래와 같이 foward를 통해서 이동한 곳에서 도 해당set을 통해 만든것을 EL을 통해서 표현할 수 있다.
<%@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" />
아래 페이지로 foward하면
<%@page contentType="text/html; charset=euc-kr"%>
<HTML>
<HEAD><TITLE>상품 정보</TITLE></HEAD>
<BODY>
<H3>상품 정보</H3>
상품코드: ${CODE} <BR>
상품명: ${NAME} <BR>
단가: ${PRICE}원 <BR>
</BODY>
</HTML>
새로운 set없이 사용가능하다.
<c:set> 액션으로 선언한 변수 제거
자바 변수와 달리 인위적으로 삭제해야 할 번거로움이 있다.
<c:remove var="변수명" />
<c:remove var="num" />
<c:remove var="code" scope="request" />
이렇게 삭제 가능하다..
데이터를 출력
- 특수한 문자인 <, >, &, ‘, “를 포함하는 데이터를 출력할 때 편리
- escapeXml을 이용하여 출력 내용의 HTML로 해석 여부 선택
- true (생략가능) : HTML로 해석하지 않음- default 애트리뷰트 : 출력 값이 없을 시 출력할 데이터의 디폴트 값을 지정가능
- EL 식의 결과를 출력할 때도 사용
<c:out value="출력내용" [escapeXml="false"] default="No Data" />
으로 사용 가능하며
<%@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="<FONT size=7>커다란 글씨</FONT>는 다음과 같은 출력을 합니다." />
이와 같은 경우 html로 해석하지 않아 태그도 그대로 출력된다.
<c:if test="true|fase" [value="변수명"] >
...
</c:if>
-- custom Action
<c:if test="${num1 > num2}">
num1이 더 큽니다.
</c:if>
-- java
<%
if (num1 > num2) {
System.out.println("num1이 더 큽니다.");
}
%>
자바 프로그램의 switch와 유사
- <c:when>, <c:otherwise> 커스텀 액션과 함께 사용
- 각각 case, default 절과 비슷한 역할
- <c:when>커스텀 액션의 test 속성에 조건식을 EL 식 형태로 지정
<c:choose>
<c:when test="${num == 0}">
처음 뵙겠습니다. <BR>
</c:when>
<c:when test="${num == 1}">
반갑습니다. <BR>
</c:when>
<c:otherwise>
안녕하세요. <BR>
</c:otherwise>
</c:choose>
반복 출력
<c:forEach var="변수명" begin="시작값" end="마지막값" step="num(Default = 1)">
…
</c:forEach
items="${배열명}"
사용하면 배열도 출력가능함
문자열에 포함된 토큰을 분리하여 각각의 토큰에 대하여 반복 처리
자바의 for 문과 java.util.StringTokenizer클래스의 기능을 합친 것 같은 기능
var, items, delims 속성 사용
- var : 분리된 토큰을 대입할 변수의 이름
- items : 토큰을 포함하는 문자열
- delims : 토큰 분리에 사용할 구획 문자
<c:forTokens var="pet" items="햄스터 이구아나 소라게" delims=" " > ${pet} <BR> </c:forTokens>
토큰의 구획 문자로 한 종류 이상의 문자를 지정가능하다
elims="*/-"
자바의 try문과 유사
<c:catch var="e"> <c:set var="result" value="${param.NUM1 / param.NUM2}" /> 나눗셈의 결과는? ${result} </c:catch> <c:if test= "${e != null}" > 에러 메시지: ${e.message} </c:if>
sendRedirect메서드로 지정된 URL로 이동 : <c:redirect url="URL" />
<c:param>
으로 전달 파라메터 값 설정<c:redirect url="Multiply.jsp" > <c:param name="NUM1" value="5" /> <c:param name="NUM2" value="25" /> </c:redirect>
JSP 뿐만 아니라 다른 종류의 웹 자원도 포함
지정된 URI 을 jsp페이지에 출력
c:import url="URL주소" [var="변수명"] [scope="영역"][charEncording="인코딩캐릭터셋"] />
- url 속성 : 지정된 URL은 context path를 포함하지 않음
- var 속성의 변수 : 결과값을 저장 가능
- 미지정시 결과 출력
- <jsp:include> 표준 액션은 무조건 출력- <c:param>으로 전달 파라메터 값 설정
<c:import url="crap.jsp" > <c:param name="product" value="TV" /> <c:param name="ad_index" value="007" /> </c:import>
value 속성의 값으로 URL을 생성
지정된 URL은 context path를 포함하여 지정
<c:url var="변수명" value="URL주소" [scope="영역"] />
<c:url var= "myUrl" value="/Add.jsp" > <c:param name="NUM1" value="999" /> <c:param name="NUM2" value="1" /> </c:url>
변경하면 기존 JSP코드에 많은 변화를 가져올 수 있다.