0. JSTL 기초 지식
⑴ JSTL => JSP 변수 이관 불가능 , JSP => JSTL 변수 이관 가능 함 ⑵ JSTL 썼을 때는 j-query 사용하지 않음 => ' $ ' 가 충돌함
1. JSTL 라이브러리 세팅
● pom.xml 에 jstl 라이브러리 세팅 (maven repository 에서 다운)
2. JSTL core 로드
- 코드 예시) ⑴ JSTL (core ): JSTL 엔진 - 필수 , JSTL (functions ) : JSTL 함수 모음 - 필요에 따라 사용 ⑵ prefix 는 본인이 원하는 대로 설정 ex: prefix="aaa" , prefix="abc"
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 사용법</title>
3. JSTL 사용법
3-1. 변수, 배열 출력
① JSTL 은 forEach를 이용하여 반복문을 사용함 ( var :값 , begin :시작값, end:종료값 ) - forEach 의 기본은 int로 활용해야하며 String으로는 안됨 : begin값과 end값은 int여야함 - 코드 예시)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 사용법</title>
</head>
<body>
<c:forEach var="no" begin="1" end="5">
${no }
</c:forEach>
</body>
</html>
출력 결과
② set 을 이용하여 JSP 에 있는 변수를 JSTL 변수값으로 변환 - 코드 예시 ) jsp변수 -> jstl변수
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="abc" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
//JSP 문법
String data[] = {"a1","a2","a3"};
int ea = data.length;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 사용법</title>
</head>
<body>
<abc:set var="jstl_ea" value="<%=ea %>"></abc:set>
데이터의 총 갯수 ${jstl_ea}<br><br>
</body>
</html>
③ 배열 출력 - 배열 출력 시 begin , end 사용금지 - string 배열을 사용하고 싶을 경우 클래스 배열을 활용하여 출력 또는 setAttribute를 이용해서 출력 - 배열 데이터 전용 속성 : items - 코드 예시 1 ) JSP에 있는 변수를 JSTL items로 담아서 처리 - 권장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="abc" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
//JSP 문법
String data[] = {"a1","a2","a3"};
int ea = data.length;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 사용법</title>
</head>
<body>
<ol>
<abc:forEach var="arr" items="<%=data%>">
<li>${arr}</li>
</abc:forEach>
</ol>
</body>
</html>
- 코드 예시 2 ) JSP에 setAttribute를 이용하여 JSTL 로 items에 값을 담아서 처리
<%
//JSP 문법
String data[] = {"a1","a2","a3"};
request.setAttribute("data_arr", data);
int ea = data.length;
%>
<body>
<ol>
<abc:forEach var="arr" items="${data_arr}">
<li>${arr}</li>
</abc:forEach>
</ol>
</body>
</html>
3-2. split 사용 ( 배열 데이터에 담긴 이미지 출력 시 )
1. split을 사용하기 위해서는 functions 엔진 을 로드해야함 2. split (데이터 값,'분리할 문자') ; => 원시배열로 구성함 3. 클래스 배열에 fn:split을 사용할 경우 원시배열로 바뀜 : get을 못쓰고 []로 출력해야함4. 사용자가 업로드한 파일명도 유지하면서 개발자가 변경한 파일명으로 출력을 할 경우 forEach에 items사용불가
<cp:set var="imgs" value="${fn:split(one_list.get(4),',')}"></cp:set>
<cp:set var="imgs2" value="${fn:split(one_list.get(5),',')}"></cp:set>
<cp:set var="ea" value="${fn:length(imgs) }"></cp:set><!-- 원시배열크기, 굳이 필요는 없음 -->
<cp:forEach var="no" begin="0" end="${ea-1}">
<!-- target="_blank" : 새로운 창으로 띄움 -->
첨부파일 :<a href="./upload/${imgs2[no]}" target="_blank">${imgs[no]}</a><br> <!-- 작성자가 올린 파일명 -->
</cp:forEach>