JSTL(JSP Standard Tag Library)
- JSP 표준태그 라이브러리
- 스크립틀릿을 사용해서 작성했던 자바코드를 대체할 수 있다
- 변수 선언/삭제, 값 출력, 제어문 처리, 반복문 처리, 숫자나 날짜에 대한 포맷팅, 국제화처리, URL 처리
- 사용법
- JSTL 파일을 다운받아서 WEB-INF/lib에 복사한다
- JSP 파일에 사용할 태그라이브러리를 지시어를 사용해서 정의
<%@ taglib prefix="별칭" uri="태그라이브러리식별자" %>
<별칭:태그명 value="${EL표현식}" />
JSTL 태그라이브러리의 태그 종류
core 태그
- 가장 많이 사용되는 태그 라이브러리
- 변수/출력/제어문/반복문/URL 처리를 지원
- JSP에 아래의 지시어를 정의
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
fmt 태그
- 숫자나 날짜에 대한 포맷팅을 지원
- 국제화 처리를 지원
- JSP에 아래의 지시어를 정의
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
function 태그
- String 클래스의 주요 메소드 사용을 지원
- JSP에 아래의 지시어를 정의
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/function" %>
Core 태그 라이브러리
<c:out> 태그
- 값을 출력
- < %=값 %>, ${표현식} 과 동일한 작업을 수행
- XSS(Cross Site Scripting) 취약점 공격에 대한 가장 기본적인 방어를 지원
- XSS는 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣어서 쿠키나 세션아이디와 같은 정보를 취득하는 것을 말한다
- 주로 공개된 게시판의 게시글에 html과 script 코드를 입력해서 해당 스크립트를 실행시키는 것
- 사이트 이용자가 작성하는 콘텐츠는 반드시 <c:out />태그를 사용해서 출력하는 것이 좋다
사용법
<c:out value="${표현식}" />
주요 속성
value
- 출력할 값을 지정
- 생략할 수 없다
<c:out value="${book.title}" />
escapeXml
- 특수문자( < > " ' &)를 변환할지 여부를 지정
- 기본값은 true다
- 생략 가능
default
- value에서 지정한 값이 null인 경우 표현할 값을 지정
- 생략가능
<c:if> 태그
- if문과 동일한 역할을 수행
- else에 해당하는 태그는 없다
사용법
<c:if test="${표현식}">
HTML 컨텐츠
</c:if>
<!-- test에서 제시한 조건이 true면 HTML 컨텐츠가 화면에 출력된다. --->
주요속성
test
- 검사조건을 정의
- 결과값이 boolean 타입이어야 한다
- 생략할 수 없다
<c:choose> <c:when> <c:otherwise> 태그
- if ~ else if ~ else if ~ else 와 동일한 역할을 수행
사용법
<c:choose>
<c:when test="${조건식1}">
HTML 컨텐츠
<!-- test에서 제시한 조건식1이 true면 HTML 컨텐츠가 화면에 출력된다. --->
</c:when>
<c:when test="${조건식2}">
HTML 컨텐츠
<!-- test에서 제시한 조건식2이 true면 HTML 컨텐츠가 화면에 출력된다. --->
</c:when>
<c:when test="${조건식3}">
HTML 컨텐츠
<!-- test에서 제시한 조건식3이 true면 HTML 컨텐츠가 화면에 출력된다. --->
</c:when>
<c:otherwise>
HTML 컨텐츠
<!-- test에서 제시한 조건식1, 조건식2, 조건식3이 전부 false면 HTML 컨텐츠가 화면에 출력된다. --->
</c:otherwise>
</c:choose>
- <c:when>과 <c:otherwise>는 반드시 <c:choose>안에 위치해야 한다
- <c:when>은 조건식을 다르게 해서 여러 번 정의할 수 있다
- <c:otherwise>는 생략할 수 있고, 맨 마지막 <c:when> 다음에 정의해야 한다
- <c:when>으로 제시한 조건식이 true가 되면 남아있는 <c:when>은 검사하지 않는다
- <c:otherwise>는 <c:when>으로 제시한 조건이 모두 false로 판정될 때만 실행된다
<c:forEach> 태그
- for문과 같은 역할을 수행한다
- 배열 혹은 컬렉션(List, Set)에 대해서 그 항목의 갯수만큼 반복작업을 수행한다
사용법
<c:forEach var="변수명" items="${표현식}">
<p>${변수명}<p>
</c:forEach>
- items의 표현식으로 찾은 값이 반드시 배열 혹은 컬렉션이어야 한다
- 검색된 배열 혹은 컬렉션의 요소 갯수만큼 컨텐츠를 반복 출력한다
- var는 배열 혹은 컬렉션에서 반복수행시 해당 요소가 저장되는 변수의 이름을 지정
<c:forEach var="변수명1" items="${표현식}" varStatus="변수명2">
<p>${변수명2.count} ${변수명1}<p>
</c:forEach>
- varStatus에 지정된 변수에는 현재 반복상태 정보를 담고 있는 객체가 전달
- 반복상태 정보
- index : 현재 추출한 요소의 인덱스번호(0부터 시작)
- count : 현재 반복횟수(1부터 시작)
- first : 첫번째 요소인 경우 true
- last : 마지막번째 요소인 경우 false
<c:forEach var="변수명" begin="${표현식}" end="${표현식}">
<a href="list.hta?pageno=${변수명}">${변수명}</a>
</c:forEach>
- begin은 시작값, end는 끝값을 지정
- begin과 end는 정수값이어야 한다
- begin, end의 구간만큼 컨텐츠를 반복 출력한다
- var는 현재 숫자값을 저장하는 변수의 이름을 지정
<c:set> 태그
- EL로 표현할 수 있는 값을 가진 변수를 선언
사용법
<c:set var="변수명" value="${표현식}" />
<c:set var="변수명" value="값" />
<c:set var="변수명" value="<%=값 %>" />
- var 지정된 이름으로 값이 저장
- ${변수명}으로 저장된 값을 표현할 수 있다
- scope는 값이 저장될 객체를 지정
<c:set var="a" value="길동" />
<%-- pageContext.setAttribute("a", "길동"); --%>
<p>${a}</p>
<c:set var="b" value="길동" scope="page"/>
<%-- pageContext.setAttribute("b", "길동"); --%>
<p>${b}</p>
<c:set var="c" value="유신" scope="request"/>
<%-- request.setAttribute("c", "유신"); --%>
<p>${c}</p>
<c:set var="d" value="감찬" scope="session"/>
<%-- session.setAttribute("d", "감찬"); --%>
<p>${d}</p>
<c:set var="e" value="순신" scope="application"/>
<%-- application.setAttribute("e", "순신"); --%>
<p>${e}</p>
<c:remove> 태그
- 지정된 이름의 값(객체)을 속성에서 삭제한다
사용법
<c:remove var="변수명" />
<c:remove var="a" />
<%-- pageContext.removeAttribute("a"); --%>
<c:remove var="b" scope="page"/>
<%-- pageContext.removeAttribute("b"); --%>
<c:remove var="c" scope="request"/>
<%-- request.removeAttribute("c"); --%>
<c:remove var="d" scope="session"/>
<%-- session.removeAttribute("d"); --%>
<c:remove var="e" scope="application" />
<%-- application.removeAttribute("e"); --%>
<c:url> 태그
- url을 생성
사용법
<c:url var="변수명" value="경로">
<c:param name="이름1" value="값1" />
<c:param name="이름2" value="값2" />
<c:param name="이름3" value="값3" />
</c:url>
<a href="${변수명}">링크</a>
<%-- <a href="경로?이름1=값1&이름2=값2&이름3=값3">링크</a> --%>
<c:import> 태그
- 지정된 파일을 include한다
- url에는 프로젝트 내부 파일 및 외부 파일(다른 웹서버의 파일) 포함 가능
사용법
<c:import url="포함시킬파일의 경로" />
국제화 태그
fmt:formatNumber 태그
- 숫자를 지정된 형식에 맞게 출력
- 숫자에 콤마가 포함되어서 출력된다
사용법
<fmt:formatNumber value="${표현식}" />
<fmt:formatNumber value="${표현식}" pattern="패턴문자열" />
- 숫자가 지정된 패턴형식에 맞게 출력된다
- value에 지정된 표현식으로 검색되는 값은 반드시 숫자값이어야 한다
fmt:formatDate 태그
- 날짜를 지정된 형식에 맞게 출력
- 날짜가 년월일시분초 형태로 출력된다
<fmt:formatDate value="${표현식}" />
<fmt:formatDate value="${표현식}" pattern="패턴문자열" />
- 날짜가 지정된 패턴형식에 맞게 출력된다
- value에서 지정된 표현식으로 검색되는 값은 반드시 Date 타입이어야 한다
fmt:bundle, fmt:message 태그
- 국제화처리를 지원하는 태그
- JSP에서 사용할 메세지 번들 파일을 지정한다
<fmt:bundle basename="패키지경로.기본메세지번들파일명"></fmt:bundle>
- 국제화 처리를 지원받기 위해서는 HTML 컨텐츠가 fmt:bundle와 </fmt:bundle> 안에 위치해야 한다
<fmt:message var="별칭" key="번들파일에 정의한 키" />
- 번들파일에서 키에 해당하는 텍스트를 읽어서 출력
<h1><fmt:message key="label.home.title"/></h1>
<fmt:message var="submit_message" key="label.home.btn.submit"/>
<input type="submit" value="${submit_message}" />
국제화처리 절차
지원할 각 언어별로 메세지 번들파일을 만든다
- /src/resources/messages.properties : 기본 메세지 번들파일
- /src/resources/messages_ko.properties : 한국어용 메세지 번들파일
- /src/resources/messages_en.properties : 영어용 메세지 번들파일
- /src/resources/messages_ja.properties : 일본어용 메세지 번들파일
- 언어별 코드
- 한국 : ko , 영어 : en , 중국어 : zh , 일본어 : ja , 프랑스어 : fr , 독일어 : de , 스페인어 : es
- 국가별 코드
- 한국 : kr, 미국 : us , 영국 : gb , 중국 : cn , 일본 : jp , 프랑스 : fr , 독일 : de , 스페인 : es
- JSP 파일에서 메세지 번들파일의 기본 경로 및 이름을 설정
<fmt:bundle basename="패키지경로.기본메세지번들파일명" />
- 메세지를 표현할 곳에 메세지 번들파일에서 정의한 키를 지정
<fmt:message key="번들파일에 정의한 키" />
'Web' 카테고리의 다른 글
타임리프 (0) | 2024.03.21 |
---|---|
EL(Expression Language) (0) | 2024.02.19 |
프로젝트에서 톰캣설정 (0) | 2024.01.26 |
JDBC 프로젝트 개발순서 (0) | 2024.01.26 |
Web_Servlet (0) | 2024.01.15 |