JSP는 개발자가 직접 <jsp:include>와 같은 태그를 작성할수있는 기능을 제공하는데 이를 태그라고 한다.
이것들을 모아서 JSTL이라는 규약을 만들었다.
1. JSTL이란
1.1 JSTL이 제공하는 태그의 종류
코어 : 변수지원, 흐름제어, URL처리 –> c
xml : XML 코어, 흐름제어, XML 변호나 –> x
국제화 : 지역, 메시지 형식, 숫자 및 날짜 형식 –> fmt
데이터베이스 : SQL –> sql
함수 : 컬렉션 처리, String 커리 –> fn
02. 코어 태그
변수지원
set : JSP에서 사용될 변수를 설정한다.
remove : 설정한 변수를 제거한다.
흐름제어
if : 조건에 따라 내부 코드를 수행한다.
choose : 다중 조건을 처리할때 사용된다.
forEach : 컬렉션이나 Map의 각 항목을 처리할때 사용된다.
forTokens: 구분자로 분리된 각각의 토큰을 처리할때 사용된다.
URL처리
import : URL을 사용하여 다른 자원의 결과를 삽입힌다.
redirect : 지정한 경로로 리다이렉트 한다.
url : URL을 사용하여 다른 자원의 결과를 삽입힌다.
기타 태그
catch : 예외처리에 사용된다.
out : JspWriter에 내용을 알맞게 처리한 후 출력한다.
2.1 변수지원태그
(1) <c:set>태그
<c:set var = “varName” value=”varvalue” [scpoe=”영역”]/>
<c:set var = “varName” [scpoe=”영역”]>varvalue</c:set>
var : 값을 지정할 EL변수의 이름
value : 변수의 값을 지정ㅎ나다. 표현식, EL, 정적인 텍스트를사용하여 값을 지정할수 있다.
Scope : 변수를 지정할 영역을 지정한다. 값은 page, request, session, application 중 하나가 온다. 지정하지 않을 경우 기본값은 apge 이다.
<c:set var = “name” value=”${m.lastName} ${m.firstName}” />
<c:set target=”대상” property = “프로퍼티 이름” value=”값”/>
<c:set target=”대상” property = “프로퍼티 이름” /> 값</c:set>
target : 프로퍼티 ㄱ밧을 설정할 대상 객체. 표현식이나 EL변수를 지정한다. 대상 객체는 자바빈 객체나 Map이어야 한다.
property: 설정할 프로퍼티의 이름. target이 자바빈 객체인 경우 프로퍼티 이름에 대항다흔 set메서드를 제공해 주어야 한다.
value : 설정할 프로퍼티 값
<c:set var=”member” value=”<%=member %>”/>
target대상이 EL변수인 경우 target속성의 값을 ${member}와 같이 EL을 이용해서 설정해 주어야 한다.
<c:set var=”이름” value=#{expr}”/>
var : EL변수 이름
value : 변수에 할당할 값
scope : 변수를 생성할 영역
target : 프로퍼티 값을 설정할 객체 지정
property : 프로퍼티 이름
(2)<c:remove> xorm
<c:remove>태그는 <c:set>태그로 지정하 ㄴ변수를 삭제 할때 사용된다.
<c:remove var=”varName” [scope=”영역”]/>
2.2 흐름제어 태그
(1) <c:if>
<c:if test=”true”>..</:if>
<c:if test=”<%=some condition %>” var=”testResult”>
(2) <c:choose><c:wen><c:otherwise>
<c:choose>
<c:when test=”${member.lever==’trial’}”>
</c:when>
<c:when test=”${member.lever==’abc’}”>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
(3)<c:forEach> 태그
<c:forEach>태그는 배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할때 사용할수 있느 ㄴ태그로서, 자바의 for, do-while 등을 대신해서 사용할수 있다.
<c:forEach var=”i” begin=”1″ end=”10″ setp=”2″>
${i}사용
</:forEach>
<c:forEach var=”i” items=”${intArray}” begin=”1″ end=”10″ >
${i}사용
</:forEach>
<c:forEach var=”i” items=”${intArray}” varStatus=”status”>
${status.index+1}사용
</:forEach>
var : 몸체에서 사용할 EL 변수 이름
items : 반복처리할 데이터
varStatus : 루프상태를 저장할 EL 변수이름
begin : 시작 인덱스 값
end : 끝 인덱스값
step : 인텍스 증분 값
2.3 URL 처리 태그
URL관련 태그는 내부/외부 자원 삽입, URL 생성, 리다이텍트처리의 세가지 기능을 제공한다. 이태그를 이요하면, 스크립트릿이나 표현식을 사용하지 않고 간결한 코드로 URL관련 기능을 수행 할수 있다.
(1)<c::import> 태그
<jsp:include>는 동일한 웹 어플리케이션내에 위치한 자원을 포함해 주는 기능이라면 <c:import>태그는 동일한 웹 어플리케이션뿐만아니라 외부의 다름 자원을 읽어와 포함시킬수 있도록 해준다.
요청 파라미터를 추가하는 방식은 다음 두가지 방식이 있다.
ㅇ URL에 직접입력
1. <c:import url=”http://flickr.com/search/?q=design”/>
ㅇ <c:param>태그를 이용해서 입력
1. <c:import url=”http://search.daum.net/search”>
<c:param name=”nil_suggest” value=”btn” />
<c:param name=”1″ value=”보라매공원” />
</c:import>
url : 읽어올 URL
var : 읽어온 결과를 저장할 변수 이름
scope : 변수를 저장할 영역
charEncoding : 결과를 읽어올때 사용할 캐릭터 인코딩
(2)<c:url> 태그
URL을 생성해주는 기능을 제공한다.
<c:url value =”URL” [var=”varName”][scope=”영역”]>
<c:param name=”이름” value=”값” />
</c:url>
<c:url value=”/view/list.jsp”/>
—생성하는 URL은 /view/list.jsp를 생성한다.
value : 읽어올 URL
var : 읽어온 결과를 저장할 변수 이름
scope : 변수를 저장할 영역
(3) <c:redirect> 태그
<c:redirect> 태그는 respone.sendRedirect() 처럼 지정한 페이졸 리다이렉트 해주는 기능을 제공한다.
<c:redirect url=”URL”>
<c:param name=”이름” value=”값”/>
</c:redirect>
<c:redirect url=”/viewToday.jsp context=”/chap1″/>
04. 함수
length(obj) : obj가 list와 같은 Collection 인 경우 저장된 항목의 개수를 리턴하고, obj가 문자열일 경우 문자열의 길이를 리턴한다.
toUpperCase(str) : str을 대문자로 변환한다.
toLowerCase(str) : str을 소문자로 변환한다.
substring(str, idx1, idx2) : idx2가 -1일경우str.substring(idx1)과 동일하다
substringAfter(str1, str2) : str1에서 str1에 포함되어 있는 str2이후의 문자열을 구한다.
substringBefore(str1, str2) : str1에서 str1에 포함되어 있는 str2이전의 문자열을 구한다.
trim(str) : str좌우의 공백 문자를 제거한다.
replace(str, src, dest) : str에 있는 src를 dest로 변환한다.
indexOf(str2, str2) : str1에서 str2가 위치한 인덱스를 구한다.
startsWith(str1, str2) : str1이 str2로 시작할 경우 true를 그렇지 않을 경우 false를 리턴한다.
endsWith(str1, str2): str1이 str2로 끝나는 경우 true를 그렇지 않을 경우 false를 리턴한다.
contains(str1, str2) : str1이 str2를 포함하고 있을 경우 true를 리턴한다.
containslgnoreCase(str1, str2) : 대소문자 구분 없이 str1이 str2를 포함하고 있을경우 true를 리턴한다.
split(str1, str2) : str2로 명시한 글자를 기준으로 str1을 분리해서 배열을 리턴한다.
join(array, str2) : array에 저장된 문자열을 합친다. 이때 각문자열 사이에는 str2이 붙는다.
escapeXml(str) : XML의 객체 참조에 해당하는 특수문자를 처리한다. 예를 들어 ‘&’는 ‘&’로 변환한다.