본문 바로가기

Programming/JSP

DAY 112. JSP - EL/JSTL

 

EL

Expression Language의 약자

JSP 2.0 버전부터 추가되었다.

EL은 *<%= vlaue %>, out.print(value)*와 같이 JSP 화면에 표현하고자 하는 코드를

${ value }의 형식으로 표현하여 작성하는 것을 EL이라 한다.

기존에 사용하던 표현식 태그처럼 JSP에서 쓰이는 Java 코드를 더 간결하게 사용할 수 있게 되었다.

또한, 연산자 등 내장 객체를 제공한다.

 

 

EL 내장 객체

 

 


 

JSP Action Tag

XML 기술을 이용해서 JSP 문법을 확장하는 태그

웹 브라우저에서 실행되는 것이 아니라 웹 컨테이너에서 실행되고 결과만 브라우저로 보낸다.

별도의 라이브러리 설치 없이 .JSP 파일에서 바로 사용할 수 있다.

  • JSP 페이지에서 자바 코드 등의 스크립트 언어를 사용하지 않고, HTML 태그 형태로 페이지나 객체에 접근할 수 있도록 태그를 이용해 구현한 기능을 말한다.
  • 태그 형태로 만든다고 해서 브라우저에서 실행하는 것이 아니라 서버에서 처리하고 그 결과를 리턴하는 것으로 이 점은서블릿과 동일하다.

 

  표준 액션 태그 커스텀 액션 태그
사용법 - JSP 페이지에서 기본으로 제공하는 태그 JSP 페이지에서 바로 사용 가능하다.
- 태그 앞에 jsp 접두어가 붙는다.
- 별도의 라이브러리 설치가 필요하다.
- 라이브러리 선언에 맞는 접두어가 붙는다.

*** 액션 태그 접두어 : 태그 앞에 작성되어 태그의 그룹을 지정하는 것

 

 

 

01. 표준 액션 태그

 

✔️ jsp:include

jsp 파일이 java 파일로 변환될 때 삽입되는 <%@ include %>와 달리,

jsp 파일이 java 파일로 바뀌고 컴파일이 완료되어 런타임 시에 삽입된다.

별도의 라이브러리 설치가 필요 없다. 대신, jsp: 접두어가 붙는다.

현재 페이지에 특정 페이지를 포함할 때 사용한다.

 

✔️ jsp:forward

하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할 때 사용된다.

전달 할 때는 페이지에서 request, response 객체가 같이 전달된다.

스크립트릿을 열어서 코드로 작성하던 것과 달리, <태그> 로 전달한다.

URL은 바뀌지 않는다.

별도의 라이브러리 설치가 필요하다. 라이브러리 설치 후 페이지 지시자 중에 taglib를 추가해야한다.

request.forward() 와 동일한 기능이다.

 

✔️ jsp:param

jsp:include, jsp:forward의 하위 요소로 사용된다.

해당 페이지에 전달할 값을 기록할 때 사용한다.

 

 

 

02. 커스텀 액션 태그

  • 개발자가 직접 만들어서 사용하는 액션 태그로 라이브러리 형태로 설치해야만 사용이 가능하다.
  • 커스텀 액션 태그는 모든 태그의 이름 앞에 jsp: 이외의 접두어를 사용한다.

 

 


 

JSTL(JSP Standard Tag Library)

JSP에서 사용하는 커스텀 태그이다.

공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화 하여 표준으로 제공한 것을 말한다.

가독성을 높여주기 때문에 효율적으로 코드 작성이 가능하다.

 

[중요]

다운로드하고 설치한 라이브러리를 사용하려고 해도, 단순히 라이브러리를 추가하기만 해서는 사용할 수 없다.

실제 라이브러리를 .jsp 페이지에서 사용하려면 .jsp 페이지 내에 태그 라이브러리 지시자를 선언해야 한다.

이클립스 프로젝트 내에 WebContent/WEB-INF/lib 내에 등록하고

