21.01.15
[JSTL]
- 개발자들은 이외에도 필요한 Custom Tag를 제작할 수 있다.
- Custom Tag중 자주 사용되고 유용한 것 만을 모아 만든 라이브러리가 바로 JSTL이다.
<JSTL 설치방법- WEB-INF/lib에 복사하고 build path>
1. <!-- value속성사용,EL태그 사이의 문자를 그대로 인식(언더바나 공백 등) -->
<c:set var="name1" value="test" scope="page"/>
<c:set var="name2" value="${sessionScope.myId}" scope="page"/>
<c:set var="name3" value="${sessionScope.myId}_${sessionScope.uId}" scope="page"/>
<!-- 태그몸체를 값으로 사용 -->
<c:set var="name4">test2</c:set>
<c:set var="name5">${sessionScope.myId}</c:set>
<c:set var="name6">${sessionScope.myId} ${sessionScope.uId}</c:set>
- EL태그로 사용할 변수를 생성한다.
- EL태그 사이의 문자는 그대로 인식한다(언더바, 공백 등).
- 사용법 :
<c:set var="변수명" value="값" scope="영역(생략가능)"/>
<c:set var="변수명" scope="영역(생략가능)">값</c:set>
2. <c:remove var="name3"/>
<c:remove var="name6"/>
- c:set태그로 만든 변수를 지운다.
- 사용법(단일태그로만 사용가능) :
<c:remove var="지울변수명" scope="영역"(생략가능)/>
3. <c:if test="true"><p>항상 실행 된다.</p></c:if>
<c:if test="false"><p>항상 실행 되지 않는다.</p></c:if>
<c:set var="myId">${sessionScope.myId}</c:set>
<c:if test="${myId=='admin'}" var="testVar">
myId값 :${myId}<br/>
testVar값 : ${testVar}<br/>
</c:if>
- 자바에서 if문과 비슷한 기능을 제공한다.
- test속성에서 조건을 통해 참|거짓 을 반환하고 참일 경우 내부블록을 실행.
- else가 없어서 하나하나 if문으로 처리해야한다.
- 비교연산을 실행할 때는 EL tag에서 실행한다(그냥 c tag에서는 연산안됨).
- 사용법 :
<c:if test="조건" var="결과를 저장할 변수명"(생략가능)></c:if>
4. <c:choose>
<c:when test="${param.num =='0'}"><h3>파라메터의 값은 0입니다.</h3></c:when>
<c:when test="${param.num =='1'}"><h3>파라메터의 값은 1입니다.</h3></c:when>
<c:when test="${param.num =='2'}"><h3>파라메터의 값은 2입니다.</h3></c:when>
<c:otherwise>
<h3>파라메터의 값은 0~2의 값이어야합니다.</h3>
</c:otherwise>
</c:choose>
- 자바에 switch구문과 비슷하고 else가 없는 c:if의 대안으로도 사용한다(if가 더 많이 사용되긴함).
- c:when태그의 test속성의 결과값이 true이면 내부블록을을 수행한다.
- c:when태그의 결과값이 모두 false일 경우 c:otherwise로 사용할 수 있다.
- 사용법 :
<c:choose>
<c:when test="조건">실행문</c:when>
<c:when test="조건">실행문</c:when>
<c:otherwise>실행문</c:otherwise>
</c:choose>
5. <h3>sports배열에서 모든값을 뽑아 내기</h3><!-- c:set으로 저장안해서 el태그안먹음-> 스크립틀릿 -->
<c:forEach var="i" items="<%= sports%>" varStatus="stat">
${stat.index} : ${i}<br/>
</c:forEach>
<h3>sports배열에서 2,3,4번째 값을 뽑아내기</h3>
<c:forEach var="i" items="<%= sports%>" varStatus="stat" begin="1" end="3" step="1">
${stat.index} : ${i}<br/>
</c:forEach>
<h3>map에 있는 내용을 모두 뽑아내기</h3>
<c:forEach var="item" items="<%=map%>">
<p>${item.key} : ${item.value}</p>
</c:forEach>
- 배열이나 컬렉션프레임워크(List, Map)에 저장된 값을 순차적으로 꺼낼 때 사용한다.
- <c:set>으로 변수를 저장하지 않으면 EL태그 사용이 안된다 -> scriptlet으로 사용해도 된다.
- 사용법 :
<c:forEach var="변수명" item="뽑아낼 배열이나 맵" varStatus="상태속성" begin="시작값" end="끝값" step="증가값"></c:forEach>
- stat.index : 특정 index의 값을 뽑아 낼 수 있다.
6. <c:set var="text">축구,야구,농구,배구</c:set>
<c:forTokens var="sports" items="${text}" delims=",">
${sports}
</c:forTokens>
<hr/>
<c:forTokens var="fruit" items="토마토^귤^딸기^오렌지^포도" delims="^">
${fruit}
</c:forTokens>
- 자바의 Tokenizer : 특정한 구분자로 되어있는 내용을 구분자를 기준으로 끊어준다.
- 자바의 Tokenizer와 같은 기능을 제공한다.
- items로 받은 속성을 delims에 구분자로 기준을 나눈뒤 var에 지정된 변수에 담는다.
- 특정한 구분자로 나눠준 후 배열에 들어간 내용을 반복문을 통해 보여주므로 for가 앞에 붙게 된것이다.
- 사용법 :
<c:forTokens var="담을 변수명" items="대상문자열" delims="구분자"/>
7. <!-- 같은 프로젝트에서 가져오는 내용-->
<c:import url="../index.jsp"></c:import>
<!-- 외부사이트에서 가져오는 내용 -->
<!-- https://www.youtube.com/results?search_query=jsp -->
<c:import url="https://www.youtube.com/results">
<c:param name="search_query" value="jsp"/>
</c:import>
- 특정URL의 결과를 읽어와 현재위치에 삽입 또는 EL태그에 저장도 가능.
- 동일 어플리케이션 뿐만 아니라 외부 자원도 읽어 올 수 있다.
- 외부사이트에서 가져올때는 파라미터를 구분해줘야 한다.(?뒤는 파라미터)
- 사용법 :
<c:import url="주소" var="변수명" scope="영역/>
8. <!-- 절대url -->
<c:url value="https://search.daum.net/search">
<c:param name="w" value="blog"/>
<c:param name="q" value="독도"/>
</c:url>
<ul><!-- 상대url -->
<li><c:url value="./ifTag.jsp"/></li><!-- 상대url-상대경로 -->
<li><c:url value="../ifTag.jsp"/></li><!-- 한단계위 -->
<!-- 상대url-절대경로 : 만약 c:url아니었으면 //11_JSTL/이 아니라/로 표기-->
<!-- http://localhost:8081/index.jsp 이런식으로 가버림 -->
<li><c:url value="/ifTag.jsp"/></li>
</ul>
<a href="../index.jsp">../index.jsp</a>
<a href="/index.jsp">/index.jsp</a>
<a href="<c:url value="/index.jsp"/>">c:url value="/ifTag.jsp"</a>
- url태그는 URL주소를 생성하는 기능을 한다.
- c:param태그를 이요해 파라미터를 추가 할 수도 있다.
- value속성은 절대 URL 또는 상대 URL을 입력할 수 있다.
- c:url태그 없이 /index.jsp로 지정해주면 절대경로로 인식을 해서
중간경로를 모르고 localhost:8081/index.jsp로 가버리기 때문에 404에러가 뜬다.
9. <%-- <c:redirect url="http://google.co.kr"/> --%>
<c:redirect url="https://www.youtube.com/results">
<c:param name="search_query" value="spring"/>
</c:redirect>
- 지정한 경로로 보낸다.
- 사용법 (절대경로, 상대경로 둘 다 가능) :
<c:redirect url="보낼주소"/>
10. <c:catch var="e(익셉션 변수)">
에러가 발생할 수 있는 부분
</c:catch>
<c:if test="${e != null}">
에러메시지 : ${e.message} <!—에러 메시지를 출력하는 코드 -->
</c:if>
- 자바의 try-catch처럼 쓰인다.
11. <c:out>
<c:out value="출력값"></c:out>
12 . functions tag
- <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 추가 해줘야한다.
- 사용법 (*이 많이 사용하는 태그) :
*${fn:length(obj)} : obj의 길이를 반환
${fn:toUpperCase(obj)} : obj를 모두 대문자로 변환
${fn:toLowerCase(obj)} : obj를 모두 소문자로 변환
*${fn:substring(str1,10,46)} : srt1의 내용을 10번 인덱스부터 45번인덱스까지 보여준다.
${fn:substringAfter(str1,str2)} : str1의 내용을 str2의 기준으로 뒤만 보여준다.
${fn:substringBefore(str1,str2)} : str1의 내용을 str2의 기준으로 앞만 보여준다.
*${fn:replace(str1,"/","^")} : str1내용에서 /를 ^로 바꿔준다
*${fn:indexOf(str1,str2)} : str1에서 str2이 몇번 인덱스부터 시작하는가?
${fn:startsWith(str1,str2)} : str1은 str2로 시작하는가?
${fn :endsWith(str1,str2)} : str1은 str2로 끝나는가?
*${fn : contains(str1,str2)} : str1에서 str2를 포함하고 있는가?
*${fn:containsIgnoreCase(str1,CAFE)} : str1에 CAFE를 포함하고 있는가?(대소문자 구분X)
${fn:split(str1,str2)} : str로 명시한 글자를 기준으로 str1을 분리해서 배열로 반환
${fn:join(array,str2)} : 배열로 저장된 문자열을 합치고 문자열 사이에는 str2가 붙는다
Reference
この問題について(21.01.15), 我々は、より多くの情報をここで見つけました https://velog.io/@mingmang17/21.01.15テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol