lombok.jar 필요
hamcrest-core-1.3.jar 필요
taglibs-standard-impl-1.2.5.jar 필요
taglibs-standard-spec-1.2.5.jar 필요
[BlogPost.java]
package ex05_jstl;
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BlogPost {
private int blogPostNo;
private String title;
private int hit;
private LocalDate createdAt;
}
영역 : 작성방법
1) pageScope : page
2) requestScope : request
3) sessionScope : session
4) applicationScope : application
<c:set var="속성명" value="값" scope="binding영역" />
<c:set var="age" value="3"/> <%-- pageContext.setAttribute("age", 30) --%>
<c:set var="isAdult" value="${age >= 20}"/>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>
<div>${contextPath}</div>
[01_set.jsp]
<%@ 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>Insert title here</title>
</head>
<body>
<%--
<c:set> 태그
1. 속성(Attribute)을 저장할 때 사용한다.
2. binding 영역을 지정할 수 있다. (디폴트는 pageContext에 저장임)
영역 : 작성방법
1) pageScope : page
2) requestScope : request
3) sessionScope : session
4) applicationScope : application
3. 형식
<c:set var="속성명" value="값" scope="binding영역" />
--%>
<%-- 속성 저장하기 --%>
<c:set var="age" value="3"/> <%-- pageContext.setAttribute("age", 30) --%>
<c:set var="isAdult" value="${age >= 20}"/>
<div>나이 : ${age}살</div>
<div>${isAdult ? "성인" : "미성년자"}</div>
<%-- 앞으로 자주 사용할 c:set --%>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>
<div>${contextPath}</div>
</body>
</html>

<c:if test="조건식">
실행문
</c:if>
[02_if.jsp]
<%@ 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>Insert title here</title>
</head>
<body>
<%--
<c:if>
1. if문이다.
2. else문이 없다.
3. 형식
<c:if test="조건식">
실행문
</c:if>
--%>
<c:set var="age" value="30"/>
<c:if test="${age >= 20}">
<div>성인</div>
</c:if>
<c:if test="${age < 20}">
<div>미성년자</div>
</c:if>
<c:set var="score" value="80"/>
<c:if test="${score >= 90 and score <= 100}"><c:set var="grade" value="A"/></c:if>
<c:if test="${score >= 80 and score < 90}"><c:set var="grade" value="B"/></c:if>
<c:if test="${score >= 70 and score < 80}"><c:set var="grade" value="C"/></c:if>
<c:if test="${score >= 60 and score < 70}"><c:set var="grade" value="D"/></c:if>
<c:if test="${score >= 0 and score < 60}"><c:set var="grade" value="F"/></c:if>
<div>${score}점, ${grade}학점</div>
</body>
</html>

<c:choose>
<c:when test="조건식">
실행문
</c:when>
<c:when test="조건식">
실행문
</c:when>
<c:otherwise>
실행문
</c:otherwise>
</c:choose>
[03_choose.jsp]
<%@ 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>Insert title here</title>
</head>
<body>
<%--
<c:choose>
1. <c:if> 태그를 대체할 수 있다.
2. else if, else 문 처리가 가능하다.
3. 형식
<c:choose>
<c:when test="조건식">
실행문
</c:when>
<c:when test="조건식">
실행문
</c:when>
<c:otherwise>
실행문
</c:otherwise>
</c:choose>
--%>
<c:set var="age" value="15"/>
<c:choose>
<c:when test="${age < 8}">
<c:set var="result" value="미취학아동"/>
</c:when>
<c:when test="${age < 14}">
<c:set var="result" value="초등학생"/>
</c:when>
<c:when test="${age < 17}">
<c:set var="result" value="중학생"/>
</c:when>
<c:when test="${age < 20}">
<c:set var="result" value="고등학생"/>
</c:when>
<c:otherwise>
<c:set var="result" value="성인"/>
</c:otherwise>
</c:choose>
<div>${age}살, ${result}</div>
</body>
</html>