사용하고자 하는 jsp 파일에서 태그 라이브러리를 지시자를 선언해야 한다.

 

* 태그 라이브러리 지시자

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

 

 

JSTL 태그 종류

 

◾ JSTL Core Library

변수와 URL, 조건문, 반복문 등의 로직과 관련된 JSTL 액션 태그를 제공한다.

 

▪️ core tags

변수와 URL, 조건문, 반복문 등 로직과 관련된 JSTL 문법 제공

prefix="c"

 

<c:set>

변수를 선언하고 나서 그 변수에 초기 값을 대입한다.

자바에서 변수를 선언하는 방식과 비슷하다.

  • 변수 타입은 별도로 선언하지 않지만 초기 값은 반드시 작성해야 한다.
  • 변수 선언시에 scope를 지정할 수 있다. (지정하지 않으면 기본적으로 pageScope에 저장된다.)
  • 스크립트릿으로 지역변수로 등록하는 것이 아니라 영역 객체의 attribute로 등록하는 것이다. 따라서 EL 구문으로 접근
  • <c:set>으로 선언한 변수EL 식 안에서 사용이 가능하다.
  • 하지만 JSP <% %> 같은 스크립트릿 요소에서는 사용이 불가능하다.
  • WHY? 영역 객체에 변수를 저장하기 때문에 EL 식 안에서는 사용이 가능하다.

 

<c:set> scope 속성

page 영역이 **기본(미설정 시)**이지만, request, session, application 영역에도 속성을 저장할 수 있다.

 

<c:set> 배열 설정

<c:set>의 body 부분에 "," 이용해서 배열이나 Collection처럼 여러 개의 값을 지정할 수 있다.

body에 있는 값이 array 변수에 할당된 변수의 값이 된다.

<c:set></c:set> 여는 태그, 닫는 태그를 작성하고 그 안에 값을 , 로 나열하면 된다.

 

<c:out>

데이터를 출력할 때 사용하는 태그

<, >, & 특수 문자를 자동으로 escape sequence로 바꿔준다.

출력할 데이터에 포함된 특수 문자를 태그의 일부로 인식시키고 싶을 때는 escapeXml속성을 추가하고 false 값으로 지정하면 된다. (기본 값은 true)

 

<c:remove> 태그 배열 속성

<c:set>으로 선언한 변수는 영역 객체에 속성으로 저장되기 때문에 삭제가 필요할 때 사용한다.

별도의 scope 속성을 정의하지 않으면 모든 영역에 저장되어 있는 var 변수로 선언된 이름의 속성을 모두 찾아서 제거해버린다.

따라서 다른 영역에 동일한 이름으로 변수가 선언되어 있을 때에는 특정 영역에 있는 속성만 삭제하고 싶을 때는 반드시 scope를 명시 해야 한다.

 

<c:if>

자바의 if문과 비슷한 역할을 한다.

조건식은 test 라는 속성의 값으로 지정하고, 조건식은 반드시 EL 형식으로 기술한다.

 

<c:choose>

자바의 if else if 문 또는 switch 문과 비슷한 역할을 하는 태그이다.

각 조건들은 c:choose 문의 c:when 을 통해서 작성한다. (default 값으로는 c:otehrwise를 사용한다.)

when 안에 test 조건이 만족하면 그것만 출력하고 하위에 있는 when, otherwise 문은 사용하지 않고 choose문은 종료된다.

test 조건식은 EL 형식으로 작성해야한다.

 

<c:forEach>

자바의 for, for-in 문에 해당하는 기능을 제공하는 태그이다.

Collection이나 배열들을 지정하고 요소를 하나씩 가져와서 반복 하는 for-in 문 처럼 사용할 때는 items 속성 사용

 

<c:forEach begin="1" end="10" items="${list}" var="value">
		반복문<br>
</c:forEach>

