2020년 12월 23일 - 2
업데이트:
JSTL(JavaServer Pages Standard Tag Library)란?
자바 서버 페이지 표준 태그 라이브러리는 Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한
컴포넌트
모음이다. JSTL은 JSP 페이지 내에서 자바 코드를 바로 사용하지 않고 로직을 내장하는 효율적인 방법을 제공한다.1
- 프로젝트 구성
사전 설정(라이브러리 등록)
-
파일 다운로드
-
WEB-INF > lib에 저장
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL / JSTL</title>
</head>
<body>
<h3>JSTP : 자바서버 페이지 표준 태그 라이브러리</h3>
<hr>
<h3>JSTL</h3>
<ul>
<li><a href="views/03_jstl/01_jstl.jsp">01.JSTL - core(기초)</a></li>
<li><a href="views/03_jstl/02_jstl_core_if.jsp">02.JSTL - core(if)</a></li>
<li><a href="views/03_jstl/03_jstl_core_choose.jsp">03.JSTL - core(choose)</a></li>
<li><a href="views/03_jstl/04_jstl_core_forEach.jsp">04.JSTL - core(forEach-1)</a></li>
<li><a href="views/03_jstl/05_jstl_core_forEach2.jsp">05.JSTL - core(forEach-2)</a></li>
<li><a href="views/03_jstl/06_jstl_core_forTokens.jsp">06.JSTL - core(forTokens)</a></li>
<li><a href="views/03_jstl/07_jstl_core_url.jsp">07.JSTL - core(url)</a></li>
<li><a href="views/03_jstl/08_jstl_core_redirect.jsp">08.JSTL - core(redirect)</a></li>
<li><a href="views/03_jstl/09_jstl_fmt.jsp">09.JSTL - fmt</a></li>
<li><a href="views/03_jstl/10_jstl_fn.jsp">10.JSTL - fn</a></li>
</ul>
</body>
</html>
views(01_jstl.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<h2>JSTL이란?</h2>
Jsp Standard Tag Library<br>
JSP에서 사용하는 커스텀 태그로, <br>
공통으로 사용하는 코드의 집합을 사용하기 쉽게<br>
태그화하여 표준으로 제공한 것을 말한다.
<form action="01_jstl_core_basic.jsp">
첫번째 수 : <input type="text" name="num1" /><br/>
두번째 수 : <input type="text" name="num2" /><br/>
<button type="submit">확인</button>
</form>
</body>
</html>
views(01_jstl_core_basic.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- 위의 구문을 작성하면 "c"를 사용할 수 있다 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag</title>
</head>
<body>
<h3>라이브러리 등록 방법</h3>
1) https://tomcat.apache.org/download-taglibs.cgi 접속<br>
2) Standard-1.2.5 -> jar files -> 3개 다운로드<br>
3) WebContent/WEB-INF/lib 에 추가<br>
<hr>
<h3>JSTL 선언 방법</h3>
<pre>
JSTL을 사용 하고자하는 JSP 페이지의 상단
page 지시자 아래에 taglib 지시자를 사용.
<%@ taglib prefix="사용하고자 하는 접두사" uri="tld 파일상의 uri" %>
prefix : 접두사. 다른 태그와 구별할 수 있는 namespace를 제공함.
uri : 실제 웹상주소가 아니라, 태그라이브러리를 나타내는 식별자임.
tlb파일상의 uri값을 가리키며,
이 지시자를 통해 작성한 태그이름과 매칭되는 자바코드를 찾음. <br />
* tld(Tag Library Descriptor) 파일 : 커스텀 태그 정보를 갖고 있는 라이브러리 파일.
* uri : (Uniform Resource Identifier) : 자원을 나타내는 유일한 주소
</pre>
<hr>
<h3>JSTL core Library</h3>
<p>
<h4>1. 변수의 선언 - <c:set> </h4>
<pre>
- 변수를 선언하고 초기값을 대입하는 기능을 가진 태그
- 변수를 선언할 때 scope를 지정할 수 있음. (기본값 page)
- 사용법
1) 변수 타입을 별도로 선언하지 않는다.
2) c:set 태그
3) c:set으로 선언된 변수는 EL 구문에서는 사용할 수 있지만
scriptlet 내에서는 사용할 수 없다.
</pre>
<c:set var="car" value="람보르기니" />
<h3>${ car }</h3>
<!-- 전달된 파라미터 두 개를 c:set을 이용하여 변수에 저장 -->
<c:set var="n1" value="${ param.num1 }" />
<c:set var="n2" value="${ param.num2 }" scope="request"/>
<c:set var="result" value="${n1 * n2 }" scope="session" />
${n1} * ${n2} = ${result} <br>
${pageScope.n1} * ${requestScope.n2} = ${sessionScope.result} <br><%! %>
<!-- 정확하게 변수를 사용하는 방법 -->
</p>
<hr>
<p>
<h4> 2. 변수의 삭제 - <c:remove> </h4>
<c:set var="result" value="9999" scope="request" />
[삭제전] <br>
request : ${ requestScope.result } <br>
session : ${ sessionScope.result } <br>
1)모든 스코프에서 삭제<br>
<%-- <c:remove var="result" /> --%>
2) 특정 스코프에서 삭제 <br>
<c:remove var="result" scope="request" /> <!-- request만 삭제된다. -->
[삭제후] <br>
request : ${ requestScope.result } <br>
session : ${ sessionScope.result } <br>
</p>
<hr>
<p>
<h4> 3. 변수의 출력 - <c:out> </h4>
<c:out> 태그는 데이터를 출력할 때 사용하는 태그<br>
<, >, & 특수 문자를 자동으로 이스케이프 시퀀스(escape sequance)로 바꿔줌.<br>
<pre>
* 특수 문자 이스케이프 시퀀스(escape sequance)
< <
> >
& &
</pre>
<c:out value="<h4>c:out 테스트 중입니다.</h4>"/>
<c:out value="<h4>c:out 테스트 중입니다.</h4>" escapeXml="false"/>
</p>
</body>
</html>
결과
- 초기화면
-
-
-
views(02_jstl_core_if.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(if)</title>
</head>
<body>
<h3><c:if> 태그 </h3>
- Java의 if 문과 비슷한 역할을 하는 태그.<br>
- <c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함<br>
이 때 조건식은 반드시 EL 형식으로 기술
<form action="02_jstl_core_ifEnd.jsp">
첫번째 수 : <input type="text" name="num1" /><br/>
두번째 수 : <input type="text" name="num2" /><br/>
<button type="submit">확인</button>
</form>
</body>
</html>
views(02_jstl_core_ifEnd.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(if)</title>
</head>
<body>
<h3><c:if> 태그 </h3>
- Java의 if 문과 비슷한 역할을 하는 태그.<br>
- <c:if> 태그에서 조건식은 test라는 속성의 값으로 지정해야 함<br>
이 때 조건식은 반드시 EL 형식으로 기술
<hr>
<c:set var="n1" value="${ param.num1 }" />
<c:set var="n2" value="${ param.num2 }" />
<%-- input 태그의 값(파라미터)은 문자열의 형태를 띄고 있으므로
문자열 크기 비교가 일어남
--%>
<c:if test="${n1 > n2}">
${n1}은 ${n2} 보다 더 큽니다. -> 문자열 비교
</c:if>
<br>
<!-- n1, n2 형변환이 필요함 -->
<c:if test="${Integer.parseInt(n1) > Integer.parseInt(n2)}">
${n1}은 ${n2} 보다 더 큽니다. -> 숫자 비교
</c:if>
<br>
<c:if test="${Integer.parseInt(n1) < Integer.parseInt(n2)}">
${n1}은 ${n2} 보다 더 작다. -> 숫자 비교
</c:if>
<br>
<c:if test="${Integer.parseInt(n1) == Integer.parseInt(n2)}">
${n1}과 ${n2}는 같습니다. -> 숫자 비교
</c:if>
</body>
</html>
결과
- 초기화면
-
-
views(03_jstl_core_choose.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(choose)</title>
</head>
<body>
<h3><c:choose> 태그
- Java의 if-else if-else, switch 문과 비슷한 역할을 하는 태그.
- <c:when>, <c:otherwise> 태그와 함께 사용되는데,
각각 switch 문의 case, default 절과 비슷한 역할을 함.
<form name="genderFrm" action="03_jstl_core_chooseEnd.jsp">
<h2>경품뽑기</h2>
숫자를 입력하세요 : <input type="number" name="num1"><br>
<button type="submit">확인</button>
</form>
</body>
</html>
views(03_jstl_core_chooseEnd.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(choose)</title>
</head>
<body>
<h3><c:choose> 태그 </h3>
<c:choose>
<c:when test="${Integer.parseInt(param.num1) == 1}">
김현혜를 뽑으셨습니다.
</c:when>
<c:when test="${Integer.parseInt(param.num1) == 2}">
신주희를 뽑으셨습니다.
</c:when>
<c:when test="${Integer.parseInt(param.num1) == 3}">
이한솔을 뽑으셨습니다.
</c:when>
<c:when test="${Integer.parseInt(param.num1) < 0}">
잘못 입력하셨습니다.
</c:when>
<c:otherwise>
꽝입니다.
</c:otherwise>
</c:choose>
</body>
</html>
결과
- 초기화면
-
-
views(04_jstl_core_forEach.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(forEach)</title>
</head>
<body>
<h3><c:forEach> 태그 </h3>
- Java의 for문에 해당하는 기능을 제공하는 태그
- forEach는 여러가지 속성이 사용됨
<pre>
var : 현재 반복 횟수에 해당하는 변수의 이름
begin : 반복이 시작할 요소 번호 (0 … n)
end : 반복이 끝나는 요소 번호
step : 반복 시 증가할 수
items : 반복할 객체 명 (Collection 객체)
varStatus : 현재 반복에 해당하는 객체의 요소
</pre>
<h3>기본 사용법</h3>
<c:forEach var="i" begin="1" end="6">
<h<c:out value="${i}" />>c:out으로 반복문 사용</h<c:out value="${i}" />>
<h${i}>EL로 반복문 사용 </h${i}>
<p>-------------------------------------------</p>
</c:forEach>
<hr>
<h3>step 속성</h3>
step속성의 값은 0보다 작거나 같을 수 없음.
<c:forEach var="i" begin="1" end="6" step="2">
<h${i}>건너뛰기 ${i}</h${i}>
</c:forEach>
<hr>
<!-- step은 음수 사용 불가능 -->
<h3>역순</h3>
<c:forEach var="k" begin="1" end="6">
<h${7-k}>역순 ${7-k}</h${7-k}>
</c:forEach>
</body>
</html>
views(05_jstl_core_forEach2.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(forEach)</title>
</head>
<body>
<!--
EL 3.0 버전 이상을 지원하는 was에서만 EL컬렉션객체 사용 가능
톰캣 8.0부터 EL 3.0을 지원함.
-->
<c:set var="myList" value='${["A","B","C","D","E"]}' scope="request" />
<c:set var="mySet" value='${{"A","B","C","B","A"}}' scope="request" />
<c:set var="myMap" value='${{"name":"홍길동", "job":"학생", "age":20}}' scope="request" />
<!-- Map객체의 키값은 문자열로 전달함. -->
<jsp:forward page="05_jstl_core_forEach2End.jsp"/>
<!-- 현재 페이지에서 선언된 요청 정보(request scope)를 page 속성에 작성된 주소로 위임하겠다. -->
</body>
</html>
views(05_jstl_core_forEach2End.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL - core tag(forEach)</title>
</head>
<body>
<h2>컬렉션 객체 선언 및 출력</h2>
<h3>varStatus 속성</h3>
varStatus는 다음과 같은 속성을 가지고 있음
<pre>
current : 현재 반복 횟수 또는 현재 반복 접근한 값
index : 반복 라운드의 제로 기반(zero-based) 인덱스 (0 … n)
count : 반복 라운드의 1 기반(one-based) 인덱스 (1 … n)
first : 현재 라운드가 반복을 통한 첫 번째임을 의미
last :현재 라운드가 반복을 통한 마지막 번째임을 의미
</pre>
<hr>
<h3>List</h3>
<c:forEach var="item" items="${myList}" varStatus="vs">
현재 값 : ${ vs.current } <br>
index : ${ vs.index } <br>
count : ${ vs.count } <br>
first : ${ vs.first } <br>
last : ${ vs.last } <br>
-------------------------------------------<br>
</c:forEach>
<hr>
<h3>Set</h3>
<c:forEach var="item" items="${ mySet }" varStatus="vs">
${item}
<c:if test="${!vs.last}">
,
</c:if>
</c:forEach>
<hr>
<h3>Map</h3>
<c:forEach var="item" items="${myMap}">
${item.key} = ${item.value} <br>
</c:forEach>
<hr>
</body>
</html>
결과
-
초기화면
- 05_jstl_core_forEach2.jsp
-
-
-
- 05_jstl_core_forEach2End.jsp
-
-
-
-
출처 - 위키백과 ↩
댓글남기기