1. 변수(속성)
•
변수 선언 (c:set var="" value="" [scope=""])
◦
변수 선언하고 초기값을 대입해두는 기능을 제공
◦
해당 변수를 어떤 scope에 담아둘껀지 지정가능함 (생략시 기본적으로 pageScope에 담김)
→ 즉, 해당 scope에 setAttribute를 통해서 key-value 형태로 데이터를 담아놓는 거라고 생각하면됨
→ c:set을 통해 선언된 변수는 EL로 접근해서 사용 가능 (단, 스크립팅원소로는 접근 불가)
•
주의사항
◦
변수 타입을 별도로 지정하지 않음
◦
초기값은 반드시 지정해둬야됨 (즉, 선언과 동시에 초기화)
<c:set var="num1" value="10"/> <!-- page Scope에 담김 -->
<c:set var="num2" value="20" scope="request"/>
<%-- => request.setAttribute("num2", "20"); 와 같음 --%>
num1 변수값 : ${ num1 } <br>
num2 변수값 : ${ num2 } <br>
<c:set var="result" value="${ num1 + num2 }" scope="session"/>
result 변수값 : ${ result } <br><br>
<!-- scope를 지정해주면 속도가 더 빨라짐 -->
${ pageScope.num1 } <br>
${ requestScope.num2 } <br>
${ requestScope.result } <br> <%-- request Scope에 존재X => null(X), 빈칸(O) 출력 --%>
${ sessionScope.result } <br><br>
<c:set var="result" scope="request">
9999 <%-- value값 ! --%>
</c:set>
${ requestScope.result } <br>
JavaScript
복사
•
변수 삭제 (c:remove var="제거하고자하는변수명" [scope=""])
◦
해당 변수를 scope에서 찾아서 제거하는 태그
◦
scope 지정 생략 시 모든 scope에서 해당 변수 다 찾아서 제거함
→ 즉, 해당 scope에 .removeAttribute를 통해 제거하는 거라고 생각하면 됨
삭제 전 result : ${ result } <br><br> <!-- 30 -->
1) 특정 scope지정해서 삭제 <br>
<c:remove var="result" scope="request"/> <!-- 10 -->
request 삭제 후 result : ${ result } <br><br>
2) 모든 scope에서 삭제 <br>
<c:remove var="result"/>
모두 삭제 후 result : ${ result } <br><br> <!-- 빈칸 -->
<hr>
JavaScript
복사
•
변수(데이터) 출력(c:out value="출력하고자하는값" [default="기본값"] [escapeXml="true|false"])
◦
데이터를 출력하고자 할 때 사용하는 태그
<%-- 출력하고자 하는 값이 존재하지 않을 경우 default="기본값" 출력 --%>
<c:out value="${ result }"/> <br>
<c:out value="${ result }" default="없음"/> <br><br>
<%-- 사용 예시 : 1:1문의에서 답변이 달리지 않았을 경우 default문구 출력하도록 !! --%>
<c:set var="outTest" value="<b>출력테스트</b>"/>
<c:out value="${ outTest }"/><br> <!-- escapeXml 생략 시 기본값이 true == 태그 해석안됨 (문자열로 취급) -->
<c:out value="${ outTest }" escapeXml="false"/> <br>
<hr>
JavaScript
복사
2. 조건문 - if (c:if test="조건식")
•
JAVA의 단일 if문과 비슷한 역할을 하는 태그
•
조건식은 test 속성에 작성 (*** 단, EL형식으로 기술해야됨 **)
<%-- 기존 방식
<% if(num1 > num2) { %>
<% } %>
--%>
<c:if test="${ num1 > num2 }"> <!-- > 혹은 gt -->
<b>num1이 num2보다 큽니다.</b>
</c:if>
<c:if test="${ num1 <= num2 }"> <!-- <= 혹은 le -->
<b>num1이 num2보다 작거나 같습니다.</b>
</c:if>
<br>
<c:set var="str" value="안녕하세요"/>
<!-- 기존 방식 -->
<%--
<% if(str.equals("안녕하세요")){%>
<% } %>
--%>
<c:if test="${ str eq '안녕하세요' }">
<h4>Hello World</h4>
</c:if>
<c:if test="${ str ne '안녕하세요' }">
<h4>Bye World</h4>
</c:if>
<br>
JavaScript
복사
3. 조건문 - Choose (c:choose, c:when, c:otherwise)
•
JAVA의 if-else, if-else if문 또는 switch문과 비슷한 역할을 하는 태그
•
각 조건들을 c:choose의 하위요소로 c:when을 통해서 작성 (else 또는 default문 같은건 c:otherwise로!)
<%-- 기존방식
<% if(num1 == 20) { %>
<% }else if(num1 == 10){ %>
<% }else{ %>
<% } %>
--%>
<c:choose>
<c:when test="${ num1 eq 20 }">
<b>처음 뵙겠습니다.</b>
</c:when>
<c:when test="${ num1 eq 10 }">
<b>다시 봐서 반갑습니다.</b>
</c:when>
<c:otherwise>
<b>안녕하세요</b>
</c:otherwise>
</c:choose>
<!-- *주의 : choose 구역 안에 다른 텍스트 작성하면 오류남!! 주석 써도 오류남!! -->
JavaScript
복사
4. 반복문 - forEach
•
for loop문 -
(c:forEach var="변수명" begin="초기값" end="끝값" [step="반복시증가값"])
•
향상된 for문 -
(c:forEach var="변수명" items="순차적으로접근할객체(배열또는컬렉션)" [varStatus="현재접근된요소의 상태값을 보관할 변수명"])
<%-- 기존방식
<% for(int i=1; i<=10; i++){%>
<%} %>
--%>
<c:forEach var="i" begin="1" end="10" step="2">
반복확인 : ${ i } <br>
</c:forEach>
<c:forEach var="i" begin="1" end="6">
<h${i}>태그안에서도 적용 가능함</h${i}>
</c:forEach>
<c:set var="colors">
red,yellow,green,pink
</c:set>
colors값 : ${ colors } <br>
<ul>
<c:forEach var="c" items="${ colors }">
<li style="color:${c}">${ c }</li>
</c:forEach>
</ul>
<%
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("홍길동", 20, "남자"));
list.add(new Person("김말순", 30, "여자"));
list.add(new Person("김개똥", 40, "남자"));
request.setAttribute("pList", list);
// 여기까지의 코드는 이 페이지가 응답되기 전의 Servlet에서 할 코드
%>
<table border="1">
<thead>
<tr>
<th>번호</th>
<th>이름</th>
<th>나이</th>
<th>성별</th>
</tr>
</thead>
<tbody>
<%-- 기존 방식
<% if(pList.isEmpty()){ %>
<% }else{ %>
<% for(Person p : pList){ %>
<% } %>
<% } %>
--%>
<c:choose>
<c:when test="${ empty pList }">
<tr>
<td colspan="3">조회된 사람이 없습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach var="p" items="${ pList }" varStatus="status">
<tr>
<td>${ status.count }</td> <!-- index속성:0부터 시작 / count속성:1부터 시작 -->
<td>${ p.name }</td>
<td>${ p.age }</td>
<td>${ p.gender }</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</tbody>
</table>
<br>
JavaScript
복사
5. 반복문 - forTokens
•
(c:forTokens var="변수명" items="분리시키고자하는문자열" delims="구분자")
◦
구분자를 통해서 분리된 각각의 문자열에 순차적으로 접근하면서 반복 수행
◦
JAVA의 split("구분자") 또는 StringTokenizer와 비슷한 기능 처리
<c:set var="device" value="컴퓨터,핸드폰,TV.에이컨/냉장고.세탁기"/>
<ul>
<c:forTokens var="d" items="${ device }" delims=",./">
<li>${ d }</li>
</c:forTokens>
</ul>
JavaScript
복사
6. 쿼리스트링관련 - url, param
•
url 경로를 생성하고, 쿼리스트링을 정의할 수 있는 태그
c:url var="변수명" value="요청할 url"
c:param name="키값" value="전달할값"/
c:param name="키값" value="전달할값"/
/c:url
<a href="list.do?cPage=1&num=2">기존방식</a>
<c:url var="ttt" value="list.do">
<c:param name="cPage" value="1"/>
<c:param name="num" value="2"/>
</c:url>
<a href="${ ttt }">c:url 이용한 방식</a>
JavaScript
복사


