[JSP] JSTL 정의 / Core 태그 / <c:forEach> / Map 접근
by mini_min[JSP] JSTL 정의 / Core 태그 / <c:forEach> / Map 접근
✔️ JSTL 정의
: JSP 에서는 사용자가 태그를 정의해서 사용하는 것이 가능하며, 이런 사용자 정의 태그를 커스텀 태그라한다. 이들 중 자주 사용하는 것을 표준으로 만들어 놓은 것이 JSTL 이다.
👩💻 JSTL 의 핵심은 JSP 의 공통적인 핵심 기능을 캡슐화 한 태그 모음이란 것이다.
👩💻 반복, 조건문, XML 문서 조작을 위한 태그, 국제화 태그 및 SQL 태그 같은 일반적인 구조 작업을 지원한다.
👩💻 모든 태그는 시작과 끝이 한 쌍이어야한다.
💖 EL 을 사용해 표현한다.
📓 필요한 것
다음의 라이브러리가 필요하다.
- jstl-1.2.jar
- jstl-1.2.jar의 maven dependency
- taglib 지시어 (JSTL 사용을 위한 라이브러리를 지정한다)
(사용자 정의 태그, JSTL 라이브러리 위치를 식별하고 JSP 에서 사용자 정의 태그 및 JSTL 을 식별하기 위한 방법을 선언한다.)
(uri 는 태그 라이브러리 URI 또는 디스크립터 파일의 URI)
(prefix 는 사용자 정의 태그 접두사이다)
📓 JSTL 태그 종류
: 코어, 포메팅, 함수 태그 자주 사용
✔️ Core 태그
- 일반 프로그램 언어에서 제공하는 변수선언, 조건, 제어, 반복문 등의 기능을 제공한다.
- Core 태그를 위해 아래와 같은 tablib 지시어 설정
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
👩💻 <c:if> 태그
: c:if 태그는 조건이 참인 경우에 실행하며, else 구문은 없다.
- test : 실행 여부 결정하는 조건식
- var : 테스트 조건 결과를 저장할 변수, 불린형
- scope : 조건 결과를 저장할 변수의 scope
<form action="ex11.jsp" method="post">
<input type="text" name="num" required="required" placeholder="숫자" pattern="\d+">
<button type="submit">확인</button>
</form>
<c:if test="${not empty param.num}">
<p>
${param.num } :
<c:if test="${param.num % 2 == 0 }">
짝수
</c:if>
<c:if test="${param.num % 2 == 1 }">
홀수
</c:if>
</p>
</c:if>
👩💻 <c:choose> / <c:when> / <c:otherwise> 태그
: 여러 조건 중 하나의 조건을 선택하여 실행한다.
: when 조건에 만족하는 것이 없으면, otherwise 태그 본문을 실행한다.
<form action="ex12.jsp" method="post">
<p>
<input type="text" name="num" placeholder="숫자" required="required" pattern="\d+">
<button type="submit">확인</button>
</p>
</form>
<c:if test="${not empty param.num }">
<p>
${param.num } :
<c:choose>
<c:when test="${param.num%3==0 && param.num%4==0 }">
3과 4의 배수
</c:when>
<c:when test="${param.num%3==0}">
3의 배수
</c:when>
<c:when test="${param.num%4==0}">
4의 배수
</c:when>
<c:otherwise>
3 또는 4의 배수가 아님
</c:otherwise>
</c:choose>
</p>
</c:if>
👩💻 <c:forEach> 태그
: 고정된 횟수 또는 컬렉션에 대해 중첩 본문 콘텐츠를 반복할 때 사용되는 반복 태그이다.
- var : 사용할 변수
- items : Collection 객체 (list 나 map 등), begin 속성과 end 속성이 없을 때 필수다.
- varStaus : 반복 상태를 알 수 있는 변수
- begin : 반복을 시작할 index, 정의하지 않으면 0
- end : 반복을 종료할 index,
- step : 반복할 때마다 건너 뛸 index 개수
🔒 예제 (구구단)
<form action="ex13.jsp" method="post">
<input type="text" name="num" placeholder="단" required="required" pattern="[1-9]{1}">
<button type="submit">확인</button>
</form>
<c:if test="${not empty param.num }">
<p> ** ${param.num } 단 ** </p>
<!-- step : 증가분. 1이면 생략 가능 -->
<c:forEach var="n" begin="1" end="9" step="1">
${param.num } * ${n } = ${param.num * n } <br>
</c:forEach>
</c:if>
🔒 예제 (구구단 자동 출력)
<p> ** 구구단 ** </p>
<!-- step : 증가분. 1이면 생략 가능 -->
<c:forEach var="n" begin="2" end="9" step="1">
<c:forEach var="dan" begin="1" end="9" step="1">
${n } * ${dan } = ${n * dan } <br>
</c:forEach>
<br>
</c:forEach>
👩💻 <c:forEach> List (Collection) 반복 (1)
ex15 파일에서 List Collection 객체를 만들어 저장하고 포워딩 해준다. (ex15_ok.jsp)
List<String> list = new ArrayList<>();
list.add("서울");
list.add("부산");
list.add("대구");
request.setAttribute("list", list);
request.setAttribute("subject", "자바,스프링,HTML,CSS,서블릿");
<jsp:forward page="ex15_ok.jsp"/>
- ex15_ok.jsp 에서 forEach 로 객체 반복하기
: forEach 에서 items 를 주면 , Collection 객체 를 받을 수 있다. (변수 a에 저장함)
<c:forEach var="a" items="${list}">
<p>${a }</p> <!-- 서울 부산 대구 그대로 출력됨 -->
</c:forEach>
+ forEach 에서 메소드 사용하기 (split)
<c:forEach var="a" items="${subject.split(',')}">
<p>${a }</p>
</c:forEach>
<!-- split 리턴 : 배열임 -->
👩💻 <c:forEach> List (Collection) 반복 (2)
: User 객체를 생성해서, List 에 저장하고 포워딩
List<User> list = new ArrayList<>();
list.add(new User("홍길동", 20, "010-1111-1111", "자바"));
list.add(new User("너너너", 21, "010-1111-2222", "HTML"));
list.add(new User("도도도", 21, "010-1111-3333", "CSS"));
list.add(new User("가가가", 20, "010-1111-1000", "servlet"));
list.add(new User("후후후", 23, "010-1111-2000", "oracle"));
request.setAttribute("list", list);
<jsp:forward page="ex16_ok.jsp"></jsp:forward>
- 이번에는 하나의 값이 아니라, 여러 값이 저장되어있을 때 출력하기다.
items 로 컬렉션 객체를 받고, 변수 vo 에 저장해서 User 객체에 저장된 이름으로 호출이 가능하다.
<c:forEach var="vo" items="${list }">
<p> ${vo.name } | ${vo.age } | ${vo.tel } | ${vo.subject } </p>
</c:forEach>
👩💻 반복 상태 확인하기 : varStatus 속성
: index:0부터 순서, count:1부터 순서, first:처음여부, last:마지막여부
<c:forEach var="vo" items="${list }" varStatus="status">
<p>
${vo.name } | ${vo.age } | ${vo.tel } | ${vo.subject } |
${status.index } | ${status.count } | ${status.first } | ${status.last }
</p>
</c:forEach>
✔️ Map 접근
: 일반 맵 객체 1개 / List 안에 Map 이 들어간 객체가 있다.
Map<String, Object> m = new HashMap<>();
m.put("name", "이이이");
m.put("age", 20);
m.put("subject", "servlet");
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> a;
a = new HashMap<>();
a.put("name", "가나다");
a.put("city", "서울");
list.add(a);
a = new HashMap<>();
a.put("name", "누누누");
a.put("city", "경기");
list.add(a);
a = new HashMap<>();
a.put("name", "마마마");
a.put("city", "인천");
list.add(a);
request.setAttribute("map", m);
request.setAttribute("list", list);
- EL 에서 Map 접근하기
<p>${map.name } | ${map.age } | ${map.subject } </p>
- JSTL 에서 MAP 접근하기
: 출력되는 데이터 순서 조작 못함. map 은 어떻게 나올지 모름
: key 와 value 값으로 접근 가능하다.
<c:forEach var="m1" items="${map }">
<p>${m1.key } : ${m1.value }</p>
</c:forEach>
- JSTL 에서 LIST의 MAP 접근하기
<c:forEach var="m2" items="${list }">
<p>${m2.name } | ${m2.city } </p>
</c:forEach>
'JSP' 카테고리의 다른 글
[JSP] JSTL - <c:import> / <c:forTokens> (0) | 2022.10.04 |
---|---|
[JSP] JSTL - <c:out> / <c:set> / <c:url> / <c:param> (0) | 2022.10.04 |
[JSP] EL 태그 정의 / EL 사용 이유 / 내장객체 / 연산 (0) | 2022.10.04 |
[JSP] Paging 가운데 정렬 (구글 페이지네이션) (0) | 2022.10.03 |
[JSP] Paging 처리 (Myutil) (1) | 2022.10.03 |
블로그의 정보
개발자 미니민의 개발로그
mini_min