(JSP) 커스텀 태그

지식저장공간·2022년 10월 12일
0

Java

목록 보기
9/18
post-thumbnail

커스텀 태그

커스텀 태그란, JSP에서 기본적으로 제공하는 <jsp: > 태그 외 외부 라이브러리를 가져오고, 지시자를 통해 외부 라이브러리를 지정해준다.

JSTL

대표적인 커스텀 태그 중 한가지.
JSTL library를 다운 받고, WEB-INF/lib에 넣어 IDE가 라이브러리를 가져올 수 있게 세팅한다.

Core Tag

JSTL Core
: 변수와 url, 조건문, 반복문 등의 로직과 관련된 JSTL 문법을 제공한다.
: <%@ taglib uri="http://java.sun.com/jsp/jstl/core> 를 통해 core library를 인식할 수 있게 작성해 주고, <%@ prefix="c">를 통해 core에 대한 명칭도 지정해줄 수 있다.

Formatting Tag

JSTL Format
: 메시지 형식이나 숫자, 날짜 형식과 관련된 포맷 방식 제공
: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

Function Tag

JSTL Function
: trim, substring과 같은 여러 문자열 처리 함수 제공
: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

Core Tag 예시

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

1.<c : set> : 변수를 선언할 때 사용한다.
<c : set var="num" value="1"/> : 변수 num에 값 1을 선언한다.
<c : set var="str" value="JSP" scope="request"/> : request영역에 변수 str선언한다.

2.<c : remove> : 선언된 변수를 제거할 때 사용한다.
<c : remove var="num"/> : 이전에 선언된 변수 num을 제거한다.
<c : remove var="str" scope="request"/> : request영역에 존재하는 str을 제거한다.

<c: set> 태그와 <c: remove>태그의 차이점

<c:set> 태그는 영역설정 default값으로 page로 설정되어있지만,
<c : remove>태그는 영역설정이 default값으로 모든영역으로 설정되어있다.
따라서, <c : remove> 태그에 영역설정을 하지 않으면 지정한 변수 모두가 제거되기 때문에 영역 설정이 반드시 필요하다.

3.<c : if> : 조건문이 필요할 경우 사용하는 태그
<c : if test="조건">
<c : if test="${Integer.ParseInt(num1) > Integer.parseInt(num2)}">
실행문1 : num1 > num2일 경우 실행문1이 실행된다.
</c : if>

<c : if> 태그를 이용한 문자열 비교
<% 스크립틀릿 %>을 이용한 '=='문자열 비교는 문가능하지만 EL은 가능하다.

<c : if test="${str1 == str2}"> : Java에서 문자열 비교시 '=='비교는 불가능 하지만, EL태그를 이용한 '=='문자열 비교는 가능하다.
<c : if test="${str1 eq ste2}"> : str1 equal str2
<c : if test="${str1 ne ste2}"> : str1 not equal str2

<c: if>태그와 <c: if>태그의 else

<c : if test="num1>num2"> 실행문1 </c:if>
<c : if test="num1<num2"> 실행문2 </c:if>
: <c : if>태그는 else가 존재하지 않기 때문에 else조건문을 사용해야 할 경우 반대조건은 <c : if>태그로 작성하여 반대 실행문까지 작성해야한다.

4.<c : choose> <c : when> <c : otherwiese> : 조건문

<c : choose>
<c: when test="조건1"> 실행문1
<c: when test="조건2"> 실행문2
<c : otherwiese> 실행문 3
: 조건1과 조건2가 동시에 충족되지 않을경우 실행된다.
</c : choose>

5.<c: forEach> : 반복문

<c : forEach var="i" begin="1" end="10"> ${i} </c:forEach>
: 변수 i를 선언하고 변수 i가 1~10까지 1씩 증가하면서 10번 반복한다.
: 1,2,3,4,5,6,7,8,9,10 출력

