[JSP] JSTL : JSP Standard Tag Library
JSTL 이란?
JSP에서 사용자 태그를 정의해서 사용하는 것이 가능하며, 이런 사용자 정의 태그를 커스텀 태그라고 하는데 이를 자주 사용하는 것을 표준으로 만들어 놓은 것이 JSTL이다.
JSTL 특징
- JSTL은 JSP의 공통적인 핵심 기능을 캡슐화 한 태그 모음이다.
- JSTL은 반복 및 조건문 XML 문서 조작을 위한 태그, 국제화 태그 및 SQL 태그와 같은 일반적인 구조 작업을 지원한다.
- JSTL과 커스텀 태그및 JSP 액션태그는 XML 기반에서 작성되었기 때문에 모든 태그는 시작 태그와 종료 태그의 쌍으로 이루어져야 한다.
- JSTL은 EL를 사용하여 표현한다.
JSTL은 커스텀 태그의 일종으로 자바로 작성된 tag이므로 다음의 라이브러리가 필요하다.
jstl-1.2jar
JSTL 사용법
사용자 정의 태그나 JSTL 사용을 위한 태그 라이브러리를 지정한다.
taglib 지시어는 사용자 정의 태그 , JSTL의 라이브러리 위치를 식별한다.
형식
예시
<%@ taglib prefix= "c" uri="http://java.sun.com/jsp/jstl/core"%>
uri : 태그 라이브러리 URI 또는 태그 라이브러리 디스크립터 파일의 URI
prefix : 사용자 정의 태그 접두사(태그를 식별하기 위한 이름)
자주 쓰이는 JSTL 태그 종류
태그 이름 | 기능 | 접두어 | 참조 구문 |
Core tags | 변수 지원, 흐름 제어, URL처리 | c | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> |
Formatting tags | 지역, 메세지형식, 숫자 및 날짜 형식 | fmt | <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> |
SQL tags | 오라클,mysql 와 같은 DBMS와 상호 작용 하기 위한 태그 | sql | <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> |
JSTL function | 컬렉션처리, String 처리 | fn | <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> |
XML tags | XML 코어, 흐름제어, XML 변환 | x | <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> |
1) JSTL Core 태그
일반 프로그램 언어에서 제공하는 변수선언, 조건, 제어 ,반복문 등의 기능 제공
core 태그 종류
태그 | 설명 |
<c:out> | 수식의 결과 출력 / <%= %>과 유사하다 |
<c:set> | JSP에서 사용할 변수 설정 |
<c:remove> | 설정한 변수를 제거 |
<c:catch> | 예외처리 |
<c:if> | 조건에 따라 내부 코드 실행 |
<c:choose> | 여러 조건 처리시 사용 |
<c:when> | <c:choose>태그의 하위 태그, 조건에따라 코드 실행 |
<c:otherwise> | <c:choose>태그의 하위 태그, 조건 만족안할시 실행 |
<c:import> | URL를 사용하여 다른 자원 결과 삽입 |
<c:forEach> | 고정된 횟수 또는 컬렉션, map의 각 항목 처리시 사용하는 반복문 |
<c:forTokens> | 제공된 구분자로 구분된 토큰을 반복한다, 문자열을 토큰으로 분리하고 각 토큰을 반복 출력 생성한다. |
<c:param> | 주로<c:url><c:redirect><c:import>와 사용하며 매개변수를 추가한다. |
<c:url> | url형식 또는 url인코딩에 사용 |
<c:if> 태그
조건문 태그로 else 구문이 따로 없다.
필수 속성 : test (본문 내용의 실행 여부를 결정하는 조건식)
속성:
var : 테스트 조건 결과 저장할 변수
scope : 조건 결과를 저장할 변수의 scope
<c:if> 태그 예시
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 contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<form action="ex7_cif.jsp">
<input type="text" name="num1" value="${param.num1 }">
<select name="oper">
<option value="+" ${param.oper=="+"?"selected='selected' ":"" }>덧셈</option>
<option value="-" ${param.oper=="-"?"selected='selected' ":"" }>뺄셈</option>
<option value="/" ${param.oper=="/"?"selected='selected' ":"" }>나눗셈</option>
<option value="*" ${param.oper=="*"?"selected='selected' ":"" }>곱셈</option>
</select>
<input type="text" name="num2" value="${param.num2 }">
<button> = </button>
<span>
<!-- c:if 안에 test 에 들어가는건 조건식으로 true를 만족해야 안의 식이 수행됨 -->
<c:if test="${not empty param.num1 and not empty param.num2 }">
<c:if test="${ param.oper == '+'}">${param.num1+param.num2 }</c:if>
<c:if test="${ param.oper == '-'}">${param.num1-param.num2 }</c:if>
<c:if test="${ param.oper == '/'}">${param.num1/param.num2 }</c:if>
<c:if test="${ param.oper == '*'}">${param.num1*param.num2 }</c:if>
</c:if>
</span>
</form>
</div>
</body>
</html>
|
cs |
<c:choose>, <c:when>, <c:otherwise>태그
여러 조건 중 하나의 조건을 선택하여 실행
<c:when> 조건에 만족하는 것이 없으면, <c:otherwise> 태그 내면 본문을 실행한다.
필수 속성 :
test : true 이면 실행
<c:choose>, <c:when>, <c:otherwise>태그 예시
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
42
43
44
|
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>JSTL : core - choose </h3>
<!-- action 을 지정하지 않으면 동일한 uri -->
<form method="post">
<p> 수 : <input type="text" name="num"> </p>
<button type="submit">확인</button>
</form>
<p>
<c:if test="${not empty param.num} ">
<c:choose>
<c:when test="${param.num%3==0 && param.num%4==0 }">
${param.num } 은 3과 4의 배수입니다.
</c:when>
<c:when test="${param.num%3==0}">
${param.num } 은 3의 배수입니다.
</c:when>
<c:when test="${param.num%4==0}">
${param.num } 은4의 배수입니다.
</c:when>
<c:otherwise>
${param.num } 은 3또는 4의 배수가 아닙니다.
</c:otherwise>
</c:choose>
</c:if>
</p>
</body>
</html>
|
cs |
<c:forEach> 태그
고정된 횟수 또는 컬렉션에 대해 중첩 본문 콘텐츠를 반복하는 데 사용하는 반복 태그
(1) 예시 : var 속성을 사용하여 begin end step 사용 (일반 for문과 유사)
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
|
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>JSTL -core : forEach 형식 1</h3>
<!-- for문과 유사함 -->
<table style="width: 500px;" border="1">
<c:forEach var ="a" begin="1" end="5" step="1">
<tr height="30" align="center">
<c:forEach var="b" begin="1" end="10">
<td width="50">
<c:set var ="n" value="${n+1 }"/>
<!-- c:set 은 page.setAttribute("변수",값) 과 유사 -->
${n }
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
|
cs |
(2) 예시 : items 속성에 list를 불러와 출력(향상된 for문과 유사)
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 import="com.user.UserDTO"%>
<%@page import="java.util.List"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
request.setCharacterEncoding("utf-8");
List<UserDTO> list = (List<UserDTO>)request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>forEach를 사용한 경우: JSTL, EL에서 list 접근 방법</h3>
<c:forEach var="dto" items="${list }">
<p>${dto.num } : ${dto.name } : ${dto.content }</p>
</c:forEach>
<hr>
<!-- 향상된 for문과 유사 -->
<c:forEach var="dto" items="${list }" varStatus="s">
<p>
${s.index } : ${s.count } : ${s.first } : ${s.last }:
${dto.num } :${dto.name } : ${dto.content }
</p>
</c:forEach>
</body>
</html>
|
cs |
<c:out> 태그
<%=%> 과 비슷한 표현식의 결과를 표시한다.
기본적으로 XML 태그를 이스케이프 한다.
필수 속성:
value : 출력할 값
default : 변수가 null일시 출력되는 대체 값
escapeXml : < > & 와같은 문자 사용 여부 제어 true로 설정시 자동으로 변환(기본값 true)
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
|
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
String msg = "안녕하세요, <b>스프링</b> 님을 환영합니다.";
//request.setAttribute("msg", msg); // 현 jsp 또는 포워딩한 페이지에서도 사용 가능
pageContext.setAttribute("msg", msg); //현 jsp 페이지에서만 사용 가능
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3> c : cut</h3>
<!-- escapeXml 기본이 true : 태그는 태그가 실행된 결과가 아닌 태그 자체로 인식-->
<p> <c:out value="${msg}"/></p>
<p> <c:out value="${msg}" escapeXml="false" /></p>
<p> <c:out value="${msg}" escapeXml="true"/></p>
<p> <c:out value="<b> 태그 : 글자를 진하게" /></p>
<hr>
<h3> c:set : pageContext.setAtrribute()</h3>
<c:set var="s" value="반가워 <b>홍길동</b>님"/>
<p><c:out value="${s}"/> </p>
<p><c:out value="${s}" escapeXml="false"/> </p>
</body>
</html>
|
cs |
'Web > JSP&SERVLET' 카테고리의 다른 글
[Servlet] 서블릿 이란? (0) | 2020.11.06 |
---|---|
[WEB] URL과 URI (0) | 2020.10.28 |
[WEB] HTTP 와 HTTPS (0) | 2020.10.28 |
[WEB] 웹 어플리케이션 이란? (0) | 2020.10.28 |
[JSP] EL : Expression Language (1) | 2020.10.26 |
댓글