<c:forEach var="속성" begin="시작값" end="종료값" step="증가값">
${속성}
</c:forEach>2) 향상 for문 <c:forEach var="요소" items="배열 or 리스트">
${요소}
</c:forEach>[04_forEach.jsp]
<%@page import="java.time.LocalDate"%>
<%@page import="ex05_jstl.BlogPost"%>
<%@page import="java.util.Arrays"%>
<%@page import="java.util.List"%>
<%@ 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>Insert title here</title>
</head>
<body>
<%--
<c:forEach>
1. 반복문을 처리한다.
2. 형식
1) 일반 for문
<c:forEach var="속성" begin="시작값" end="종료값" step="증가값">
${속성}
</c:forEach>
2) 향상 for문
<c:forEach var="요소" items="배열 or 리스트">
${요소}
</c:forEach>
--%>
<%-- 1 ~ 5 출력 --%>
<c:forEach var="n" begin="1" end="5" step="1">
<div>${n}</div>
</c:forEach>
<hr>
<%-- 5 ~ 1 출력 --%>
<c:forEach var="n" begin="1" end="5" step="1">
<div>${6 - n}</div>
</c:forEach>
<hr>
<%-- <c:forEach> 태그와 배열 --%>
<%
String[] seasons = {"봄", "여름", "가을", "겨울"};
pageContext.setAttribute("seasons", seasons);
%>
<c:forEach var="season" items="${seasons}" varStatus="vs">
<div>인덱스 : ${vs.index}</div>
<div>요소 : ${season}</div>
</c:forEach>
<hr>
<%-- <c:forEach> 태그와 리스트 --%>
<%
List<String> jobs = Arrays.asList("PM", "기획자", "개발자", "퍼블리셔");
pageContext.setAttribute("jobs", jobs);
%>
<c:forEach var="job" items="${jobs}" varStatus="vs">
<div>인덱스 : ${vs.index}</div>
<div>직업 : ${job}</div>
</c:forEach>
<%-- 임의의 BlogPost 3개를 List에 저장하고 화면에 출력하기 --%>
<%
List<BlogPost> list = Arrays.asList(
new BlogPost(1, "첫 블로그", 10, LocalDate.of(2023, 1, 1)),
new BlogPost(2, "두 블로그", 15, LocalDate.of(2023, 1, 2)),
new BlogPost(3, "세 블로그", 20, LocalDate.of(2023, 1, 3))
);
pageContext.setAttribute("list", list);
%>
<c:forEach var="blogPost" items="${list}">
<div class="blog">
<span class="blogPostNo">${blogPost.blogPostNo}</span>
<span class="title"><a href="">${blogPost.title}</a></span>
<span class="hit">${blogPost.hit}</span>
<span class="createdAt">${blogPost.createdAt}</span>
</div>
</c:forEach>
</body>
</html>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
[01_datatime.jsp]
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="now" value="<%=new Date()%>"/>
<div><fmt:formatDate value="${now}" pattern="yyyy-MM-dd E요일"/></div>
<div><fmt:formatDate value="${now}" pattern="a h:mm:ss"/></div>
<div><fmt:formatDate value="${now}" pattern="H:mm:ss"/></div>
</body>
</html>

[02_number.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="n" value="12345.6789"/>
<div><fmt:formatNumber value="${n}" pattern="#,##0"/></div>
<div><fmt:formatNumber value="${n}" pattern="#,##0.00"/></div>
<div><fmt:formatNumber value="0.5" type="percent"/></div>
<div><fmt:formatNumber value="${n}" type="currency" currencySymbol="$"/></div>
<div><fmt:formatNumber value="${n}" type="currency" currencySymbol="₩"/></div>
</body>
</html>

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
[NewFile.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="str" value="Hello World" />
<h4>${fn:length(str)}</h4>
<h4>${fn:substring(str, 0, 5)}</h4>
<h4>${fn:substringBefore(str, ' ')}</h4>
<h4>${fn:substringAfter(str, ' ')}</h4>
<h4>${fn:indexOf(str, ' ')}</h4>
<h4>${fn:replace(str, ' ', '_')}</h4>
<c:if test="${fn:startsWith(str, 'H')}">
<h4>H로 시작한다.</h4>
</c:if>
<c:if test="${fn:endsWith(str, 'H')}">
<h4>H로 끝난다.</h4>
</c:if>
<c:if test="${fn:contains(str, 'H')}">
<h4>H를 포함한다.</h4>
</c:if>
<c:if test="${fn:containsIgnoreCase(str, 'h')}">
<h4>H, h를 포함한다.</h4>
</c:if>
<c:set var="words" value="${fn:split(str, ' ')}" />
<c:forEach var="word" items="${words}">
<h4>${word}</h4>
</c:forEach>
<h4>${fn:join(words, ' ')}</h4>
<c:set var="str2" value="<script>alert('hahaha')</script>" />
${fn:escapeXml(str2)}
</body>
</html>
<c:set var="str2" value="<script>alert('hahaha')</script>" />
${fn:escapeXml(str2)}
