일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- HTML
- 자바왕초보
- 오라클
- 스프링 제어역전
- 오라클일별데이터
- Spring Boot가 해결하려고 했던 문제
- 스프링 에러
- maven
- 스프링 Ioc Container
- 스프링 부트가 해결하려고 했던 문제
- 자바 기초
- 자바기초
- 오라클통계
- 자바 왕기초
- 오라클클라우드에 젠킨스 설치하기
- 스프링 구글차트
- 오라클월별데이터
- 자바왕기초
- 제이쿼리
- 스프링 구글차트로 기간별 현황 조회하기
- 오라클주별데이터
- 스프링과 스프링부트 차이점
- java
- 스프링 Ioc
- CSS
- 자바
- 스프링
- 썸머노트
- jsp
- 세션
- Today
- Total
Just Do it
표준 태그 라이브러리 (JSTL) 본문
*출처: CHAPTER 12 표현 언어(Expression Language), 최범균의 JSP 2.3 웹 프로그래밍 기초부터 중급까지, 최범균, 가메출판사
0. 표준 태그 라이브러리 (JSTL)
JSP는 <jsp:include>와 같은 태그를 개발자가 추가할 수 있는 기능을 제공하는데 이를 커스텀 태그라고 한다. 커스텀 태그 중에서 많이 사용되는 것들을 모아서 JSTL (JSP Standard Tag Library)라는 표준을 만들었다. 이 표준 태그 라이브러리를 사용하면 스크립트릿 코드의 사용을 줄이면서 더욱 간결하고 이해하기 쉬운 JSP 코드를 작성할 수 있다.
1. JSTL이란?
JSP는 스크립트릿과 표현식 등의 스크립트 코드와 HTML 코드가 뒤섞이게 되는데 이렇게 뒤섞인 JSP 코드는 알아보기가 쉽지 않다.
JSP는 실행 코드와 화면을 구성하는 HTML 코드를 쉽게 섞을 수 있어 개발이 편리하지만, 반대로 스크립트 코드와 HTML 코드가 섞이면서 코드의 가독성은 도리어 나빠진다.
HTML 태그와 비슷한 태그를 사용해서 반복문이나 조건문을 처리할 수 있다면, 스크립트 코드를 사용할 때보다 보기 좋고 이해하기 쉬운 코드를 작성할 수 있을 것이다.
JSP 페이지에서 많이 사용되는 논리적인 판단, 반복 처리, 포맷 처리를 위한 커스텀 태그를 표준으로 만들어서 정의한 것이 바로 JSTL이다.
2. JSTL이 제공하는 태그의 종류
라이브러리 | 주요 기능 | 접두어 | 관련 URI |
*코어 | 변수 지원 흐름 제어 URL 처리 |
c | http://java.sun.com/jsp/jstl/core |
XML | XML 코어 흐름 제어 XML 변환 |
x | http://java.sun.com/jsp/jstl/xml |
*국제화 | 지역 메시지 형식 숫자 및 날짜 형식 |
fmt | http://java.sun.com/jsp/jstl/fmt |
데이터베이스 | SQL | sql | http://java.sun.com/jsp/jstl/sql |
*함수 | 컬렉션 처리 String 처리 |
fn | http://java.sun.com/jsp/jstl/functions |
- 이 중 코어, 국제화, 함수 라이브러리를 많이 사용한다.
- 접두어: JSP 페이지가 커스텀 태그를 호출할 때 사용한다.
- 관련 URI: JSTL이 제공하는 커스텀 태그를 구분해주는 식별자이다. 이 식별자를 이용해서 JSP 페이지에서 사용할 커스텀 태그 라이브러리를 선택할 수 있다.
3. 코어 태그
-코어 태그 라이브러리는 변수 설정이나 if-else와 같은 논리 처리에 사용되는 스크립트 코드를 대체하는 태그를 제공한다.
-코어 태그 라이브러리를 사용하려면 JSP 페이지에 다음과 같이 taglib 디렉티브를 추가해야한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
기능 분류 | 태그 | 설명 |
변수 지원 | set | JSP에서 사용할 변수를 설정한다. |
remove | 설정한 변수를 제거한다. | |
흐름 제어 | if | 조건에 따라 내부 코드를 수행한다. |
choose | 다중 조건을 처리할 때 사용된다. | |
forEach | 컬렉션이나 Map의 각 항목을 처리할 때 사용된다. | |
forTokens | 구분자로 분리된 각각의 토큰을 처리할 때 사용된다. | |
URL 처리 | import | URL을 사용하여 다른 자원의 결과를 삽입한다. |
redirect | 지정한 경로로 리다이렉트 한다. | |
url | URL을 재작성 한다. | |
기타 태그 | catch | 익셉션을 처리할 때 사용한다. |
out | JspWriter에 내용을 출력한다. |
3.1 변수 지원 태그
3.1.1 <c:set> 태그
- <c:set> 태그는 EL 변수의 값이나 EL 변수의 프로퍼티 값을 지정할 때 사용된다. <c:set> 태그의 첫 번째 사용방법은 EL 변수를 생성하는 것으로서 형식은 다음과 같다.
<c:set var="변수명" value="값" [scope="영역"] />
<c:set var="변수명" [scope="영역"]> 값 </c:set>
*scope: 변수를 저장할 영역을 지정한다. page, request, session, application 중 하나가 오는데 지정하지 않으면 page를 기본값으로 사용한다.
-<c:set>태그의 두 번째 사용방법은 객체의 프로퍼티 값을 설정하는 것이다.
<c:set target="대상", property="프로퍼티이름", value="값"/>
<c:set target="대상", property="프로퍼티이름">값</c:set>
3.1.2 <c:remove> 태그
- <c:remove> 태그는 set 태그로 지정한 변수를 삭제할 때 사용한다.
<c:remove var="varName" [scope="영역"] />
*삭제할 변수의 scope를 지정하지 않으면 동일한 이름으로 저장된 모든 영역의 변수를 삭제한다.
3.2 흐름 제어 태그
3.2.1 <c:if> 태그
- 자바의 if 블록과 비슷한 기능을 제공한다. 중첩된 if-else 블록과 같은 효과를 낼 수는 없지만 단순한 if 블록을 쉽게 대체할 수 있기 때문에 많이 사용한다.
<c:if test="조건">
...
</c:if>
-<c:if> 태그의 test 속성의 계산 결과를 var 속성으로 지정한 EL 변수에 저장할 수 있다. 예를 들어, 다음 코드는 <%= someCondition %>의 값을 testResult EL 변수에 저장한다.
<c:if test="<%= someCondition %>" var="testResult">
...
</c:if>
테스트 조건 검사 결과는 ${testResult}임
3.2.2 <c:choose>, <c:when>, <c:otherwise> 태그
- <c:choose> 태그는 자바의 switch 구문과 if-else 블록을 혼합한 형태로서 다수의 조건문을 하나의 블록에서 수행할 때 사용한다. 사용 방법은 다음과 같다.
<c:choose>
<c:when test="${member.level == 'trail'}">
...
</c:when>
<c:when test="${member.level == 'regular'}">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>
3.2.3 <c:forEach> 태그
- <c:forEach> 태그는 배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할 때 사용한다. 자바의 for, do-while등을 대신하여 사용할 수 있다. 사용 방법은 다음과 같다.
<c:forEach var="변수" items="아이템">
...
</c:forEach>
- items 속성에는 Map, 배열, Collection이 올 수 있다.
- forEach 태그를 사용해서 자바의 for 구문과 같은 효과를 낼 수 있는데 다음과 같이 begin 속성과 end 속성을 통해 범위를 지정해서 forEach 태그를 사용하면 된다.
<c:forEach var="i" begin="1" end="10"> // 변수 i는 1부터 10까지의 값을 차례대로 갖는다.
${i} 사용
</c:forEach>
- step 속성을 사용하면 증가분을 변경할 수 있다. 예를 들어 다음과 같이 step 속성값으로 2를 주면 변수 i는 1,3,5,7,9의 값을 차례대로 갖는다.
<c:forEach var="i" begin="1" end="10" step="2">
${i} 사용
</c:forEach>
-items 속성과 함께 begin, end 속성을 사용하면 참조할 변수의 개수를 제한할 수 있다. 예를 들어, 정수형 배열에서 2번 인덱스부터 4번 인덱스까지만 값을 참고하고 싶다면 다음과 같이 begin, end 속성을 지정하면 된다.
<c:forEach var="i" items="$[intArray]" begin="2" end="4">
[${i}]
</c:forEach>
-items 속성값으로 List와 같은 컬렉션이나 배열을 전달한 경우, forEach 태그의 몸체에서 현재 사용하는 항목의 인덱스 값을 사용해야할 때가 있다. 이 경우 varStatus 속성을 이용해서 인덱스 값을 사용할 수 있다.
<c:forEach var="item" items="<%=someItemList%>" varStatus="status">
${status.index+1} 번째 항목: ${item.name}
</c:forEach>
3.2.4 <c:forToken> 태그
- <c:forToken> 태그는 java.util.StringTokenizer 클래스와 같은 기능을 제공하는 태그로서 기본 형식은 다음과 같다.
<c:forToken var="token" items="문자열" delims="구분자">
${token}의 사용
</c:forToken>
-<c:forToken> 태그는 items 속성으로 전달받은 문자열을 구분자를 이용해서 나누고, 구분한 각 문자열을 각 var 속성에 명시한 변수에 저장한다. 예를 들어, 아래 코드는 items 속서으이 값을 콤마(,)로 나눈 "red", "green", "blue" 문자열을 color 변수에 차례대로 대입한다.
<c:forToken var="color" items="red,green,blue" delim=",">
${color}
</c:forToken>
-<c:forToken> 태그는 <c:forEach> 태그와 동일하게 begin, end, step, varStatus 속성을 제공한다.
3.3 URL 처리 태그
- URL 생성: <c:url> 태그
*context root 자동 추가 기능과 session id 자동 추가 기능이 있다.
<c:url value="URL" [var="varName"][scope="영역"]> // var속성, scope속성은 생략 가능
<c:param name="이름" value="값" /> // param 태그를 이용하여 파라미터를 URL에 추가 가능
</c:url>
예) context root 자동 추가
<form action="<c:url value="/register/save"/>" method="post" onsubmit="return formCheck(this)">
//context root=ch2Review이다. 원래 value="ch2Review/register/save/" 라고 적어야하는데 <c:url /> 태그로 conext root를 자동 추가함
웹에서 소스 보기를 눌러보면 아래와 같이 자동으로 context root가 들어갔음을 확인할 수 있다.
- 리다이렉트 처리: <c:redirect> 태그
* <c:redirect>태그를 실행하면 그 이후의 코드는 실행되지 않는다.
<c:redirect url="URL" [context="컨텍스트경로"]> // 컨텍스트경로가 지정되지 않으면 현재 웹 어플리케이션의 컨텍스트가 경로로 들어간다.
<c:param name="이름" value="값" /> // param 태그를 이용하여 파라미터를 URL에 추가 가능
</c:url>
'신입 개발자가 되기 위해 공부했던 독학 자료들 > JSP' 카테고리의 다른 글
표현언어 EL (Expression Language) 기초 (0) | 2022.02.06 |
---|---|
JSP 기본 문법 총 정리 - 템플릿 데이터, JSP 전용 태그, 내장 객체 (0) | 2022.02.05 |
JSP 페이지의 구성 요소 (0) | 2022.02.05 |
맥 톰캣 Tomcat 실행 방법 (0) | 2022.01.31 |