
(JSP Standard Tag Library)
- JSP에서 사용되는 반복, 조건, 데이터관리, 데이터베이스 액세스, 시간, 숫자, 날짜, 문자열 가공등을 사용할 수 있는 표준라이브러리이다.
- EL을 사용하여 표현한다.
- https://tomcat.apache.org/taglibs/
(Expression Language)
표현식
- JSP의 표현식
<%=,%>와 동일하다- 단, 다른점은 EL은 무조건 scope영역 안의 값만 가져올 수 있다.
- 내장객체 중에 영역을 차지하는 4개(page, request, session, application)에서 사용 가능- 태그 안에도 사용할 수 있다.
<%
session.setAttribute("id", "chouchou");
%>
${id}님 환영합니다.
<%
request.setAttribute("num", "50");
%>
<br>
<%-- 태그 안에도 EL을 사용할 수 있다! --%>
<hr size="${num}" noshade="noshade">
<%-- noshade : 음영효과 제거--%>

: page -> request -> session -> application
<%
request.setAttribute("name", "익명");
session.setAttribute("name", "바로핑");
%>
${name} <%-- request에서 먼저 찾아서 출력 --%>
<br>
${sessionScope.name} <%-- session에서만의 name을 출력함 --%>

/: div*: mod>: gt (greater)<: lt (little)>=: ge<=: le==: eq!=: ne
<% session.setAttribute("num", 10); %>
<h3>산술연산자</h3>
${num + 5} <br>
${num - 5} <br>
${num * 2} <br>
${num / 2} ${num div 2}<br>
${num % 3} ${num mod 3}<br>
<%-- 삼항연산자도 가능 --%>

<h3>비교연산자</h3>
${num > 5} ${num gt 5} <br>
${num < 20} ${num lt 20} <br>
${num >= 10} ${num ge 10} <br>
${num <= 10} ${num le 10} <br>
${num == 10} ${num eq 10} <br> <%-- 문자열도 EL에서 '==' 사용가능 --%>
${num != 11} ${num ne 11} <br>

<h3>논리연산자</h3>
${num > 5 && num > 3} ${num > 5 and num > 3} <br>
${num > 5 || num > 3} ${num > 5 or num > 3} <br>
${!true} ${not true} <br>

<h4>empty연산자</h4>
<%
session.setAttribute("love", "김슈슈");
%>
내가 좋아하는 것 : <%= session.getAttribute("love1") %> <%-- "null"을 출력 --%>
<br>
내가 좋아하는 것 : ${love1} <%-- 아무것도 출력되지 않음 --%>
<br>
${empty love1} <br> <%-- true --%>
${empty love} <br> <%-- false --%>
${not empty love} <br> <%-- true --%>

https://mvnrepository.com/search?q=jstl


<c:set />: 변수 선언<c:remove />: 변수 제거<c:out />: 변수 출력<c:if />: 조건문, test 속성 사용 필수<c:choose />: 다중if문, Switch문과 유사<c:when />: case와 같은 역할, test 속성 사용 필수, [choose 태그 안에서 사용],<c:otherwise />: default(또는 if문의 else)처럼 사용, [choose 태그 안에서 사용]<c:forEach />: 반복문<c:catch />: 예외 처리<c:forTokens />: 구분자로 분할하여 반복문<c:url />: URL 생성<c:param />: 파라미터 추가<c:import />: 페이지 첨부<c:redirect />: URL 이동
coretag 사용하려면 jsp에서 taglib 필수 !
prefix를 이용하여 alias 같은 개념으로 별칭을 지정해준다. 보통 'c'로 사용함!
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="name" value="chouchou" scope="session" />
<%-- default로 page에 저장됨.
scope로 저장하고 싶은 위치를 지정할 수 있음
--%>
<c:out value="${name}" />

JSTL을 사용하여 encode화 하여 JavaScript injection을 막을 수 있다.
<% pageContext.setAttribute("menu", 1); %>
<%-- test 안에 내용이 true일 때 실행문 실행 --%>
<c:if test="${menu == 1}">
1번 메뉴를 드립니다.
</c:if>
<c:if test="${menu == 2}">
2번 메뉴를 드립니다.
</c:if>
<% pageContext.setAttribute("menu", 1); %>
<c:choose>
<c:when test="${menu == 1}">
1번 메뉴를 드립니다.
</c:when>
<c:when test="${munu == 2}">
2번 메뉴를 드립니다.
</c:when>
<%-- otherwise : else처럼 사용 --%>
<c:otherwise>
메뉴가 없습니다.
</c:otherwise>
</c:choose>
4-1) 숫자 출력
<%-- 1부터 10까지 반복문 출력 --%>
<c:forEach var="i" begin="1" end="10" step="1">
${i}
</c:forEach>

4-2) list 출력
<%
ArrayList<String> list = new ArrayList<String>();
list.add("배");
list.add("귤");
list.add("체리");
list.add("딸기");
session.setAttribute("list", list);
%>
<c:forEach items="${list}" var="vo">
${vo}
</c:forEach>

4-3) vo 생성하여 ArrayList 출력

➡Java Resources 위치에 MemberVo class 생성해주기

➡constructor와 getter, setter 만들어주기
① 필드가 private로 되어있고,
② getter 메서드가 꼭 생성되어 있어야 EL을 통해 정보를 가져올 수 있다.
③ EL을 통해 가져오려면 필드명과 동일한 이름으로 가져와야 한다. (name, age)
<%
ArrayList<MemberVO> memberList = new ArrayList<MemberVO>();
MemberVO m1 = new MemberVO("학생1", 21);
MemberVO m2 = new MemberVO("학생2", 22);
MemberVO m3 = new MemberVO("학생3", 23);
memberList.add(m1);
memberList.add(m2);
memberList.add(m3);
session.setAttribute("memberList", memberList);
%>
<c:forEach items="${memberList}" var="memberVo">
${memberVo.name} (${memberVo.age}) <br>
</c:forEach>
