✔️ 3. 조건문 - if ( c:if 태그 )
- 단독 if문 (else 없음)
* 주의사항 *
1) test 속성 값 작성은 무조건 EL 구문이어야만 한다
2) test 속성값 "" 안에는 공백이 존재해서는 안된다
<%-- scriptlet 작성법 --%>
<% if(1 == 1){ %>
출력됩니다.
<% } %>
<%-- JSTL 작성법 --%>
<c:if test="${1 == 1}">
JSTL 작성법
</c:if>
<%-- session 범위에 세팅된 test의 값이 "session"인 경우 --%>
<%--
- 문자열 비교시 (==) 비교연산자 사용 가능
- 문자열임을 표기하는 리터럴 == ''(홑따옴표) / "" (쌍따옴표)
--%>
<c:if test='${ sessionScope.test == "session"}'>
<h4>sessionScope.test == 'session'</h4>
</c:if>
<c:if test='${ sessionScope.test != "session"}'>
<h4>sessionScope.test != 'session'</h4>
</c:if>
✔️ 4. 조건문 - if ~ else if ~ else ( c:choose, c:when, c:otherwise )
- c:choose : when, otherwise를 감싸는 태그
(현재 태그 내부에 if ~ else if ~ else를 작성하겠다)
- c:when : if/else if를 나타내는 태그
속성은 test 밖에 없음(조건 작성 속성)
- c:otherwise : else를 나타내는 태그
아무런 속성도 존재하지 않음
<c:set var="temp2" value="100" />
<c:choose>
<c:when test="${temp2 > 100}">
100보다 크다
</c:when>
<c:when test="${temp2 < 100}">
100보다 작다
</c:when>
<c:otherwise>
100과 같다
</c:otherwise>
</c:choose>
✔️ 5. 반복문 ( c:forEach 태그 )
- 일반 for + 추가 기능
- 속성
1) var : 현재 반복 횟수에 해당하는 변수 (int i)
2) begin : 반복 시 var 시작 값
3) end : 반복이 종료될 var 값
4) step : 반복 시 마다 var의 증가 값 (기본값 1)
5) items : 반복 접근한 객체(배열, 컬렉션 객체)
6) varStatus : 현재 반복 상태와 관련된 정보를 제공하는 변수 선언
varStatus="변수명"
-> c:forEach 구문 내에서 "변수명"을 통해 원하는 값을 얻을 수 있다
* varStatus에서 제공되는 값
- current : 현재 반복 횟수(현재 var 값)
또는 현재 반복 접근 중인 객체(컬렉션/배열 요소)4
- index : 현재 인덱스 값 반환 (0부터 시작)
- count : 현재 몇 바퀴인지 반복 횟수 반환 (1부터 시작)
- first : 첫 번째 반복이면 true, 아니면 false
- last : 마지막 반복이면 true, 아니면 false
✔️ 일반 for문 형식으로 사용
<c:forEach var="i" begin="1" end="6" step="1">
<h${i}> 현재 i 값 : ${i} <h${i}>
</c:forEach>
✔️ 일반 for문 + varStatus
<table border="1">
<c:forEach var="n" begin="1" end="10" varStatus="vs">
<c:choose>
<%-- choose 내부에는 무조건 JSP 주석만 작성 --%>
<%-- 첫번째 반복일 경우 --%>
<c:when test="${vs.first}">
<tr>
<th class="first"> ${n} </th>
<th class="first"> ${n}번 게시글 입니다 </th>
</tr>
</c:when>
<c:when test="${vs.last}">
<tr>
<th class="last"> ${n} </th>
<th class="last"> ${n}번 게시글 입니다 </th>
</tr>
</c:when>
<c:otherwise>
<tr>
<th> ${n} </th>
<th> ${n}번 게시글 입니다 </th>
</tr>
<c:otherwise>
</c:choose>
</table>
✔️ 향상된 for문 형식으로 사용
<form action="forEach" method="get">
<input type="checkbox" name="lang" value="java"> java <br>
<input type="checkbox" name="lang" value="sql"> sql <br>
<input type="checkbox" name="lang" value="jdbc"> jdbc <br>
<input type="checkbox" name="lang" value="html"> html <br>
<input type="checkbox" name="lang" value="css"> css <br>
<input type="checkbox" name="lang" value="javascript"> javascript <br>
<input type="checkbox" name="lang" value="jQuery"> jQuery <br>
<input type="checkbox" name="lang" value="servlet"> servlet <br>
<input type="checkbox" name="lang" value="jsp"> jsp <br>
<button>제출</button>
</form>
[servlet]
@WebServlet("/forEach")
public class ForEachServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List<Person> pList = new ArrayList<>();
pList.add(new Person("홍길동", 25, "서울시 중구"));
pList.add(new Person("고길동", 26, "서울시 강북구"));
pList.add(new Person("박길동", 45, "서울시 성동구"));
pList.add(new Person("강길동", 17, "서울시 서대문구"));
pList.add(new Person("김길동", 35, "서울시 성북구"));
req.setAttribute("pList", pList);
RequestDispatcher dispatcher =
req.getRequestDispatcher("WEB-INF/views/forEach.jsp");
dispatcher.forward(req, resp);
}
}
[JSP]
param.lang : 파라미터 중 lang의 값을 얻어와 출력
단, lang 이름의 파라미터가 여러개면 첫번째만 얻어온다
paramValues.lang : lang이라는 이름의 파라미터를 모두 얻어와 배열로 반환
${param.lang} / ${paramValues.lang[0]} / ${paramValues.lang[1]}
<c:choose>
<c:when test="${empty paramValues.lang}">
<h1 style="color:orangered"> 체크된 값이 없습니다 </h1>
</c:when>
<c:otherwise>
<ul>
<c:forEach var="chk" itesm="${paramValue.lang}" varStatus="vs">
<li>
index : ${vs.index} <br>
count : ${vs.count} <br>
current : ${vs.current} <br>
first : ${vs.first} <br>
last : ${vs.last}
</li>
</c:forEach>
</ul>
</c:otherwise>
</c:choose>
✔️ 객체 배열 / 컬렉션 반복 접근하기
[JSP]
<table>
<c:forEach var="person" items="${requestScope.pList}"
<tr>
<th>${person.name}</th>
<td>#{person.age}</td>
<td>#{person.address}</td>
</tr>
</c:forEach>
</table>