<!-- items : 반복할 객체 이름(Collection 객체) -->
<!-- begin : 반복이 시작할 요소 번호(0 ... n) -->
<!-- end : 반복이 끝나는 요소 번호 -->
<!-- step : 반복할 횟수 번호 (증감식) -->
<!-- var : 현재 반복 횟수에 해당하는 변수 이름 -->
<!-- varStatus : 현재 반복에 해당하는 객체 요소 -->

<!-- varStatus -->

<c:forEach items="${booklist}" var="book" varStatus="status">

</c:forEach>
<!-- items : 반복할 객체 이름(Collection 객체) -->
<!-- "status" : 반복에 대한 상태를 가지고 있는 변수명 -->
<!-- current : 현재 반복 횟수 | 상태값명.current -->
<!-- index : 반복 라운드의 제로기반 인덱스(0 ... n) -->
<!-- count : 반복 라운드의 1 기반 인덱스(1 ... n) -->
<!-- first : 현재 라운드가 반복을 통한 첫번째이다. -->
<!-- last : 현재 라운드가 반복을 통한 마지막 번째이다. -->

 

<c:forTokens>

문자열에 포함된 구분자를 통해서 토큰을 분리해서 반복 처리하는 태그이다.

자바의 String.split() 또는 StringTokenizer와 비슷한 기능을 한다.

  • items 속성 : 토큰을 포함하는 문자열 지정
  • delims 속성 : 토큰을 분리하는데 사용할 구획 문자 지정, delims가 여러 개라면 순서에 상관없이 나열하면 된다.

 

<c:url>

URL 경로를 생성하고, 해당 URL의 param 속성을 선언하여 쿼리 스트링을 정의할 수 있는 태그이다.

해당 태그를 통해 URL 경로와 관련된 쿼리 스트링의 값을 미리 결정하여 이를 제어할 수 있다.

 

 

 

 

◾ JSTL Formatting Library

날짜, 시간, 숫자 데이터의 출력 형식을 지정할 때 사용하는 태그이다.

 

 

▪️ formatting tags

메시지 형식, 숫자, 날짜, 형식과 관련된 포맷 제공

prefix="fmt"

 

fmt:formatNumber

표현하고자 하는 숫자의 포맷을 통화 기호, ',' 표시, % 표시 등 원하는 쓰임에 맞게 지정 가능

  • 세 자리
  • 통화
  • 퍼센트
  • maxIntegerDigits : 표시하고자 하는 수의 단위를 표현 가능, 지정한 최대 값을 초과할 경우는 해당 자릿수 만큼만 표시
  • minIntegerDigits
  • maxFractionalDigits : 소수 자릿수를 지정, 숫자가 최소 자릿수를 초과할 경우 자동으로 반올림, parttern 속성을 사용하여 숫자 포맷 방법 지정 가능
  • minFractionalDigits

 

fmt:formatDate

화면에 출력될 날짜, 시간의 포맷 방식을 지정한다.

type 지정 방식에 따라 날짜, 시간 모두 표시 가능, dateStyle, timeStyle 속성으로 포맷 표기 방식 설정

value 속성으로는 java.util.Date() 객체 사용

 

 

fmt:setLocale

지역 설정을 통해 통화 기호, 시간 대역을 다르게 설정할 수 있다.

 

 

 

◾ JSTL Functions Library

문자열 처리에 관련된 메소드들을 EL 형식에서 사용할 수 있게 하는 라이브러리이다.

 

▪️ function

String 클래스에서 제공해주는 trim, substring과 같은 문자열 처리 함수 제공

문자열 처리에 관한 메소드들을 EL 형식에서 사용할 수 있도록 하는 라이브러리이다.

${fn:메소드명(문자열)} 형식으로 EL 태그에 직접 대입하여 사용한다.

prefix="fn"

'Programming > JSP' 카테고리의 다른 글

DAY 131. JSP - Redirect와 Forward의 차이점  (0) 2021.12.27
DAY 111. JSP - 내장 객체, 영역 스코프  (0) 2021.12.07
DAY 107. JSP - 기본 개념  (0) 2021.12.03