Day74 Java프로그래밍 기초(JSTL)
JSTL의 개념
1. JSTL의 정의
- JSTL(JavaServer Pages Standard Tag Library)은 Java 웹 애플리케이션에서 사용되는 태그 라이브러리라고 한다.
- JSP(JavaServer Pages) 페이지에서 반복적인 작업이나 조건문, XML 처리, 국제화, 데이터베이스 접근 등을 쉽게 구현할 수 있도록 표준화된 태그를 제공한다고 한다.
- JSP 페이지에서 자바 코드를 직접 삽입하는 것 대신, 태그를 사용하여 더욱 간결하고 유지보수가 쉬운 코드를 작성할 수 있다.
2. JSTL의 구성요소
- JSTL 1.2 API : JSTL 기본클래스와 인터페이스를 제공한다.
- JSTL 구현체 : JSTL API 규격에 맞춰 인터페이스를 구현한다.
3. PageContext
PageContext
는 JSP 페이지에서 페이지 수준에서 사용되는 다양한 정보를 제공하는 클래스이다.- JSP 페이지가 실행되는 동안 다양한 자원을 관리하고 페이지 범위의 속성에 접근할 수 있도록 한다.
- 서블릿이나 JSP 엔진에서 페이지의 실행 상태와 관련된 정보를 캡슐화한다.
PageContext
를 사용하면 JSP 페이지 내에서 다양한 자원에 쉽게 접근할 수 있으며, 이를 통해 JSP 페이지의 동작을 보다 유연하게 제어할 수 있다.
주요기능
- 속성 관리: 페이지 범위(Page scope)의 속성을 설정하고 가져오는 기능을 제공한다.
- JSP 페이지 요소 관리:
request
,response
,session
,application
과 같은 JSP 페이지에서 공통적으로 사용되는 객체에 대한 접근을 제공한다. - 출력 관리:
JspWriter
객체를 통해 출력 스트림을 관리하고, 데이터를 클라이언트로 보내는 데 사용된다. - 에러 처리: JSP 페이지에서 발생하는 예외를 처리하고 전파하는 기능을 지원한다.
- forward 및 include 관리: 다른 자원으로의 요청 전달(forward)이나 자원 포함(include)을 관리할 수 있다.
4. JSTL 태그 라이브러리 구조 및 사용
JSTL 모듈
1
<%@ taglib uri="태그 라이브러리 모듈명" prefix="접두어" %>
- URI : 라이브러리를 참조하는 경로이다.
- prefix : JSP 페이지에서 해당 태그 라이브러리를 사용하는 접두어이다.
JSTL 태그
1
<접두어:태그명 속성="값"...> ..... </접두어:태그명>
- 모듈을 적용하면 JSP내에서 해당 접두어로 통해 JSTL을 불러 올 수 있다.
- 예약된 태그를 java 기능과 같은 기능을 하는 코드를 작성할 수 있다.
- JSTL에서 사용하는 Area는 다음과 같다.
Core 태그
1. 주요 역할
- SP 페이지에서 기본적인 흐름 제어, URL 처리, 변수 설정 등을 지원하는 가장 중요한 태그들로 구성된다.
- 제공기능 : 조건문, 반복문, URL처리, 변수 설정 및 관리, JSP 페이지 상에서 공통적 사용하는 기능들을 포함한다.
2. c:out
- JSTL의 코어(Core) 태그 라이브러리에서 제공하는 태그 중 하나로, 값을 출력할 때 사용된다.
- 일반적인 출력과 달리 HTML 이스케이프 처리가 기본으로 적용되므로, HTML 태그가 그대로 출력되는 것을 방지할 수 있다.
- 값이
null
일 경우 대체할 값을 설정할 수도 있다고 한다.
1) value
- 설명: 출력할 값을 설정한다.
- 타입:
Object
- 기본값:
null
- 예시:
1
<c:out value="${message}"/>
2) default
- 설명:
value
가null
이거나 존재하지 않을 때 출력할 기본값을 설정한다. - 타입:
String
- 기본값:
null
- 예시:
1
<c:out value="${message}" default="값이 없습니다"/>
3) escapeXml
- 설명: 출력할 값에 대한 XML/HTML 이스케이프 처리를 할지 여부를 설정한다. 기본값은
true
로, HTML 이스케이프 처리가 적용되어<
와 같은 특수 문자가 그대로 출력되는 것을 방지한다.false
로 설정하면 이스케이프 처리가 적용되지 않는다. - 타입:
boolean
- 기본값:
true
- 예시:
1
<c:out value="${htmlContent}" escapeXml="false"/>
4) 사용예제
- 다음은 사용예제이다.
1 2 3 4 5 6 7 8 9 10
<% pageContext.setAttribute("name", "유관순"); %> <c:out value="임꺽정"/><br> <c:out value="${null}" default="홍길동"/><br> <c:out value="${null}">홍길동</c:out><br> <c:out value="${'임꺽정'}" default="홍길동"/><br> <c:out value="${name}" default="홍길동"/><br> <c:out value="${name2}" default="홍길동"/><br>
3. c:set
- JSP 페이지에서 변수를 설정하거나 값을 저장하는 데 사용된다.
- 이를 통해 변수에 값을 저장하고, 그 값을 나중에 다른 곳에서 사용할 수 있다.
- JSP 페이지 내에서 특정 값을 설정할 때 편리하게 사용할 수 있다.
1) var
- 설명: 설정할 변수의 이름을 지정한다. 이 변수는 이후 JSP 페이지 내에서 사용할 수 있다.
- 타입:
String
- 예시:
1
<c:set var="userName" value="Keonhak"/>
2) value
- 설명: 설정할 값을 지정한다. 이 값은 문자열, 숫자, 객체 등 다양한 형태로 저장할 수 있다.
- 타입:
Object
- 예시:
1
<c:set var="userAge" value="${age}"/>
3) scope
- 설명: 변수가 저장될 범위를 지정한다.
page
,request
,session
,application
이 있다. 기본값은page
이다. - 타입:
String
- 예시:
1
<c:set var="userName" value="Keonhak" scope="session"/>
4) target
- 설명: 설정할 값이 저장될 객체를 지정한다. 특정 객체의 속성을 설정할 때 사용된다.
- 타입:
Object
- 예시:
1
<c:set target="${user}" property="name" value="Keonhak"/>
5) property
- 설명:
target
속성과 함께 사용되며, 설정할 객체의 속성 이름을 지정한다. - 타입:
String
- 예시:
1
<c:set target="${user}" property="name" value="Keonhak"/>
4. c:remove
- JSP 페이지에서 변수를 제거하는 데 사용된다고 한다.
- 이 태그를 사용하면 JSP 페이지의 특정 범위에서 정의된 변수를 삭제할 수 있다.
- 이를 통해 불필요한 변수를 제거하고 메모리를 효율적으로 관리할 수 있다.
1) var
- 설명: 삭제할 변수의 이름을 지정한다. 해당 이름으로 설정된 변수가 삭제된다.
- 타입:
String
- 예시:
1
<c:remove var="userName"/>
2) scope
- 설명: 변수가 저장된 범위를 지정한다. 사용 가능한 값으로는
page
,request
,session
,application
이 있다. - 타입:
String
- 예시:
1
<c:remove var="userName" scope="session"/>
5. c:if
- 조건에 따라 특정 JSP 코드 블록을 실행할지 여부를 결정한다.
- JSP 페이지 내에서 자바의
if
문과 유사한 방식으로 조건문을 사용할 수 있게 해준다. - 이를 통해 JSP 코드에서 조건부 로직을 간단하게 구현할 수 있다.
1) test
- 설명: 조건을 지정하는 필수 속성이다. 이 속성은 불리언 값(true 또는 false)을 반환하는 조건식으로 설정된다고 한다.
test
가true
일 경우에만 태그 내부의 코드가 실행된다. - 타입:
boolean
- 예시:
1 2 3 4
<c:if test="${userAge >= 18}"> <!-- 이 코드는 userAge가 18 이상일 때만 실행됨 --> 성인입니다. </c:if>
2) var
- 설명: 조건식의 결과를 저장할 변수를 지정한다.
test
속성의 결과 값이 이 변수에 저장되며, 이후 JSP 페이지에서 사용할 수 있다. - 타입:
String
- 예시:
1 2 3 4
<c:if test="${userAge >= 18}" var="isAdult"> <!-- 이 코드는 userAge가 18 이상일 때만 실행됨 --> 성인입니다. </c:if>
6. c:choose
- 여러 조건을 처리할 때 사용된다. 이는 자바의
switch
문과 유사한 방식으로 동작하며, 다양한 조건을 처리할 수 있는 구조를 제공한다. <c:choose>
태그는<c:when>
과<c:otherwise>
태그와 함께 사용되며, 각 조건을 순차적으로 검사하여 조건이 참인 경우에 해당 블록을 실행한다.
1) c:when
- 설명: 조건이 참일 때 실행되는 블록을 정의한다.
test
속성을 사용하여 조건을 설정하며, 첫 번째로 참인 조건이 실행되고 나머지 조건은 무시된다. - 타입:
boolean
- 예시:
1 2 3 4 5 6 7 8
<c:choose> <c:when test="${userAge >= 18}"> 성인입니다. </c:when> <c:when test="${userAge < 18}"> 미성년자입니다. </c:when> </c:choose>
2. c:otherwise
- 설명:
c:when
태그에서 지정한 모든 조건이 거짓일 때 실행되는 블록을 정의한다. 이는 자바의default
블록과 유사하게 사용된다. - 예시:
1 2 3 4 5 6 7 8
<c:choose> <c:when test="${userAge >= 18}"> 성인입니다. </c:when> <c:otherwise> 나이를 알 수 없습니다. </c:otherwise> </c:choose>
7. c:forEach
- 반복문을 처리하는 태그이다. 배열, 리스트, 맵, 컬렉션 등의 데이터를 순차적으로 처리할 때 사용된다.
1) items
- 설명: 반복할 데이터가 들어 있는 컬렉션이나 배열을 지정한다.
- 타입:
Object
(리스트, 배열, 맵 등) - 예시:
1 2 3
<c:forEach items="${itemList}" var="item"> ${item} </c:forEach>
2) var
- 설명: 반복되는 각 요소를 저장할 변수의 이름을 지정한다. 반복문 내에서 이 변수로 각 항목에 접근할 수 있다.
- 타입:
String
- 예시:
1 2 3
<c:forEach items="${itemList}" var="item"> ${item} </c:forEach>
3) begin
- 설명: 반복을 시작할 인덱스를 지정한다. 첫 번째 항목의 인덱스는 0이다.
- 타입:
int
- 예시:
1 2 3
<c:forEach items="${itemList}" var="item" begin="1"> ${item} </c:forEach>
4) end
- 설명: 반복을 끝낼 인덱스를 지정한다. 이 인덱스에 해당하는 요소까지 반복한다.
- 타입:
int
- 예시:
1 2 3
<c:forEach items="${itemList}" var="item" end="3"> ${item} </c:forEach>
5) step
- 설명: 반복에서 건너뛸 간격을 지정한다. 기본값은 1이며, 2 이상의 값을 지정하면 그만큼 요소를 건너뛴다.
- 타입:
int
- 예시:
1 2 3
<c:forEach items="${itemList}" var="item" step="2"> ${item} </c:forEach>
8. c:url
- JSP 페이지에서 URL을 동적으로 생성할 때 사용된다.
- 특정 URL 경로를 지정하고, 이를 동적으로 처리하여 상대 경로나 컨텍스트 경로를 추가할 수 있다.
- 또한, URL에 쿼리 파라미터를 쉽게 추가할 수 있다고 한다.
1) value
- 설명: 생성할 URL 경로를 지정한다고 한다. 상대 경로, 절대 경로 또는 컨텍스트 기반 경로를 지정할 수 있다고 한다.
- 타입:
String
- 예시:
1
<c:url value="/user/profile"/>
2) var
- 설명: 생성된 URL을 저장할 변수의 이름을 지정한다고 한다. 이 변수는 이후 JSP 페이지에서 사용할 수 있다고 한다.
- 타입:
String
- 예시:
1
<c:url value="/user/profile" var="profileUrl"/>
3) context
- 설명: URL 경로에 사용할 컨텍스트 경로를 지정한다고 한다. 기본적으로 현재 애플리케이션의 컨텍스트 경로가 사용되며, 다른 애플리케이션의 컨텍스트 경로를 지정할 수도 있다고 한다.
- 타입:
String
- 예시:
1
<c:url value="/user/profile" context="/otherApp"/>
4) c:param
- 설명: URL에 쿼리 파라미터를 추가하는 데 사용된다고 한다.
name
과value
속성을 사용하여 파라미터를 설정할 수 있다고 한다. - 타입:
String
(name, value) - 예시:
1 2 3 4
<c:url value="/search" var="searchUrl"> <c:param name="query" value="JSTL"/> <c:param name="page" value="1"/> </c:url>
9. c:import
- 외부 리소스(HTML 파일, JSP 파일, 서블릿, 또는 외부 URL) 등을 현재 JSP 페이지에 동적으로 포함할 때 사용된다.
- 서버 내부의 리소스뿐만 아니라 외부의 URL도 가져와서 포함할 수 있다.
- 파라미터를 전달하거나, 포함된 내용을 변수에 저장할 수 있는 기능도 제공한다.
1) url
- 설명: 가져올 리소스의 URL을 지정한다. 상대 경로, 절대 경로, 외부 URL 등 다양한 경로를 지정할 수 있다.
- 타입:
String
- 예시:
1
<c:import url="/header.jsp"/>
2) var
- 설명: 가져온 리소스의 내용을 저장할 변수를 지정한다. 이 변수에 포함된 내용을 나중에 다른 곳에서 사용할 수 있다.
- 타입:
String
- 예시:
1 2
<c:import url="/footer.jsp" var="footerContent"/> <div>${footerContent}</div>
3) context
- 설명: URL의 컨텍스트 경로를 지정한다. 기본적으로 현재 애플리케이션의 컨텍스트 경로가 사용되며, 다른 애플리케이션의 컨텍스트 경로를 지정할 수도 있다.
- 타입:
String
- 예시:
1
<c:import url="/header.jsp" context="/otherApp"/>
4) charEncoding
- 설명: 가져온 리소스의 문자 인코딩을 지정한다. 주로 외부 리소스를 가져올 때 사용된다.
- 타입:
String
- 예시:
1
<c:import url="http://example.com/data" charEncoding="UTF-8" var="dataContent"/>
5) c:param
- 설명: URL에 전달할 파라미터를 지정한다고 한다. GET 방식으로 쿼리 파라미터를 추가할 수 있다고 한다.
- 예시:
1 2 3
<c:import url="/search.jsp"> <c:param name="query" value="JSTL"/> </c:import>
6) 사용예제
ex10의 사용예제이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// ex10 <h2>HTTP 요청하기</h2> <c:url value="ex10_sub.jsp" var="url1"> <c:param name="name" value="홍길동"/> <c:param name="age" value="20"/> <c:param name="gender" value="woman"/> </c:url> <pre>${url1}</pre> //ex10_sub name = ${param.name}<br> age = ${param.age}<br> gender = ${param.gender}<br>
10. c:redirect
- JSP 페이지에서 다른 URL로 클라이언트를 리다이렉트할 때 사용된다.
- 서버에서 클라이언트에게 특정 URL로 다시 요청하도록 응답을 보낼 때 사용된다.
- 즉, JSP 페이지에서 동적으로 다른 페이지나 외부 URL로 리다이렉트할 수 있는 기능을 제공한다.
1) url
- 설명: 리다이렉트할 대상 URL을 지정한다. 상대 경로, 절대 경로 또는 외부 URL을 지정할 수 있다.
- 타입:
String
- 예시:
1
<c:redirect url="/home.jsp"/>
2) context
- 설명: 리다이렉트할 URL에 사용할 컨텍스트 경로를 지정한다. 기본적으로 현재 애플리케이션의 컨텍스트 경로가 사용되며, 다른 애플리케이션의 컨텍스트 경로를 지정할 수 있다.
- 타입:
String
- 예시:
1
<c:redirect url="/home.jsp" context="/otherApp"/>
3) c:param
- 설명: 리다이렉트할 URL에 쿼리 파라미터를 추가할 수 있다. 이를 통해 GET 방식으로 파라미터를 전달할 수 있다.
- 타입:
String
(name, value) - 예시:
1 2 3
<c:redirect url="/search.jsp"> <c:param name="query" value="JSTL"/> </c:redirect>
Internationalization 태그
1. 주요 역할
- Formatting and Internationalization(포맷팅 및 국제화) 기능을 제공하는 태그들로 구성되어 있다.
- 숫자, 날짜, 시간의 형식을 지정하고, 다국어 지원(국제화)을 쉽게 구현할 수 있다.
- fmt 태그는 JSP 페이지에서 데이터의 출력 형식을 관리하거나 다국어 웹사이트를 만들 때 유용하게 사용된다.
2. fmt:parseDate
1) value
- 설명: 파싱할 날짜나 시간 문자열을 지정한다.
- 타입:
String
- 예시:
1
<fmt:parseDate value="2024-09-11" var="parsedDate"/>
2) var
- 설명: 변환된 날짜 객체를 저장할 변수의 이름을 지정한다.
- 타입:
String
- 예시:
1
<fmt:parseDate value="2024-09-11" var="parsedDate"/>
3) pattern
- 설명: 파싱할 날짜 문자열의 형식을 지정한다. 지정된 형식에 맞춰 문자열이 날짜로 변환된다.
- 타입:
String
- 예시:
1
<fmt:parseDate value="11/09/2024" pattern="dd/MM/yyyy" var="parsedDate"/>
4) type
- 설명: 파싱할 값이 날짜(
date
), 시간(time
), 또는 날짜와 시간 모두(both
)인지를 지정한다. 기본값은date
라고 한다. - 타입:
String
- 예시:
1
<fmt:parseDate value="11:30" type="time" var="parsedTime"/>
5) timeZone
- 설명: 파싱된 날짜에 적용할 시간대를 지정한다. 이 속성을 생략하면 기본적으로 서버의 시간대가 사용된다.
- 타입:
String
- 예시:
1
<fmt:parseDate value="2024-09-11" var="parsedDate" timeZone="Asia/Seoul"/>
3. fmt:formatDate
- 날짜 또는 시간을 특정 형식에 맞춰 출력할 때 사용된다.
java.util.Date
객체나 날짜 문자열을 지정된 패턴으로 포맷팅하여 JSP 페이지에 출력한다.
1) value
- 설명: 포맷할 날짜 또는 시간을 지정한다.
java.util.Date
객체나 날짜 문자열을 사용한다. - 타입:
Date
또는String
- 예시:
1
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd"/>
2) pattern
- 설명: 날짜나 시간을 포맷할 형식을 지정한다.
SimpleDateFormat
의 패턴을 사용하여 형식을 정의한다. - 타입:
String
- 예시:
1
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
3) type
- 설명: 출력할 값의 유형을 지정한다고 한다.
date
,time
, 또는both
중 하나를 선택할 수 있다.pattern
을 사용하지 않으면 기본적으로 로케일에 따라 형식이 정해진다. - 타입:
String
- 예시:
1
<fmt:formatDate value="${now}" type="time"/>
4) dateStyle
- 설명: 날짜의 스타일을 지정한다.
default
,short
,medium
,long
,full
중 하나를 사용할 수 있다. - 타입:
String
- 예시:
1
<fmt:formatDate value="${now}" dateStyle="long"/>
5) timeStyle
- 설명: 시간의 스타일을 지정한다.
default
,short
,medium
,long
,full
중 하나를 사용할 수 있다. - 타입:
String
- 예시:
1
<fmt:formatDate value="${now}" timeStyle="short"/>
6) timeZone
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.