📝 Server 중 EL, 내장객체, JSTL 수업
#230321
JSP에서 자주 사용되거나 공통적으로 사용되는 Java코드를
표기법을 간단히 태그화하여 표준으로 제공하는 것.
(if, for, 배열/컬렉션 길이, 문자열 치환, 숫자 데이터 형식 변경,
데이터 파싱, scope 변수 선언 등)
1. https://tomcat.apache.org/download-taglibs.cgi 접속
2. 홈페이지 하단 Jar Files -> Impl, Spec, EL 다운로드
3. webapp/WEB-INF/lib 폴더에 추가하기
.JSP 파일 최상단에 추가하고자 하는 JSTL taglib을 추가
안넣으면 오류뜸
JSP파일 지시자
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
JSTL파일 지시자
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
변수를 선언하고 값을 초기화 하는 태그
(원하는 scope의 내장 객체에 값 세팅)
1) var : 변수명(setAttribute의 key값)
2) value : 대입될 값
3) scope : 내장 객체 범위 (기본값 : page)
jsp파일 예시
<%-- scriptlet 작성법 예시--%>
<% pageContext.setAttribute("num1", 10); %>
<!-- pageContext 객체를 갖는 page-->
<%-- scriptlet 작성법 --%>
<c:set var="num2" value="20"/>
<!--기본값 객체는 page -->
${ num1 } / ${num2}
<!-- 10 / 20 -->
<!-- request scope에 num2 세팅 -->
<c:set var="num2" value="300" scope ="request"/>
${num2}
<!-- 그냥 num2값이니까 page 우선순위로 20출력 -->
${requestScope.num2 }
<!-- requestScope.num2값이라고 찍어서 말했으니까 300출력 -->
<c:set var="temp" value="임시 값" scope="session"/>
>temp : ${temp}
<!-- 눈에보이는것처럼 temp:임시값 -->
결과값
c:set / setAttribute()로 추가된 값 제거
1) var : 삭제할 변수명 (key)
2) scope : 삭제할 내장 객체 범위( 기본값 : 모든 범위 )
jsp파일 예시
<c:remove var="temp"/>
temp 삭제 : ${temp} <br>
<!-- temp값 삭제하라고해서 공백임-->
<c:set var="test" value="page" scope="page" />
<c:set var="test" value="request" scope="request" />
<c:set var="test" value="session" scope="session" />
<c:set var="test" value="application" scope="application" />
<!-- 모든 범위 삭제 -->
<%--<c:remove var="test"/> --%>
<!-- request만 삭제하기 -->
<c:remove var="test" scope="request"/>
${pageScope.test} / ${requestScope.test}
/ ${sessionScope.test} / ${applicationScope.test}
<!-- request는 삭제해서 결과값부분에 공백임-->
결과
단독 if문 (else 없음)
1) test 속성값 작성은 무조건 EL 구문이여야만 한다.
2) test 속성값 "" 안에는 공백이 존재해서는 안된다.
jsp파일 예시
<%-- sciptlet 작성법 --%>
<% if (1 == 1) { %>
출력됩니다.
<% } %>
<%-- JSTL 작성법 --%>
<c:if test="${1==1}">
JSTL 작성법
</c:if>
결과
- 문자열 비교시 (==) 비교연산자 사용 가능
- 문자열임을 표기하는 리터럴 == ''(홑따옴표) / "" (쌍따옴표)
<!--위에 선언한 구문 -->
<c:set var="test" value="page" scope="page" />
<c:set var="test" value="request" scope="request" />
<c:set var="test" value="session" scope="session" />
<c:set var="test" value="application" scope="application" />
<c:if test='${ sessionScope.test == "session"}'>
<h4>sessionScope.test == 'session'</h4>
</c:if>
<!--test라는 변수가 sessionScope의 값이 session이면 <h4> 구문을 출력하세요 -->
<!-- 위 내용 결과는 True이기 때문에 출력됨-->
<c:if test='${ sessionScope.test != "session"}'>
<h4>sessionScope.test != 'session'</h4>
</c:if>
<!--test라는 변수가 sessionScope의 값이 session이 아니면 <h4> 구문을 출력하세요 -->
<!-- 위 내용 결과는 False이기 때문에 출력되지 않음-->
결과
c:choose 태그 : when, otherwise를 감싸는 태그
(현재 태그 내부에 if~else if~else 를 작성하겠다)c:when 태그 : if / else if 를 나타내는 태그
속성은 test 밖에 없음. (조건 작성 속성)c:otherwise 태그 : else를 나타내는 태그
아무런 속성도 존재하지 않음
jsp파일 예시
<c:set var="temp2" value="150" />
<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>
결과
일단 for + 추가 기능
1) var : 현재 반복 횟수에 해당하는 변수 (int i)
2) begin : 반복 시 var 시작 값
3) end : 반복이 종료될 var 값
4) step : 반복 시 마다 var의 증가 값 (기본값 1)
5) items : 반복 접근한 객체(배열, 컬렉션 객체)
6) varStatus : 현재 반복 상태와 관련된 정보를 제공하는 변수 선언
varStatus="변수명"
→
c:forEach 구문 내에서 "변수명"을 통해 원하는 값을 얻을 수 있다.
<c:forEach var="i" begin="1" end="6" step="1">
<!-- int i= 1; i<=6; i++ 와 같은 구문 -->
<h${i}>현재 i값 : ${i} </h${i}>
</c:forEach>
<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>
<td class="first"> ${n}번 게시글 입니다. </td>
</tr>
</c:when>
<%-- 마지막일 경우 --%>
<c:when test="${vs.last}">
<tr>
<th class="last">${n} </th>
<td class="last">${n}번 게시글 입니다. </td>
</tr>
</c:when>
<c:otherwise>
<tr>
<th> ${n} </th>
<td> ${n}번 게시글 입니다. </td>
</tr>
</c:otherwise>
</c:choose>
</c:forEach>
</table>
<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>