이전에 Core/Formatting에 대해서 알아보았습니다. 근데 SQL/XMl을 스킵하고 바로 JSTL Function 하는 이유는 SQL/XML 태그는 사용빈도가 적고 오히려 Core/Formatting/Function이 주로 쓰이기 때문입니다.
일단 이전 게시글을들은 아래의 링크에서 확인 가능합니다.
2020/08/26 - [개발 창고/웹 개발] - [JSTL] Core태그
2020/08/27 - [개발 창고/웹 개발] - [JSTL] Formatting태그(1)
2020/08/27 - [개발 창고/웹 개발] - [JSTL] Formatting태그(2)
JSTL 분류
- Core 태그
- Formatting 태그
- SQL 태그
- XML 태그
- JSTL Function
JSTL Function
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
JSTL function을 사용하기 위해서는 JSP 상단에 다음과 같이 선언을 해주면 function을 사용할 수 있습니다.
contains
boolean contains(java.lang.String, java.lang.String)
: 대상 텍스트에 해당 키워드가 포함되어있는지 여부
<c:set var="target" value="여기는 로이의 개발공장입니다. This is Roy's Factory"/>
<p>한글 체크 ('로이의 개발공장') : ${fn:contains(target, '로이의 개발공장')}</p>
<p>영문 체크 ('Roy's Factory') : ${fn:contains(target, 'Roy\'s Factory')}</p>
<!-- 참고로 특수문자(')는 역슬래시(\)를 써주어야 조건으로 인식합니다. -->
<p>IF문의 사용 예 :
<c:if test="${fn:contains(target, 'factory')}">'factory'를 포함합니다.</c:if>
<c:if test="${fn:contains(target, 'Factory')}">'Factory'를 포함합니다.</c:if>
</p>
target이라는 변수에 포함된 내용을 contains를 활용하여 문자 체크를 하면 다음과 같이 체크 가능합니다.
containsIgnoreCase
boolean containsIgnoreCase(java.lang.String, java.lang.String)
contains에서는 Factory로 정확하게 조건 검색이 가능하지만 factory라고 대소문자 구문 없이는 false를 반환했음을 알 수 있습니다. 하지만 containsIgnoreCase를 활용하면 대소문자 구분 없이 결과가 true를 반환하게 됩니다
<c:set var="target" value="여기는 로이의 개발공장입니다. This is Roy's Factory"/>
<p>한글 체크 ('로이의 개발공장') : ${fn:containsIgnoreCase(target, '로이의 개발공장')}</p>
<p>영문 체크 ('Roy's Factory') : ${fn:containsIgnoreCase(target, 'Roy\'s Factory')}</p>
<!-- 참고로 특수문자(')는 역슬래시(\)를 써주어야 조건으로 인식합니다. -->
<p>IF문의 사용 예 :
<c:if test="${fn:containsIgnoreCase(target, 'factory')}">'factory'를 포함합니다.</c:if>
<c:if test="${fn:containsIgnoreCase(target, 'Factory')}">'Factory'를 포함합니다.</c:if>
</p>
startsWith
boolean startsWith(java.lang.String, java.lang.String)
startsWith는 target텍스트의 첫 부분이 해당 키워드로 끝나는지 여부를 체크합니다.
<c:set var="target" value="여기는 로이의 개발공장입니다. This is Roy's Factory"/>
<p>한글 체크 ('여기는') : ${fn:startsWith(target, '여기는')}</p>
<p>영문 체크 ('This is') : ${fn:startsWith(target, 'This is')}</p>
<p>IF문의 사용 예 :
<c:if test="${fn:startsWith(target, '여기는')}">한글이 먼저입니다.</c:if>
<c:if test="${fn:startsWith(target, 'This is')}">영문이 먼저입니다.</c:if>
</p>
endsWith
boolean endsWith(java.lang.String, java.lang.String)
endsWith는 target텍스트의 끝 부분이 해당 키워드로 끝나는지 여부를 체크합니다.
<c:set var="target" value="여기는 로이의 개발공장입니다. This is Roy's Factory"/>
<p>한글 체크 ('로이의 개발공장') : ${fn:endsWith(target, '로이의 개발공장')}</p>
<p>영문 체크 ('Roy's Factory') : ${fn:endsWith(target, 'Roy\'s Factory')}</p>
<!-- 참고로 특수문자(')는 역슬래시(\)를 써주어야 조건으로 인식합니다. -->
<p>IF문의 사용 예 :
<c:if test="${fn:endsWith(target, 'factory')}">'factory'를 포함합니다.</c:if>
<c:if test="${fn:endsWith(target, 'Factory')}">'Factory'를 포함합니다.</c:if>
</p>
escapeXml
boolean escapeXml(java.lang.String)
XML 마크업 태그가 HTML에 적용되지 않고 그대로 표현되도록 표현됩니다.
<c:set var="target" value="여기는 <u>로이</u>의 개발공장입니다. This is Roy's Factory"/>
<p>XML태그 제거 전: ${target}</p>
<p>XML태그 제거 후: ${fn:escapeXml(target)}</p>
밑줄 태그인 <u> 태그가 excapeXml 전에는 적용되고 후에는 그대로 <u>로 표현됨을 알 수 있습니다. 이는 쇼핑몰 같은 경우 상품 상세의 내용의 태그가 쇼핑몰에 적용되는것을 막을 때 많이 사용됩니다.
indexOf
int indexOf(java.lang.String, java.lang.String)
indexOf는 target 텍스트에서 해당 키워드가 어디에 위치하는지에 대한 INDEX값을 반환합니다.
<c:set var="target" value="여기는 로이의 개발공장입니다. This is Roy's Factory"/>
<p>없는 경우: ${fn:indexOf(target, '저기는')}</p>
<p>맨 처음: ${fn:indexOf(target, '여기는')}</p>
<p>중간: ${fn:indexOf(target, '로이의')}</p>
join
String join(java.lang.String[], java.lang.String)
String 배열을 한개의 String으로 Join 시켜주는 기능입니다. 첫 번째 변수는 Join 할 String Array이고 , 두 번째 변수는 Join시 중간에 삽입할 문자열입니다. 만약 ""공란으로 입력 시 중간 문자열 없이 이어 붙여지게 됩니다.
<%
// {"가나다", "라마바사", "아자차"}로 구성된 String 배열을 request에 담아서 보내줍니다.
String[] target = new String[]{"가나다", "라마바사", "아자차"};
request.setAttribute("target", target);
%>
<!-- 전달된 String Array를 (,) 기준으로 Join해줍니다. -->
<p>JOIN: ${fn:join(target, ',')}</p>
이는 뒤에 나오는 split와 주로 같이 쓰이는 경우가 많습니다.
split
String[] split(java.lang.String, java.lang.String)
String문자열을 지시자 기준으로 분리하여 String Array로 반환합니다. 첫 번째 변수가 분리할 String문자열이고, 두 번째 변수가 분리에 사용될 지시다 문자열입니다.
<c:set var="target" value="나는 여기서 분리를 당할겁니다."/>
<c:forEach items="${fn:split(target, ' ')}" var="value">
<p>${value}</p>
</c:forEach>
다음은 target의 문자열을 공란(' ')을 기준으로 split하여 core태그의 forEach문 활용하여 한 줄씩 표현한 예입니다.
length
int length(java.lang.Object)
length는 크게 두가지로 사용되는데, 일반적으로 문자열(java.lang.String)인 경우엔 글자 수를 보여주기도 하고, 배열을 length 한 경우엔 해당 배열에 포함된 항목의 개수를 보여줍니다.
<c:set var="target" value="나는 여기서 분리를 당할겁니다."/>
<p>문자수 : ${fn:length(target)}</p>
<p>단어수 : ${fn:length(fn:split(target, ' '))}</p>
다음에서 보이듯이 target의 문자수는 띄어쓰기 포함 총 17자이고, 공란(' ')기준으로 split 된 배열을 통해 총 단어수는 4개가 됨을 알 수 있습니다.
replace
boolean replace(java.lang.String, java.lang.String, java.lang.String)
target의 문자열중 특정 문자열을 다른 문자열로 치환하는 함수입니다.
<c:set var="target" value="로이의 개발공장에 오신것을 환영합니다.로이의 개발공장에 오신것을 환영합니다."/>
<!-- 문자열내 포함된 모든 '로이'를 '조이'로 변환 -->
<p>${fn:replace(target, '로이', '조이')}</p>
두번두 번 반복해서 입력한 이유는 보통 개발하다 보면 언어별로 repalce가 첫 번째 매칭 단어만 치환되는 경우가 있기 때문에, 이를 좀 더 확실히 보여주기 위해 두 번 반복해서 적어 변환을 시켜보았습니다. 이 결과에서 알 수 있듯이, 해당 문자열에 포함된 모든 '로이'가 '조이'로 치환되었음을 알 수 있습니다.
substring
java.lang.String substring(java.lang.String, int, int)
해당 인덱스 만큼의 문자열을 반환합니다.
<c:set var="target" value="로이의 개발공장에 오신것을 환영합니다.로이의 개발공장에 오신것을 환영합니다."/>
<!-- 첫 번째 인덱스는 0입니다. -->
<p>${fn:substring(target, 0, 10)}</p>
<!-- -1부터 해도 맨 처음 자리수 부터 반환함을 알 수 있습니다. -->
<p>${fn:substring(target, -1, 10)}</p>
<!-- 1부터 시작 시 두 번째 글자부터 반환함을 알 수 있습니다. -->
<p>${fn:substring(target, 1, 10)}</p>
<!-- max값은 기존 글자수 보다 높아도 정상적으로 표현됨을 알 수 있습니다. -->
<p>${fn:substring(target, 0, 100)}</p>
<!-- length 함수를 활용해서 마지막까지로 표현할 수 있습니다. -->
<p>${fn:substring(target, 10, fn:length(target))}</p>
substringAfter
java.lang.String substringAfter(java.lang.String, java.lang.String)
해당 키워드와 일치하는 부분부터 반환하게 됩니다.
<c:set var="target" value="로이의 개발공장에 오신것을 환영합니다.로이의 개발공장에 오신것을 환영합니다."/>
<!-- 처음으로 매칭되는 키워드부터 반환합니다. -->
<p>${fn:substringAfter(target, '개발공장에')}</p>
<!-- -없으면 전체를 반환하지 않습니다. -->
<p>${fn:substringAfter(target, '조이의')}</p>
substringBefore
java.lang.String substringBefore(java.lang.String, java.lang.String)
해당 키워드와 일치하는 부분 이전까지만 반환합니다.
<c:set var="target" value="로이의 개발공장에 오신것을 환영합니다.로이의 개발공장에 오신것을 환영합니다."/>
<!-- 처음으로 매칭되는 키워드 이전 까지만 반환합니다. -->
<p>${fn:substringBefore(target, '개발공장에')}</p>
<!-- -없으면 전체를 반환하지 않습니다. -->
<p>${fn:substringBefore(target, '조이의')}</p>
toLowerCase
java.lang.String toLowerCase(java.lang.String)
소문자로 반환합니다.
<c:set var="target" value="This is the Roy's Factory"/>
<p>${fn:toLowerCase(target)}</p>
toUpperCase
java.lang.String toUpperCase(java.lang.String)
대문자로 반환합니다.
<c:set var="target" value="This is the Roy's Factory"/>
<p>${fn:toUpperCase(target)}</p>
trim
java.lang.String trim(java.lang.String)
해당 문자열의 앞, 뒤 공란을 제거해줍니다.
<c:set var="target" value=" This is the Roy's Factory "/>
<p>제거 전: [${target}]</p>
<p>제거 후: [${fn:trim(target)}]</p>
'개발 창고 > Web' 카테고리의 다른 글
[Spring] 전자정부 표준 프레임워크(eGovFrame)란? (0) | 2020.09.02 |
---|---|
[Javascript] 사업자등록번호 체크 (0) | 2020.08.31 |
[JSTL] Formatting태그(2) (0) | 2020.08.27 |
[JSTL] Formatting태그(1) (0) | 2020.08.27 |
[JSTL] Core태그 (0) | 2020.08.26 |