자바서버 페이지 표준 태그 라이브러리
자바서버 페이지 표준 태그 라이브러리(JavaServer Pages Standard Tag Library, 약칭 JSTL)은 Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트 모음이다. JSTL은 XML 데이터 처리와 조건문, 반복문, 국제화와 지역화와 같은 일을 처리하기 위한 JSP 태그 라이브러리를 추가하여 JSP 사양을 확장했다. JSTL은 JSR 52로서 JCP 하에서 개발되었으며, 2006년 5월 8일에 JSTL 1.2가 출시되었다.
JSTL은 JSP 페이지 내에서 자바 코드를 바로 사용하지 않고 로직을 내장하는 효율적인 방법을 제공한다. 표준화된 태그 셋을 사용하여 자바 코드가 들락거리는 것보다 더 코드의 유지보수와 응용 소프트웨어 코드와 사용자 인터페이스 간의 관심사의 분리로 이어지게 한다.
출처: 위키
익스프레션 언어 (expression language) ( ex: ${ } )
자바의 표현식을 대신 하는 언어로 스파게티 코드로 인한 혼동을 방지하고 코드의 가독성, 간결함을 높힌다
// 조건문, 변수지정, 반복문 등 논리수행
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
// 지역, 메세지 형식, 날짜, 숫자 형식
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
// 컬렉션, String 처리 (공부 더 필요)
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/fn" %>
활용 가능한 태그
<c:set :변수 생성 , 값을 저장 value="<%=객체 or 값%>" />
<c:remove :변수 삭제 />
<c:if :조건문 (test="조건") > </c:if>
<c:choose :여러가지 조건에 따라 처리 가능 (if 보다 활용도가 높다) > </c:choose>
<c:forEach :반복문 (개선된 for문) > </c:forEach>
<c:forTokens :토큰값 (split 과 for문 결합)
<c:out : JSTL 출력 구문 (이것보다는 EL ${} 사용빈도가 높다)
<c:catch : 예외처리> </c:catch>
Set
<c:set var="job" value="농구선수" scope="request" />
당신의 직업은 : ${job}<br>
<c:set var="list" value="${paramValues.subject}" />
<c:forEach var="obj" items="${list}">
${obj}
</c:forEach>
if
<c:if test="${empty userpwd}">
empty userpwd
</c:if>
<c:if test="${userpwd == '1004'}">
welcome Amdin page
</c:if>
forEach
<!--
int sum=0;
for(int i = 0 ; i <= 10 ; i++){ sum+=i;}
-->
<c:forEach var="i" begin="1" end="10">
<c:set var="sum" value="${sum+i}" />
</c:forEach>
sum 누적값 : ${sum}<br>
forEach (items 활용)
<%
List<Emp> emplist = new ArrayList<>();
//ArrayList<Emp> emplist = new ArrayList<>();
emplist.add(new Emp(1000,"A"));
emplist.add(new Emp(2000,"B"));
emplist.add(new Emp(3000,"C"));
//출력 >> EL & JSTL 에게 위임
for(Emp e : emplist){
out.print(e.getEmpno() + " / " + e.getEname() + "<br>");
}
%>
<h3>JSTL 출력</h3>
<c:set var="list" value="<%= emplist%>" />
<table border="1">
<tr><td>사번</td><td>이름</td></tr>
<c:forEach var="emp" items="${list}">
<tr><td>${emp.empno}</td><td>${emp.ename}</td></tr>
</c:forEach>
</table>
choose
<ul>
<c:choose>
<c:when test="${param.name == 'jk'}">
<li><b>${param.name}</b></li>
</c:when>
<c:when test="${param.name == 'hong'}">
<li><i>${param.name}</i></li>
</c:when>
<c:otherwise>
<li><h3>${param.name}</h3></li>
</c:otherwise>
</c:choose>
</ul>
<c:choose>
<c:when test="${not empty paramValues.subject}">
<c:forEach var="subject" items="${paramValues.subject}"
varStatus="status">
${subject} - ${status.index} - ${status.count}
</c:forEach>
</c:when>
<c:otherwise>
Empty
</c:otherwise>
</c:choose>
catch
<!-- catch 구문안에서 exception 발생하면 발생객체의 주소를 var="msg" 할당 -->
<h3>예외처리</h3>
<c:catch var="msg">
name : <%= request.getParameter("name") %>
<%
if(request.getParameter("name").equals("hong")){
out.print("당신의 이름은: " + request.getParameter("name"));
}
%>
</c:catch>
<c:if test="${msg != null}">
<h3>예외발생</h3>
오류메시지 : ${msg}<br>
</c:if>
session에서 값 가져와서 처리
<c:if test="${sessionScope.userid == null }">
<script>location.href='Ex02_JDBC_Login.jsp'</script>
</c:if>
<c:if test="${sessionScope.userid != 'admin' }">
<script>location.href='Ex02_JDBC_Login.jsp'</script>
</c:if>
request에서 param 추출 + set과 choose 활용 예제
<c:set var="user_id" value="${param.user_id}"/>
<c:set var="user_pwd" value="${param.user_pw}"/>
<c:choose>
<c:when test="${user_id == 'bituser' && user_pwd == '1004'}">
<c:set var = "result" value="success"/>
</c:when>
<c:otherwise>
<c:set var = "result" value="fail"/>
</c:otherwise>
</c:choose>
fmt
변수선언 : <c:set var="price" value="1000000"></c:set><br>
변수값 출력:${price}<br>
<fmt:formatNumber value="${price}" type="number" /><br>
<fmt:formatNumber value="50000000" type="currency" currencySymbol="$" /><br>
<fmt:formatNumber value="0.13" type="percent"/>
<fmt:formatNumber value="123456789" pattern="###,###,###" var="pdata" />
변수선언 : <c:set var="now" value="<%= new Date() %>" /><br>
변수값 : ${now}<br>
Basic Date : <fmt:formatDate value="${now}" type="date" /><br>
DateStyle(full) : <fmt:formatDate value="${now}" type="date" dateStyle="full" /><br>
DateStyle(short) : <fmt:formatDate value="${now}" type="date" dateStyle="short" /><br>
시간:<fmt:formatDate value="${now}" type="time"/><br>
날짜 + 시간:<fmt:formatDate value="${now}" type="both"/><br>
혼합:<fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /><br>
혼합2:<fmt:formatDate value="${now}" type="both" dateStyle="short" timeStyle="short" />
예제: http://www.tutorialspoint.com/jsp/jstl_format_formatdate_tag.htm (출력문 같이 나오는 곳)
*******************************************************************************