JSP day18
JSTL(Java Server Page Standard Tag Library)
JSTL
JSTL이란 JSTL(Java Server Page Standard Tag Library)의 약자로 JSP 개발을 단순하 가히 위한 태그 라이브러리이다. 기존의 존재하던 스크립틀릿 태그를 사용할 필요가 없고 el 표현식을 보충하여 개발에 속도나 코드 재사용에 용이하다.
JSTL를 사용하기 위해서는 라이브러리를 추가해줘야한다.
https://tomcat.apache.org/download-taglibs.cgi
페이지에 들어가 하단의 4개의 파일을 전부 다운로드 받아 라이브러리에 추가한다.
Impl:taglibs-standard-impl-1.2.5.jar (pgp, sha512) Spec:taglibs-standard-spec-1.2.5.jar (pgp, sha512) EL:taglibs-standard-jstlel-1.2.5.jar (pgp, sha512) Compat:taglibs-standard-compat-1.2.5.jar (pgp, sha512)
JSTL의 종류
1. core tags
- 변수 생성, URL 관리, 프로그램의 흐름을 제어(조건문, 반복문)
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
c:out
jsp에서 <%= %> 태그와 유사한 표현식의 결과를 표시
<c:out value="${변수}"/>
c:import
상대 또는 절대 URL을 검색하여 내용을 var 문자열, varReader의 Reader 또는 페이지에 표시
c:set
계산 결과를 scope 변수에 설정
c:remove
특정 범위에서 지정된 범위 변수를 제거할 때 사용
c:if
조건을 테스트하는데 사용되는 조건부 태그이며, 표현식이 참인 경우에만 내용을 표시
c:forEach
기본 반복 태그이며 고정된 횟수 또는 초과되는 중첩된 본문 내용을 반복
c:redirect
브라우저를 새 URL로 리디렉션
2. formatting
- 메시지를 형식화, 번호 및 날짜, 통화 형식화 등을 지원
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
fmt:parseNumber
통화, 백분율 또는 숫자의 문자열 표현을 분석하는데 사용
fmt:formatNumber
특정형식 또는 정밀도로 숫자값을 형식화 하는데 사용
fmt:parseDate
시간과 날짜의 문자열 표현을 분석하는데 사용
fmt:formatDate
제공된 패턴 및 스타일을 사용하는 시간 및 날짜를 형식화
fmt:setTimeZone
시간대 구성 변수 내에 시간을 저장
3. function
- 문자열 조작 및 문자열 길이를 지원
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
fn:contains()
지정된 하위 문자열을 포함하는 입력 문자열을 테스트하는데 사용
fn:indexOf()
지정된 하위 문자열이 처음 나타나는 문자열 내에서 인덱스를 반환
fn:split()
문자열을 하위 문자열 배열로 분할
fn:endWith()
입력 문자열이 지정된 접미어로 끝나는지 테스트
fn:trim()
문자열의 약쪽 끝 공백을 제거
fn:toLowerCase()
문자열의 모든 문자를 소문자로 변화
fn:toUpperCase()
문자열의 모든 문다를 대문자로 변환
fn:substring()
주어진 문자열 시작 및 끝 위치에 따라 문자열의 일부를 반환
fn:length()
문자열 내부의 문자수 또는 컬렉션의 항목수를 반환
fn:replace()
모든 문자열을 다른 문자열 시퀀스로 변환
JSTL 사용 예제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 코어</title>
</head>
<body>
<h2>JSTL 코어</h2>
<p>c:out(출력)</p>
<p><c:out value="${'Hello jstl'}"/></p>
<hr>
<p>c:set(변수 선언)</p>
<c:set var="userid" value="apple"/>
<p>아이디 : ${userid}</p>
<hr>
<p>c:set(배열)</p>
<c:set var="memList" value='<%=new String[]{"apple", "banana", "orange"}%>'/>
<p>memList : ${memList}</p><!-- 메모리 주소 -->
<p>memList[0] : ${memList[0]}</p>
<hr>
<p>c:remove(변수삭제)</p>
<p>아이디 : ${userid}</p>
<c:remove var="userid"/>
<p>아이디 : ${userid}</p>
<hr>
<p>c:if(조건문)</p>
<c:set var="userid" value="apple"/>
<c:if test="${userid eq 'apple'}">
<p>로그인되었습니다.</p>
</c:if>
<c:remove var="userid"/>
<c:if test="${userid eq 'apple'}">
<p>로그인되었습니다.</p>
</c:if>
<c:if test="${not userid}">
<p>로그인에 실패하였습니다.</p>
</c:if>
<hr>
<p>c:empty(empty 비교)</p>
<c:if test="${empty userid}">
<p>userid 데이터가 없습니다.</p>
</c:if>
<hr>
<p>c:choose(조건문 switch문과 유사)</p>
<c:set var="userpw" value="1111"/>
<c:choose>
<c:when test="${userid}">
<p>아이디 변수가 존재합니다.</p>
</c:when>
<c:when test="${!empty userpw}">
<p>비밀번호 변수가 존재합니다.</p>
</c:when>
<c:otherwise>
<p>아이디, 비밀번호 변수가 모두 존재합니다.</p>
</c:otherwise>
</c:choose>
<hr>
<%
String[] studentList = {"김사과", "반하나", "오렌지", "이메론"};
pageContext.setAttribute("studentList", studentList);
%>
<p>forEach(반복문)</p>
<table border="1" width="600">
<tr>
<th>idx</th>
<th>번호</th>
<th>이름</th>
</tr>
<c:forEach var="student" items="${studentList}" varStatus="status"><!-- varStatus: index 제공 -->
<tr>
<td>${status.index}</td>
<td>${status.count}</td><!-- count: 반복횟수 제공 -->
<td>${student}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - formatting</title>
</head>
<body>
<h2>JSTL - formatting</h2>
<p><fmt:formatNumber value="1234.5678"></fmt:formatNumber></p>
<p><fmt:formatNumber value="50000"></fmt:formatNumber></p>
<p><fmt:formatNumber value="50000" type="currency" currencySymbol="$"></fmt:formatNumber></p>
<p><fmt:formatNumber value="0.1" type="percent"></fmt:formatNumber></p>
<hr>
<%
request.setAttribute("now", new Date());
%>
<p><fmt:formatDate value="${now}"/></p>
<p><fmt:formatDate value="${now}" type="date"/></p>
<p><fmt:formatDate value="${now}" type="time"/></p>
<p><fmt:formatDate value="${now}" type="both"/></p>
</body>
</html>