커스텀 태그(Custom Tag)
jsp의 목적은 자바 코드를 최소한으로 줄이기 위함!
but, 액션 태그, 표현 언어 <%= =%>를 사용해도 조건식, 반복문 등은 커버할 수 없기 때문에
조건문, 반복문 등의 자바 코드를 제거하기 위해 사용
1. 커스텀 태그 종류
1)개발자가 만든 커스텀 태그
-스프링 프레임워크에서 미리 만들어서 제공
2)JSTL(JSP Standard Tag Library)
-라이브러리 설치 필요
- 다운로드 링크 : https://tomcat.apache.org/download-taglibs.cgi
2. 표준 태그 라이브러리
-가장 많이 사용되는 태그를 표준화하여 라이브러리로 제공
-Core 태그 : 변수 선언, 조건문/반복문, URL 처리
-Formatting 태그 : 숫자,날짜,시간 포맷 지정
-XML 태그 : XML 파싱
-Function 태그 : Collection 처리,문자열 처리
-SQL 태그 : DB 연결 및 쿼리 실행
3. Core 태그 라이브러리
1)사용 전 반드시 jsp 파일 상단에 tablib 디렉티브 태그 선언 필요!!
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2) 프로젝트 -- WEB-INF -- lib 안에 다운받은 jar 파일 넣어서 사용
3) 종류 : <c:set>, <c:remove>, <c:if>, <c:choose>, <c:forEach>, <c:forTokens>, <c:import>, <c:redirect>, <c:url>, <c:out>, <c:catch>
-<c:set> 형식
-<c:set var="변수 이름" value="변수값" scope=""/>
-<c:set> 태그로 빈 속성 이름 줄여서 사용할 수 있음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 한다. -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("utf-8");
%>
<c:set var="id" value="ezen600" scope="page"/>
<c:set var="pwd" value="0311" scope="page"/>
<c:set var="name" value="${'이순신' }" scope="page"/>
<c:set var="age" value="${30 }" scope="page"/>
<c:set var="height" value="${180 }" scope="page"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원 정보 출력<title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="#99ccff">
<td width="7%"><b>아이디</b></td> <!-- EL로 변수에 바로 접근하여 값 출력 -->
<td width="7%"><b>비밀번호</b></td>
<td width="7%"><b>이름</b></td>
<td width="7%"><b>나이</b></td>
<td width="7%"><b>키</b></td>
</tr>
<tr align="center">
<td>${id }</td>
<td>${pwd }</td>
<td>${name }</td>
<td>${age }</td>
<td>${height }</td>
</tr>
</table>
</body>
</html>
|
cs |
-<c:if> 형식
-<c:if test="${조건식}" var="변수 이름(조건식의 결과값을 저장)" scope=""/>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<%@ 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
</head>
<body>
<c:set var="number" value="100"/>
<c:set var="string" value="JSP"/>
<c:if test="${number mod 2 eq 0 }">
${number } 짝수입니다.
</c:if>
<c:if test="${string eq 'JAVA' }" var="result">
문자열은 JAVA입니다.<br>
</c:if>
<c:if test="${not result }">
'JAVA'가 아닙니다.<br>
</c:if>
<h4>조건식 주의사항</h4>
<c:if test="100" var="result2">
EL이 아닌 정수를 지정하면 false
</c:if>
result2 : ${result2 }<br>
<c:if test="tRuE" var="result3">
대소문자 구분없이 "tRuE"인 경우 true<br>
</c:if>
result3 : ${result3 }<br>
<c:if test="${ true }" var="result4">
EL 양쪽에 빈 공백이 있는 경우 true<br>
</c:if>
result4 : ${result4 }<br>
</body>
</html>
|
cs |
<c:if test="${string eq 'JAVA' }" var="result">
문자열은 JAVA입니다.<br>
</c:if>
--> <c:set>에서 string을 JSP로 선언했기 때문에 JSP == JAVA 는 false이기 때문에 출력되지 않음!
대소문자는 상관없다.
-<c:choose> 형식 (switch문 기능)
-<c:choose>
<c:when test="조건식1">본문 내용1</c:when>
<c:when test="조건식2">본문 내용2</c:when>
<c:otherwise>본문 내용n</c:otherwise>
</c:choose>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<%@ 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>choose / when / otherwise</title>
</head>
<body>
<h4>국,영,수 점수를 입력하면 평균 구해 학점을 출력하시오.</h4>
<form action="#">
국어 : <input type="text" name="kor"><br>
수학 : <input type="text" name="math"><br>
영어 : <input type="text" name="eng"><br>
<input type="submit" value="학점 구하기">
</form>
<!-- 모든 과목 점수가 입력되었는지 체크 -->
<c:if test="${ not (empty param.kor or empty param.eng or empty param.math)}">
<!-- 평균 계산 -->
<c:set var="avg" value="${(param.kor + param.eng + param.math) / 3 }"/>
평균 점수는 ${avg }이고,
<!-- 학점 출력 -->
<c:choose>
<c:when test="${avg >=90 }">A학점</c:when>
<c:when test="${avg >=80 }">B학점</c:when>
<c:when test="${avg >=70 }">C학점</c:when>
<c:when test="${avg >=60 }">D학점</c:when>
<c:otherwise>F학점</c:otherwise>
</c:choose>
입니다.
</c:if>
</body>
</html>
|
cs |
-<c:forEach> 형식
<c:forEach var="반복할 변수 이름"
items="반복할 객체 이름"
begin="반복 시작값"
end="반복 마지막값"
step="한번 반복할 때마다 반복 변수를 증가(시킬)값"
varStatus="반복 상태 변수 이름(속성)">
</c:forEach>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<%@ 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSTL - forEach</title>
</head>
<body>
<h4>일반 for문 형태의 forEach 태그</h4>
<c:forEach begin="1" end="3" step="1" var="i">
<p>반복 ${i }입니다.</p>
</c:forEach>
<h4>varStatus 속성 확인하기</h4>
<table border="1">
<c:forEach begin="3" end="5" var="i" varStatus="loop">
<tr>
<td>count : ${loop.count }</td>
<td>index : ${loop.index }</td>
<td>current : ${loop.current }</td>
<td>first : ${loop.first }</td>
<td>last : ${loop.last }</td>
</tr>
</c:forEach>
</table>
<h4>1에서 100까지 정수 중 홀수의 합</h4>
<c:forEach begin="1" end="100" var="i">
<c:if test="${i mod 2 eq 1 }">
<c:set var="sum" value="${sum + i}"/>
</c:if>
</c:forEach>
1~100사이의 정수 중 홀수의 합은? ${sum }
</body>
</html>
|
cs |
varStatus 속성
-index : items에서 정의한 항목을 가리키는 index 번호임 (0부터 시작)
-count : 몇 번째 반복인지 나타냄(1부터 시작)
-first : 첫 번째 반복 나타냄
-last : 마지막 반복 나타냄
-current : var에 지정된 현재 변수값 (예 : loop)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<%@ 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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSTL - forEach</title>
</head>
<body>
<h4>향상된 for문 형태의 forEach 태그</h4>
<%
String[] rgba = {"Red", "Green", "Blue", "Black"};
%>
<c:forEach items="<%=rgba %>" var="c">
<span style="color: ${c};">${c }</span>
</c:forEach>
<h4>varStatus 속성 확인</h4>
<table border="1">
<c:forEach items="<%=rgba %>" var="c" varStatus="loop">
<tr>
<td>count : ${loop.count }</td>
<td>index : ${loop.index }</td>
<td>current : ${loop.current }</td>
<td>first : ${loop.first }</td>
<td>last : ${loop.last }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
|
cs |
'📒 education archive > 📍Servlet, JSP' 카테고리의 다른 글
[국비학원 기록/JSP] JSTL - 국제화(다국어) 태그 라이브러리 (0) | 2021.12.16 |
---|---|
[국비학원 기록/JSP] JSTL - <c:url>, <c:redirect>,<c:out> 형식 (0) | 2021.12.16 |
[국비학원 기록/JSP] 표현 언어 EL, 연산자, 내장 객체, 자바 빈(Bean), ArrayList, HashMap 예제 (0) | 2021.12.14 |
[국비학원 기록/JSP] 액션태그(2)-useBean, setProperty, getProperty, 회원 가입 구현 (0) | 2021.12.10 |
[국비학원 기록/JSP] 액션태그(1) - include, forward (0) | 2021.12.10 |