JSTL JSTL 524730-1 2019 년봄학기 5/13/2019 박경신 JSTL (JSP Standard Tag Library) JCP(Java Community Process, 자바표준화단체 ) 에서정한표준 JSP 페이지에서스크립트요소로인한코드의복잡함을해결하기위한일종의사용자정의태그 널리사용되는사용자정의태그를표준으로만든라이브러리 JSP 페이지의로직을담당하는부분인 if, for, while, 데이터베이스처리등과관련된코드를 JSTL로대치하여코드를깔끔하게하고가독성을좋게하는것 JSP 내장객체에쉽게접근할수있을뿐아니라파라미터, 헤더, 쿠키등의복잡한코드를사용하지않고쉽게직관적으로사용 객체간의비교를 equals() 메소드로처리하는대신 == 와같은간단한연산자로구현이가능 JSTL 구성 JSTL 구성 JSTL CORE Tags : 변수선언및삭제, if, for, URI 처리기능 JSTL Formatting Tags : 텍스트, 날짜, 숫자를형식화하는기능 JSTL SQL : JDBC를이용한 DB처리기능 JSTL XML : XML문서처리관련기능 JSTL Functions : Collection, String 처리관련기능 Library Syntax CORE <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> Formatting <%@ taglib prefix= fmt" uri="http://java.sun.com/jstl/fmt" %> JSTL 제공하는태그의종류와사용법 JSTL 제공하는태그사용 JSTL 라이브러리인 jstl.jar 파일이필요 https://maven-repository.dev.java.net/repository/jstl/jars/ 파일다운로드 WEB-INF/lib에복사 JSP 페이지에 <%@ taglib> 지시어를사용 prefix 속성은 uri 속성에명시된값대신해당페이지에서 prefix 속성값으로명시된값을사용하겠다는것을의미 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> SQL <%@ taglib prefix= sql" uri="http://java.sun.com/jstl/sql" %> XML <%@ taglib prefix= x" uri="http://java.sun.com/jstl/xml" %> Functions <%@ taglib prefix= fn" uri="http://java.sun.com/jstl/functions" %>
JSTL 사용예시 JSTL Core 태그 JSTL <c:out> 를사용하여간단한출력 <%-- 스크립트릿으로구현시 --%> <%= pagecontext.getattribute( member ).getname() %> <%-- JSTL 사용시 --%> <c:out value="${member.name}"/> Core 태크 <c:out> <c:set> <c:remove> <c:catch> <c:if> <c:choose> <c:when> <c:otherwise> <c:import> <c:foreach> <c:fortokens> <c:param> <c:redirect> <c:url> 설명출력에사용사용할변수를설정하는데사용설정한변수를제거하는데사용예외처리에사용조건문을처리하는데사용다중조건문을처리하는데사용 <choose> 의서브태크로조건문이참일때수행 <choose> 의서브태크로조건문이거짓일때수행 URL을사용하여다른리소스의결과를삽입하는데사용반복문을처리하는데사용구분자로분리된각각의토큰을처리하는데사용 URL 관련태크의파라미터를설정하는데사용설정한경로로이동하는데사용 URL을재작성하는데사용 변수지원 변수지정 변수설정 <c:set> EL 변수값설정 ( 생성또는변경 ) <c:set var=" 변수명 " value=" 값 " [scope=" 영역 "] /> <c:set var=" 변수명 " value=" 값 " [scope=" 영역 "]> 값 </c:set> <c:set> 특정 EL 변수의프로퍼티값설정 <c:set target=" 대상 " property=" 프로퍼티이름 " value=" 값 " /> <c:set target=" 대상 " property=" 프로퍼티이름 "> 값 </c:set> 변수삭제 <c:remove> scope 미지정시모든영역의변수삭제 <c:remove var="varname" [scope=" 영역 "] /> <c:set> 태그 EL 변수에값을설정 객체의멤버변수값설정 <c:set var= browser value= ${header[ User-Agent ]} /> <c:out value= ${browser} /> 속성 필수 기본값 설명 value N 없음 저장할변수값 target N 없음 값이저장할객체명 property N 없음 target 객체의멤버변수명 var N 없음 값이저장될변수명 scope N page 값이저장될범위 (page, session, request, application)
흐름제어 if - 조건이 true 일경우몸체내용실행 <c:if test=" 조건 "> </c:if> choose - when - otherwise switch - case - default와동일 <c:choose> <c:when test="${member.level == 'trial'}" > </c:when> <c:when test="${member.level == 'regular'}" > </c:when> <c:otherwise> </c:otherwise> </c:choose> 반복처리 foreach 집합이나콜렉션데이터사용 <c:foreach var=" 변수 " items=" 아이템 "> ${ 변수사용 } </c:foreach> 특정회수반복 <c:foreach var="i" begin="1" end="10" [step=" 값 "]> ${i} 사용 </c:foreach> varstatus 속성 <c:foreach var="item" items="<%= someitemlist %>" varstatus="status"> ${status.index + 1} 번째항목 : ${item.name} </c:foreach> index - 루프실행에서현재인덱스, count - 루프실행회수 begin - begin 속성값, end - end 속성값, step - step 속성값 first - 현재실행이첫번째실행인경우 true last - 현재실행이루프의마지막실행인경우 true current - 콜렉션중현재루프에서사용할객체 URL 관련태그 import - 외부 / 내부페이지를현재위치에삽입 <c:import url="url" [var=" 변수명 "] [scope=" 영역 "] [charencoding=" 캐릭터셋 "]> <c:param name=" 파라미터이름 " value=" 값 " /> </c:import> 상대 URL import 시 <jsp:include> 와동일하게동작 url - 절대 URL 과상대 URL 을알맞게생성 <c:url value="url" [var="varname"] [scope=" 영역 "]> <c:param name=" 이름 " value=" 값 " /> </c:url> 웹컨텍스트내에서절대경로사용시컨텍스트경로자동추가 redirect - 지정한페이지로리다이렉트 <c:redirect url="url" [context=" 콘텍스트경로 "]> <c:param name=" 이름 " value=" 값 " /> </c:redirect> 출력 <c:out> 데이터를출력 escapexml 속성이 true일경우다음과같이특수문자처리 < <, > > & &, ' ', " " <c:out value="value" [escapexml="(true false)"] [default="defaultvalue"] /> <c:out value="value" [escapexml="(true false)"]> default value </c:out> 속성 필수 기본값 설명 value Y 없음 출력할내용이나표현식 default N tag body value 값에내용이없는경우출력할내용으로태그바디혹은속성값형태로올수있음 excapexml N true 출력할내용에 <,>,&,, 등의문자를일반문자로변환할지결정. 출력될내용이 html tag를포함하면값을 false로해야태그가반영된내용이화면에보임. 만일 true로하면태그가화면에그대로보임
예외처리 JSTL Formatting 태그 catch - 몸체에서발생한예외를변수에저장 <c:catch var="exname"> 예외가발생할수있는코드 </c:catch> ${exname} 사용 Formatting 태크 <fmt:formatnumber> <fmt:parsenumber> <fmt:formatdate> <fmt:parsedate> <fmt:bundle> <fmt:setbundle> <fmt:message> <fmt:setlocale> <fmt:timezone> <fmt:settimezone> <fmt:requestencoding> 설명숫자포멧팅문자열을분석해서숫자로변환 Date 객체포멧팅문자열을분석해서 Date 로변환사용할번들을지정리소스번들을읽어와특정변수에저장지역에알맞은메시지를출력 Locale 을지정시간대를지정시간대정보를특정변수에저장 Request 파라미터의캐릭터인코딩을지정 로케일지정및요청파라미터인코딩지정 <fmt:setlocale value=" 언어코드 " scope=" 범위 " /> 국제화태그가 Accept-Language 헤더에서지정한언어가아닌다른언어를사용하도록지정하는기능 <fmt:requestencoding value=" 캐릭터셋 " /> 요청파라미터의캐릭터인코딩을지정 request.setcharacterencoding(" 캐릭터셋 ") 과동일 <fmt:message> 태그 리소스번들범위에서메시지읽기 <fmt:bundle basename="resource.message" [prefix=" 접두어 "]> <fmt:message key="greeting" /> </fmt:bundle> 지정한번들에서메시지읽기 <fmt:setbundle var="message" basename="resource.message" /> <fmt:message bundle="${message}" key="greeting" /> <fmt:message> 태그의메시지읽는순서 bundle 속성에지정한리소스번들을사용 <fmt:bundle> 태그에중첩된경우 <fmt:bundle> 태그에서설정한리소스번들사용 1 과 2 가아닐경우기본리소스번들사용. 기본리소스번들은 web.xml 파일에서 javax.servlet.jsp.jstl.fmt.localizationcontext 콘텍스트속성을통해서설정가능
formatnumber 태그 숫자를포맷팅 <fmt:formatnumber value=" 숫자값 " [type=" 값타입 "] [pattern=" 패턴 "] [currentcode=" 통화코드 "] [currencysymbol=" 통화심볼 "] [groupingused="(true false)"] [var=" 변수명 "] [scope=" 영역 "] /> 속성 표현식 /EL 타입 설명 value 사용가능 String 또는 양식에맞춰출력할숫자 Number type 사용가능 String 어떤양식으로출력할지를정한다. number 는숫자형식, percent는 % 형식, currency는통화형식으로출력. 기본값은 number. pattern 사용가능 String 직접숫자가출력되는양식을지정한다.Dec imalformat 클래스에서정의되어있는패턴사용 var 사용불가 String 포맷팅한결과를저장할변수명.var속성을사용하지않으면결과가곧바로출력. scope 사용불가 String 변수를저장할영역. 기본값은 page 이다. parsenumber 태그 문자열을숫자데이터타입으로변환 <fmt:parsenumber value=" 값 " [type=" 값타입 "] [pattern=" 패턴 "] [parselocale=" 통화코드 "] [integeronly="true false"] [var=" 변수명 "] [scope=" 영역 "] /> 속성표현식 /EL 타입설명 value 사용가능 String 파싱할문자열 type 사용가능 String value 속성의문자열타입을지정. number, curre ncy, percentage 가올수있다. 기본값은 numbe r pattern 사용가능 String 직접파싱할때사용할양식을지정 var 사용불가 String 파싱한결과를저장할변수명을지정 scope 사용불가 String 변수를저장할영역을지정한다. 기본값은 page. formatdate 태그 날짜정보를담은객체 (Date) 를포맷팅 <fmt:formatdate value=" 날짜값 " [type=" 타입 "] [datestyle=" 날짜스타일 "] [timestyle=" 시간스타일 "] [pattern=" 패턴 "] [timezone=" 타임존 "] [var=" 변수명 "] [scope=" 영역 "] /> 속성표현식 /EL 타입설명 timezone 과 settimezone 국제화태그가사용할시간대설정 <fmt:timezone value="hongkong"> <!-- 사용하는시간을 Hongkong 시간대에맞춘다. --> <fmt:formatdate /> </fmt:timezone> value 사용가능 java.util.date 포맷팅할날짜및시간값 type 사용가능 String 날짜, 시간또는둘다포맷팅할지의여부를지정 datestyle 사용가능 String 날짜에대한포맷팅스타일을지정 timestyle 사용가능 String 시간에대한포맷팅스타일을지정 pattern 사용가능 String 직접파싱할때사용할양식을지정 var 사용불가 String 파싱한결과를저장할변수명을지정 scope 사용불가 String 변수를저장할영역을지정
web.xml, 국제화태그콘텍스트속성 JSTL SQL 태그 속성이름 javax.servlet.jsp.jstl.fmt.localizationcontext 설명 기본으로사용할리소드번들을지정한다. 리소스번들의 basename 을입력한다. javax.servlet.jsp.jstl.fmt.locale 기본으로사용할로케일을지정한다. javax.servlet.jsp.jstl.fmt.timezone 기본으로사용할시간대를지정한다. Sql 태크 <sql:setdatasource> <sql:query> <sql:update> <sql:dateparam> <sql:param> <sql:transaction> 설명 DataSource를설정하는데사용조회쿼리문을실행하는데사용삽입, 수정, 삭제쿼리문을실행하는데사용쿼리문에문자열형식의파라미터설정하는데사용쿼리문에날짜형식의파라미터설정하는데사용트랜잭션을구현하는데사용 JSTL XML 태그 XML 태크 설명 <x:out> XPath 표현식 <%= > <x:parse> XML 데이터파싱 <x:set> XPath 표현의변수지정 <x:if> XPath 표현조건처리 <x:foreach> XML 도큐먼트의노드 for <x:choose> 다중조건문을처리하는데사용 <x:when> <choose> 의서브태크로조건문이참일때수행 <x:otherwise> <choose> 의서브태크로조건문이거짓일때수행 <x:transform> XML 도큐먼트에서 XSL 변환 <x:param> <transform> 의서브태크로파라미터지정 JSTL Function 태그 Function 태크 설명 fn:contains() 검색대상문자열의포함여부를확인 fn:containsignorecase() 대소문자에상관없이검색대상문자열포함여부를확인 fn:starswith() 특정문자열로시작하는지여부를확인 fn:endswith() 특정문자열로끝나는지여부를확인 fn:escapexml() 문자열에포함된특수문자를특정코드로변환 fn:indexof() 검색대상문자열의첫위치값을반환 fn:join() 배열형태의문자열을설정한구분자로연결하여반환 fn:split() 문자열을설정한구분자로분리하여배열형태로반환 fn:length() 문자열의길이를반환 fn:replace() 검색대상문자열을설정한문자로변경하여반환 fn:substring() 특정위치의문자열을반환 fn:tolowercase() 모두소문자로변환 fn:touppercase() 모두대문자로변환 fn:trim() 문자열앞뒤의공백을제거하여반환
JSTL Core 태그 <c:choose> <c:when> <c:otherwise> <c:out> JSTL Core 태그 <c:foreach> JSTL SQL 태그 JSTL SQL 태그 <sql:setdatasource> <sql:query>
JSTL SQL 태그 JSTL SQL 태그 <sql:update> INSERT JSTL SQL 태그 <sql:update> INSERT JSTL SQL 태그 <sql:update> UPDATE
JSTL SQL 태그 <sql:update> UPDATE JSTL SQL 태그 <sql:update> DELETE JSTL SQL 태그 <sql:update> DELETE JSTL functions 태그 <fn:contains> <fn:containsignore>
JSTL functions 태그 <fn:split> <fn:join>