1. JSTL만 단독으로 사용하는 경우는 없음. 주로 do에서 호출받아서 사용 (Model, ModelandView) 2. 조건문, 반복문 외에는 태그와 태그 사이에 값을 넣지 않는다. 3. out 태그 - out.print와 같은 형태의 출력 태그 4. set 태그 - setattribue와 동일한 형태의 태그 - jsp에 있는 갑을 jstl로 반환시 set을 이용하여 변환 - 속성 : scope : ①"session" => session을 생성 또는 로드, 초기화 (충돌날 수 있어 주로 초기화할때만 씀) ②"request" => value값을 var 변수에 값을 저장하는 형태 (굳이 쓰지는 않음)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- jstl 엔진 -->
<%@taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- jstl 각종 함수 -->
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!-- jstl databse 관련 사항 -->
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<!-- JSTL만 단독으로 사용하는 경우는 없음. 주로 do에서 호출받아서 사용 (Model, ModelandView)-->
<%
String user="홍길동";
HttpSession hs = request.getSession();
hs.setAttribute("ssdata", "15881004");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 문법 사용1</title>
</head>
<body>
</body>
<!-- out 태그는 out.print와 같은 형태의 출력 태그 -->
<cr:out value="값 출력"/>
<!-- set 태그는 setattribue와 동일한 형태의 태그 -->
<cr:set var="a" value="에이핑크"/>${a}
<br><br>
<!-- jsp에 있는 갑을 jstl로 반환시 set을 이용하여 변환 -->
<cr:set var="b" value="<%=user %>"/>${b}
<br><br>
<!-- scope : session을 활성화 시 session을 생성 또는 로드도 활용할 수 있음 -->
<cr:set var="c" value="jstl문법" scope="session"/>${c}
세션 초기화 전 데이터 : ${ssdata}<br>
<!--
기존 세션을 초기화 또는 삭제하고 싶을 경우 다음과 같이 사용가능
!! 세션 초기화 시 var 속성을 세션명과 동일하게 입력하면 됨
-->
<cr:set var="ssdata" value="" scope="session"/>
세션 초기화 후 데이터 : ${ssdata}<br><br><br>
<!-- scope : request value값을 var 변수에 값을 저장하는 형태-->
<cr:set var="zz" value="aaa" scope="request"/>
${zz}<br><br>
<% String aname="테스트"; %>
<cr:set var="kk" scope="request"><%=aname %></cr:set>
${kk }
</html>
3. JSTL 문법 2 (조건문)
1. if 문 기본
- test 에 if문의 조건식을 입력 - 조건이 맞으면 var에 true, 틀리면 false로 나타남 - 주로 set 과 함께 사용
<body>
<!-- if문 선언 및 test가 조건식을 사용 var:true, false-->
<cr:set var="no" value="20"/>
<cr:if test="${no<100 }">
해당 숫자는 100이하의 숫자 입니다
</cr:if>
<cr:if test="${no>100 }">
해당 숫자는 100이상의 숫자 입니다
</cr:if>
<cr:if test="${no==100 }">
해당 숫자는 100입니다.
</cr:if>
</body>
2. choose문을 활용한 when 조건식
- choose : 조건식의 그룹 태그
<cr:set var="no2" value="C"/>
<cr:choose>
<cr:when test="${no2=='Y'}">
약관에 동의 하셨습니다.
</cr:when>
<%--조건문2 --%>
<cr:when test="${no2 eq'N'}">
약관에 미동의 하셨습니다.
</cr:when>
<%--조건문3 --%>
<cr:when test="${no2 ne'Y'||no2 ne 'N'}">
약관 동의 없이 페이지 이동
</cr:when>
<%--해당 조건 외에 실행 되는 태그 문법 --%>
<cr:otherwise>
해당 값은 인식하지 못했습니다.
</cr:otherwise>
</cr:choose>
4. JSTL 문법 3 (반복문 - forEach)
1. forEach 문 - 원시배열, 클래스 배열 - items : 모든 배열값을 처리할 때 사용하는 속성값 - begin(시작값), end(종료값) - jsp 안에 jstl 변수 절대 못씀 !!
<%
//jstl에 반복문 처리 => 배열 형태로 출력(원시배열, 클래스배열)
//jstl에서는 권고사항 주로 클래스 배열(ArrayList, LinkedList, Map)
String data[] = new String []{"hong","kim","park","kang","jang"};
request.setAttribute("data", data);
ArrayList<String> al = new ArrayList<String>();
al.add("데스트1");
al.add("데스트2");
al.add("데스트3");
al.add("데스트4");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL문법사용2(반복문-forEach)</title>
</head>
<body>
<!-- items : 모든 배열값을 처리할 때 사용하는 속성값 -->
<!-- jsp변수를 items 속성에서 받은 후 var로 출력 -->
<!-- begin(시작값), end(종료값) -->
<ol>
<cr:forEach var="z" items="<%=data %>" begin="2" end="4">
<li>${z}</li>
</cr:forEach>
</ol>
<!-- jsp Attribute로 생성된 이름을 items로 받은 후 var로 출력 -->
<ol>
<cr:forEach var="z" items="${data}">
<li>${z}</li>
</cr:forEach>
</ol>
<ul>
<cr:forEach var="z" items="<%=al%>">
<li>${z}</li>
</cr:forEach>
</ul>
</body>
</html>
2. 반복문 속성 값 출력
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%
ArrayList<String> al = new ArrayList<String>();
al.add("홍길동1");
al.add("홍길동2");
al.add("홍길동3");
al.add("홍길동4");
al.add("홍길동5");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL문법사용3(반복문-forEach)</title>
</head>
<body>
<!-- varStatus : 배열 번호, 순서, 갯수... 속성값
index : 배열 노드 번호
first : true(첫번째 데이터), false(그 외 데이터)
last : true(마지막 데이터), false(그 외 데이터)
count : 데이터 +1씩 카운팅
-->
<cr:forEach var="z" items="<%=al %>" varStatus="n">
첫번 쨰 데이터 : ${n.first}
번호 : ${n.index}
데이터 값 : ${z }
총 데이터 갯수 : ${n.count}
<br>
</cr:forEach>
</body>
</html>
5. JSTL 문법 4 (반복문 + 조건문)
-> data 배열 값 중 park 이라는 사용자만 출력
<%
//jstl에 반복문 처리 => 배열 형태로 출력(원시배열, 클래스배열)
//jstl에서는 권고사항 주로 클래스 배열(ArrayList, LinkedList, Map)
String data[] = new String []{"hong","kim","park","kang","jang"};
request.setAttribute("data", data);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL문법사용2(반복문-forEach)</title>
</head>
<body>
<!-- data 배열 값 중 park 이라는 사용자만 출력 -->
<div>
<cr:forEach var="z" items="${data}">
<cr:if test="${z=='park'}">${z}</cr:if>
</cr:forEach>
</div>
</body>
</html>
6. JSTL 문법 5 (2차배열~다차원배열)
1-0. 클래스 배열 출력방법 - 배열 값
<%
ArrayList<ArrayList<String>> al2 = new ArrayList<ArrayList<String>>();
ArrayList<String> data = new ArrayList<String>();
data.add("김남준");
data.add("김석진");
data.add("민윤기");
data.add("정호석");
data.add("박지민");
data.add("김태형");
al2.add(data);
ArrayList<String> data2 = new ArrayList<String>();
data2.add("A");
data2.add("B");
data2.add("O");
data2.add("A");
data2.add("AB");
data2.add("O");
al2.add(data2);
%>