<c: forEach var="d" begin="2" end="10" step="2"> ${d} </c:forEach>
: 변수 d를 선언하고 변수 d가 2~10까지 2씩 증가, 즉, 5번 반복한다.
: 2,4,6,8,10 출력.

Java : for(int i =10 ; i >= 1 ; i--) { } 비교

<c: forEach>태그는 역순으로 실행하는것이 불가능하다.

<c: forEach var="r" begin="10" end="1" step="-1">
: 작성시 step >= 0 에러가 발생.
역순으로 출력하고 싶은경우 ${max -i}같은 형식으로 작성해야한다.

<c: forEach var="r" begin="1" end="10" step="1"> ${11-r} </c:forEach>
:10~1까지 역순으로 출력가능하게 한다. 단, 이것은 숫자형식을 출력할 경우에만 사용한다.

6.<c : varStatus>
: 변수에 대한 다양한 정보를 제공하는 태그
<c : var="i" begin="1" end="5" varStatus="vs">
${vs.fisrt} : 변수 i가 반복문에서 첫 시작일 경우 true반환 // not: false
${vs.last} : 변수 i가 마지막일 경우 true반환 // not : flase
${vs.index} : 변수 i가 가지고 있는 index반환
${vs.count} : 변수 i 를 통해 반복문이 몇번 반복되었는지 count
${vs.current} : 변수 i의 현재값 반환

7.<c : forTokens>
: 배열에 존재하는 값들을 구분할때 사용하며, 전부 구분이 될때 까지 반복한다.
<c : forTokens items="배열" var="current값이 들어갈 변수명" delis="구분자">
<c : set var="family" value="엄마,아빠,누나,나,동생"/>
<c : forTokens items="family" delis="," var="f">
${f}
</c : forTokens>
: 배열 family의 value로 가족 구성원을 담고 구분자로 ","를 사용했다.
배열 구분자에 의해 변수 f에 각각 저장하게 되고, 반복할때 마다 ${f}를 통해 해당 값 출력
print : 엄마아빠누나나동생

8.<c : url> : url관련 태그
<c : url value="xxx.jsp" var="jsp">
: jsp변수에 xxx.jsp로 이동할 수 있는 값을 설정.

<c : url value="초콜릿" name="food"/> : parameter 'food' 에 초콜릿을 담는다.
<c : url value="콜라" name="beverage"/> : parameter 'beverage' 에 콜라를 담는다.
<c : url value="빅맥" name="hamburger"/> : parameter 'hamburger' 에 빅맥을 담는다.
</c : url>

<a href="${jsp}"> jsp로 이동 </a>
: A태그 "jsp로 이동"을 클릭할 시 xxx.jsp로 이동한다.

Format Tag 예시

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt%>

1. <fmt : formatNumber value="1.2345"/> : 1.235 ->소수점4번째자리에서 반올림한다.
2. <fmt : formatNumber value="1.2345" pattern="#,##"/> : 1.23
3. <fmt : formatNumber value="1.2" pattern="#,00"/> : 1.20
4. <fmt : formatNumber value="0.06" type="percent"/> : 6%
5. <fmt : formatNumber value="1000000" type="currency"/> : #1,000,000
6. <fmt : formatNumber value="1000" type="currency" currencySymbol="$"/> : $1,000

Function Tag 예시

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c : set var="eng" value="I'm still hungry"/>

1.<fn : toUpperCase(eng)/> : I'M STILL HUNGRY
2.<fn : toLowerCase(eng)/> : i'm still hungry
3.<fn : indexOf(eng, "still") : 4 --> 문자열eng에서 still에 대한 인덱스 반환
4.<fn : replace(eng, "still", "not")/> : I'm not hugry
--> 문자열 eng에서 "still"을 "not"으로 대체한다.
5.<fn : length(eng)/> : 16 --> 문자열 eng에 대한 길이를 반환.

profile
발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

0개의 댓글