Core 태그
먼저, 반드시 JSP 페이지 상단에 다음과 같이 taglib 디렉티브 태그를 추가하여 톰캣에게 알려줘야 한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Core 태그 라이브러리의 기능
- <c:set> : JSP 페이지에서 변수 지정.
- <c:remove> : 변수 제거
- <c:if> : 조건문 사용
- <c:choose> : switch문 (<c:when>, <c:otherwise>를 서브 태그로 가짐)
- <c:forEach> : 반복문 사용
- <c:import> : URL을 이용해 다른 자원을 JSP 페이지에 추가
- <c:redirect> : response.sendRedirect() 기능을 수행
- <c:url> : 요청 매개변수로부터 URL을 생성
- <c:catch> : 예외 처리에 사용
- <c:out> : JspWriter에 내용을 처리한 후 출력함
<c:set>
<c:set var="id" value="jang" scope="page" />
<c:set var="pwd" value="1234" scope="page" />
<c:set var="name" value="${'장발장'}" scope="page" /> <!-- value에 EL태그를 쓸 수 있음 -->
<tr>
<td>${id}</td>
<td>${pwd}</td>
<td>{$name}</td>
</tr>
- scope : 변수 스코프를 지정. (page, request, session, application)
<c:if>
<c:if test="${true}">
<h1>항상 참입니다.<h1>
</c:if>
<c:if test='${(id=='jang') && (name=='김덕배')}'>
<h1>아이디는 ${id}이고, 이름은 ${name}입니다.</h1>
</c:if>
<c:choose>
<c:set var="count" value="3" />
<c:choose>
<c:when test="${count <= 0 }">
일치하는 것이 하나도 없습니다.
</c:when>
<c:otherwise>
일치하는 것이 ${count}개 있습니다.
</c:otherwise>
</c:choose>
<c:forEach>
<h3> 1부터 100까지 3의 배수 합 </h3>
<c:set var="sum" value="0" />
<c:forEach var="i" begin="3" end="100" step="3">
<c:set var="sum" value="${sum + i}" />
</c:forEach>
결과 = ${sum}
ArrayList에 담긴 정보 뽑아내기
<%
List membersList = new ArrayList();
MemberBean m1 = new MemberBean("son", "손흥민");
MemberBean m1 = new MemberBean("jang", "장발장");
MemberBean m1 = new MemberBean("kim", "김덕배");
membersList.add(m1);
membersList.add(m2);
membersList.add(m3);
%>
<c:set var="membersList" value="<%=membersList %>" />
<c:forEach var="i" begin="0" end="2" step="1">
<tr>
<td>${membersList[i].id}</td>
<td>${membersList[i].name}</td>
</tr>
</c:forEach>
<%
String arr[]={"불고기 백반;", "오므라이스", "콩국수" };
request.setAttribute("MENU", arr)
%>
<h3>오늘의 점심 메뉴입니다.</h3>
<ul>
<c:forEach var="dish" items="${MENU}"> <!-- EL태그 활용해 request에 담긴 값 가져오기 -->
<li>${dish}</li>
</c:forEach>
</ul>
- items : 반복할 객체의 이름
('21.8.20)
<c:out value="${performDTO }" />
session.getAttribute("performDTO")를 대신해 값을 받아오는 걸 확인.
But, 만약 <c:set>으로 performDTO라는 변수를 새로 만들면, 그 변수로 덮어지는 것을 확인.
<!-- 예시 -->
<%
PerformDTO performDTO = (PerformDTO)session.getAttribute("performDTO");
%>
<c:set var="performDTO" value="<%=performDTO.getLocation() %>" />
<c:out value="${performDTO }" />
<!-- 이렇게 찍으면, location 값이 찍혀나온다. -->
- if문으로 값 비교할 때 실수.
<c:if test="${performDTO != null}">
<div class="test">performDTO는 null이 아니다!</div>
</c:if>
<!-- 처음에 작동하지 않았던 이유 -->
<c:if test="${performDTO} != null">
<!-- null을 {} 바깥에 쓰면 안됨. 안에 써줘야 함! -->
<div class="test">performDTO는 null이 아니다!</div>
</c:if>
=> 이처럼 { } 안에서 비교해줘야지, { } 밖에서 비교하면 안된다.
- 넘어온 객체가 자바빈(JavaBean)의 형태라면, 아래와 같이 값을 뽑아내면 된다.
<c:out value="${performDTO.perform_num }" />
<c:out value="${performDTO.perform_title }" />
<c:out value="${performDTO.location }" />
- <c:out>으로 보여주는 것 대신, 코드라인 위쪽에서 <c:set>으로 변수에 넣은 뒤 아래에선 EL표기법으로 보여주는게 훨씬 보기 깔끔하고 유지보수가 더 편할 듯 하다. 프론트, 백 업무분담하기도 편해보이고.
// 이전 코드라인
관람시간: <c:out value="${performDTO.running_time }" />분
(인터미션<c:out value="${performDTO.intermission }" /> 분)
// 바꾼 코드라인
<c:set var="runningTime" value="${performDTO.running_time }" />
<c:set var="intermission" value="${performDTO.intermission }" />
관람시간: ${runningTime}분 (인터미션 ${intermission}분)
'개발 > 웹개발' 카테고리의 다른 글
네이버 CLOVA OCR 테스트 중 - 파이썬 예제 (0) | 2024.12.03 |
---|---|
EL 표기법 (Expression Language) (0) | 2021.08.26 |
Servlet에서 session 사용하기 (0) | 2021.08.26 |