EL, JSTL
EL (Expression Language)
EL은 JSP 2.0부터 도입된 기술로, JSP 페이지에서 자바 코드 없이 속성 값을 쉽고 간결하게 출력하기 위한 언어이다.
EL 개요
- EL은 데이터를 출력하기 위한 언어: JSP 페이지에서 변수나 객체의 속성(프로퍼티) 값을 웹 브라우저에 출력하는 데 사용
- 문법이 간결하고 사용이 용이:
<%= ... %>와 같은 JSP 표현식(Expression tag)보다 훨씬 간단한 문법을 제공하여 코드의 가독성을 높여즘 - JSP 스크립트릿(Scriptlet)의 사용을 줄여줌: HTML과 자바 코드를 혼합하여 사용하는 스크립트릿의 복잡성을 줄여, JSP 페이지를 더 깔끔하게 유지 가능
- 처리 가능한 데이터형:
MapList,배열자바빈(JavaBeans): getter/setter 메서드를 통해 접근 가능한 객체
EL 기본 문법
- 표현식:
${표현식}형태를 가짐 - 내장 객체나
scope에 저장된 속성을 지정: EL은 JSP의 네 가지 기본 스코프(영역)인page,request,session,application에 저장된 속성(attribute)에 접근할 수 있습니다.${내장 객체.속성}또는${속성}속성으로만 접근할 경우, EL은page->request->session->application순서로 해당 이름의 속성을 찾아 가장 먼저 발견된 것을 반환합니다.
<%= %>(JSP 표현식)와의 차이:EL은 단순히scope의 속성 값이나 자바 표현식의 결과를 출력하는 데 특화되어 있습니다.JSP 표현식은 자바 코드를 실행하고 그 결과를 출력하는 데 사용되지만, EL은 더 간결하고 특정 목적(데이터 출력)에 집중합니다.
Map계열이거나 자바빈이 지정된 경우:${member.name}member가Map객체인 경우,name은Map의 키(key)를 의미합니다.member가 자바빈(JavaBeans)인 경우,name은 자바빈의 프로퍼티(property)를 의미합니다. (예:getName() 메서드가 있는 경우)
EL 내장 객체
EL은 JSP의 스코프나 요청과 관련된 특정 내장 객체에 쉽게 접근할 수 있도록 미리 정의된 객체들을 제공합니다.
| 내장 객체 | 설명 |
|---|---|
pageScope | page 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다. |
requestScope | request 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다. |
sessionScope | session 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다. |
applicationScope | application 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다. |
param | GET 또는 POST 방식으로 전달된 요청 파라미터(단일 값)에 접근할 때 사용합니다. 예: ${param.userId} |
paramValues | GET 또는 POST 방식으로 전달된 요청 파라미터(배열 값)에 접근할 때 사용합니다. 예: <input type="checkbox" name="hobby" value="reading"> 처럼 여러 값을 가질 때 ${paramValues.hobby[0]} |
header | HTTP 요청 헤더 정보(단일 값)에 접근할 때 사용합니다. 예: ${header.User-Agent} |
headerValues | HTTP 요청 헤더 정보(배열 값)에 접근할 때 사용합니다. |
cookie | 클라이언트로부터 전송된 쿠키 정보를 참조할 때 사용합니다. 예: ${cookie.JSESSIONID.value} |
initParam | 웹 애플리케이션의 컨텍스트 초기화 파라미터(web.xml의 <context-param>)를 참조할 때 사용합니다. |
pageContext | PageContext 객체를 참조할 때 사용합니다. 이를 통해 다른 내장 객체나 JSP 관련 정보에 접근할 수 있습니다. |
EL 연산자
EL은 자바의 연산자와 유사한 다양한 연산자들을 제공하여 표현식 내에서 간단한 연산을 수행할 수 있도록 합니다.
| 연산자 | 설명 |
|---|---|
. | 자바빈 또는 Map에 접근할 때 사용합니다. (member.name, map.key) |
[] | 배열 또는 List에 접근할 때 사용합니다. (array[0], list[i]), 또는 Map의 키에 접근할 때 사용합니다. (map["key"]) |
() | 우선순위 연산자 (수학적 우선순위를 지정) |
empty | 값이 null이거나 빈 문자열(""), 빈 배열, 빈 컬렉션 등을 판단하는 연산자로, true 또는 false를 리턴합니다. |
+, -, *, /, % | 산술 연산자와 나머지 연산자 |
==, eq | 동등 비교 연산자 |
!=, ne | 부동 비교 연산자 |
<, lt | 미만 비교 연산자 |
<=, le | 이하 비교 연산자 |
>, gt | 초과 비교 연산자 |
>=, ge | 이상 비교 연산자 |
&&, and | 논리 AND 연산자 |
||, or | 논리 OR 연산자 |
!, not | 논리 NOT 연산자 |
배열 표기법
${member['name']}Map계열, 자바빈(JavaBeans),List계열, 배열에 접근할 때 사용합니다.Map의key, 자바빈의property,List배열의index를 지정할 수 있습니다.- 특히
key나property이름에 하이픈(-)이나 특수문자가 포함된 경우[]표기법을 사용해야 합니다.
EL은 JSP 페이지의 가독성을 높이고 코드 작성을 간소화하는 데 크게 기여했으며, 현대적인 JSP/웹 개발에서 필수적으로 사용됩니다. 제공된 image_6f6898.png 파일은 JSP에서 사용되는 표현 언어(Expression Language, EL)의 스코프(Scope)와 스코프 객체, 그리고 속성 검색 순서에 대해 설명하고 있습니다.
EL (Expression Language) - 스코프 (Scope)
웹 애플리케이션에서 데이터가 유지되는 범위(생명주기)를 스코프(영역)라고 합니다. JSP/서블릿 환경에는 4가지 주요 스코프가 존재합니다.
page scope- 한 페이지(
Servlet또는JSP파일) 내에서만 유효합니다. - 해당 JSP 또는 서블릿 내에서만 접근 가능한 지역 변수와 유사합니다.
- 유지 기간: 요청이 처리되는 동안 해당 JSP/서블릿 내에서만 유지됩니다.
forward될 경우,page scope에 저장된 데이터는 유지되지 않습니다.
- 한 페이지(
request scoperequest객체에 저장되는 속성입니다.- 클라이언트로부터의 하나의 요청이 유지되는 동안만 유효합니다.
forward방식으로 다른 JSP/서블릿으로 제어가 넘어갈 때도 데이터가 유지됩니다.- 유지 기간: 요청이 끝나거나 응답이 클라이언트에 전달되면 소멸됩니다.
session scopesession객체에 저장되는 속성입니다.- 세션이 만료되거나 제거될 때까지(
request.getSession(),setMaxInactiveInterval,invalidate()등) 유지됩니다. - 동일한 클라이언트(브라우저)가 웹 애플리케이션에 접속해 있는 동안 계속 유효합니다.
- 유지 기간: 브라우저 종료, 세션 타임아웃,
session.invalidate()호출 시 소멸됩니다.
application scopeapplication context(ServletContext객체)에 저장되는 속성입니다.- 웹 애플리케이션이 종료될 때까지 유효합니다. (웹 서버가 종료되거나 웹 애플리케이션이 재시작될 때)
- 웹 애플리케이션 내의 모든 사용자(세션)가 공유하는 데이터를 저장할 때 사용됩니다.
EL (Expression Language) - 스코프 객체
EL은 각 스코프에 직접 접근할 수 있도록 다음과 같은 내장 객체(스코프 객체)를 제공합니다.
| 스코프 명 | EL(JSP) | Servlet |
|---|---|---|
page scope | pageScope | 지역 변수 |
request scope | requestScope | HttpServletRequest |
session scope | sessionScope | HttpSession |
application scope | applicationScope | ServletContext |
EL에서 스코프 객체를 지정하지 않은 경우 속성 검색 순서
EL 표현식에서 스코프 객체를 명시적으로 지정하지 않고 단순히 ${속성명} 형태로 사용할 경우, EL은 다음과 같은 순서로 해당 이름의 속성을 찾습니다.
page → request → session → application
- 예시:
${username}- EL은 먼저
pageScope에서username이라는 속성을 찾습니다. pageScope에 없으면requestScope에서 찾습니다.requestScope에 없으면sessionScope에서 찾습니다.sessionScope에도 없으면applicationScope에서 찾습니다.- 특정 스코프에서 속성이 발견되면, 그 값을 출력하고 검색을 멈춥니다.
- EL은 먼저
이러한 스코프 개념은 웹 애플리케이션에서 데이터의 생명주기를 관리하고 공유하는 데 매우 중요합니다.
JSTL (JSP Standard Tag Library) - Formatting Tag Library
JSTL은 JSP 페이지에서 자바 코드(스크립트릿) 사용을 줄이고 웹 페이지의 가독성을 높이며 유지보수를 용이하게 하기 위해 제공되는 표준 태그 라이브러리입니다. 그 중 Formatting 태그 라이브러리는 날짜, 시간, 숫자, 통화, 국제화(i18n) 관련 서식 지정을 처리하는 데 사용됩니다.
JSP Formatting 라이브러리 개요
- 국제화/지역화(Internationalization/Localization) 및 데이터 포맷팅 기능을 제공합니다.
- 국제화/지역화 -> 다국어 처리: 다양한 언어와 지역별 문화권에 맞게 웹 페이지의 내용을 변경할 수 있도록 지원합니다.
- 데이터 포맷팅 -> 날짜와 숫자 처리: 날짜, 시간, 숫자, 통화 등의 데이터를 특정 형식에 맞춰 출력하거나 파싱(변환)하는 기능을 제공합니다.
- 사용 방법: JSP 페이지 상단에
taglib지시어를 사용하여 라이브러리를 선언해야 합니다.<fmttaglib url="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>uri: JSTL Formatting 라이브러리의 URI를 지정합니다.prefix: 태그를 사용할 때 접두어로 사용할 이름을 지정합니다. 여기서는fmt로 지정되어<fmt:태그명>형태로 사용됩니다.
JSTL Formatting 라이브러리 태그
fmt 접두어를 사용하는 주요 태그들은 다음과 같습니다.
| 태그 | 설명 | 사용 예 |
|---|---|---|
requestEncoding | setCharacterEncoding(enc) 메서드와 동일한 기능을 수행하며, 요청 문자 인코딩을 설정합니다. | <fmt:requestEncoding ...> |
setLocale | 다국어 처리 시 사용될 언어 및 지역 설정을 지정합니다. | <fmt:setLocale ...> |
timeZone | 지정된 시간으로 시간을 설정합니다. | <fmt:timeZone ...> |
setBundle | .properties 형식의 리소스 번들 파일을 참조하여 다국어 메시지를 가져올 때 사용합니다. | <fmt:setBundle ...> |
message | 번들에서 설정된 값을 가져와 출력합니다. | <fmt:message ...> |
formatNumber | 숫자의 형식(소수점, 콤마 등)을 포맷합니다. | <fmt:formatNumber ...> |
parseNumber | 문자를 숫자로 변환(파싱)합니다. | <fmt:parseNumber ...> |
formatDate | 날짜의 형식을 포맷합니다. | <fmt:formatDate ...> |
parseDate | 문자를 날짜로 변환(파싱)합니다. | <fmt:parseDate ...> |
<fmt:formatNumber> 태그
<fmt:formatNumber> 태그는 숫자 데이터를 특정 형식으로 출력할 때 사용되는 핵심 태그입니다.
- 수치 데이터를 특정 포맷으로 설정 시 사용하는 태그입니다.
- 속성:
value: 실제 수치 값을 지정합니다.type:number,currency,percent중에서 출력할 값의 유형을 지정합니다.pattern: 사용자가 지정한 형식 패턴을 설정합니다.var: 포맷팅된 결과를 저장할 변수 이름을 지정합니다.scope:var로 지정된 변수가 저장될 스코프를 지정합니다.currencySymbol: 통화 기호를 지정합니다.maxIntegerDigits: 정수의 최대 자리수를 지정합니다.minIntegerDigits: 정수의 최소 자리수를 지정합니다.maxFractionDigits: 소수점 이하 최대 자릿수를 지정합니다.minFractionDigits: 소수점 이하 최소 자릿수를 지정합니다.
- 예시:
1 2 3
<fmt:formatNumber value="값" type="타입" pattern="패턴" var="변수" scope="스코프" currencySymbol="값" minIntegerDigits="값" maxIntegerDigits="값" minFractionDigits="값" maxFractionDigits="값" />
JSTL Formatting 라이브러리는 웹 애플리케이션의 국제화 및 데이터 출력 포맷팅을 표준화하고 간소화하는 데 필수적인 도구입니다.