Post

EL, JSTL

EL, JSTL

EL (Expression Language)

EL은 JSP 2.0부터 도입된 기술로, JSP 페이지에서 자바 코드 없이 속성 값을 쉽고 간결하게 출력하기 위한 언어이다.

EL 개요

  • EL은 데이터를 출력하기 위한 언어: JSP 페이지에서 변수나 객체의 속성(프로퍼티) 값을 웹 브라우저에 출력하는 데 사용
  • 문법이 간결하고 사용이 용이: <%= ... %>와 같은 JSP 표현식(Expression tag)보다 훨씬 간단한 문법을 제공하여 코드의 가독성을 높여즘
  • JSP 스크립트릿(Scriptlet)의 사용을 줄여줌: HTML과 자바 코드를 혼합하여 사용하는 스크립트릿의 복잡성을 줄여, JSP 페이지를 더 깔끔하게 유지 가능
  • 처리 가능한 데이터형:
    • Map
    • List, 배열
    • 자바빈 (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}
      • memberMap 객체인 경우, nameMap키(key)를 의미합니다.
      • member가 자바빈(JavaBeans)인 경우, name은 자바빈의 프로퍼티(property)를 의미합니다. (예: get Name() 메서드가 있는 경우)

EL 내장 객체

EL은 JSP의 스코프나 요청과 관련된 특정 내장 객체에 쉽게 접근할 수 있도록 미리 정의된 객체들을 제공합니다.

내장 객체설명
pageScopepage 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다.
requestScoperequest 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다.
sessionScopesession 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다.
applicationScopeapplication 영역(스코프)에 존재하는 변수 또는 속성을 참조할 때 사용합니다.
paramGET 또는 POST 방식으로 전달된 요청 파라미터(단일 값)에 접근할 때 사용합니다. 예: ${param.userId}
paramValuesGET 또는 POST 방식으로 전달된 요청 파라미터(배열 값)에 접근할 때 사용합니다. 예: <input type="checkbox" name="hobby" value="reading"> 처럼 여러 값을 가질 때 ${paramValues.hobby[0]}
headerHTTP 요청 헤더 정보(단일 값)에 접근할 때 사용합니다. 예: ${header.User-Agent}
headerValuesHTTP 요청 헤더 정보(배열 값)에 접근할 때 사용합니다.
cookie클라이언트로부터 전송된 쿠키 정보를 참조할 때 사용합니다. 예: ${cookie.JSESSIONID.value}
initParam웹 애플리케이션의 컨텍스트 초기화 파라미터(web.xml<context-param>)를 참조할 때 사용합니다.
pageContextPageContext 객체를 참조할 때 사용합니다. 이를 통해 다른 내장 객체나 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 계열, 배열에 접근할 때 사용합니다.
    • Mapkey, 자바빈의 property, List 배열의 index를 지정할 수 있습니다.
    • 특히 keyproperty 이름에 하이픈(-)이나 특수문자가 포함된 경우 [] 표기법을 사용해야 합니다.

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 scope
    • request 객체에 저장되는 속성입니다.
    • 클라이언트로부터의 하나의 요청이 유지되는 동안만 유효합니다.
    • forward 방식으로 다른 JSP/서블릿으로 제어가 넘어갈 때도 데이터가 유지됩니다.
    • 유지 기간: 요청이 끝나거나 응답이 클라이언트에 전달되면 소멸됩니다.
  • session scope
    • session 객체에 저장되는 속성입니다.
    • 세션이 만료되거나 제거될 때까지(request.getSession(), setMaxInactiveInterval, invalidate() 등) 유지됩니다.
    • 동일한 클라이언트(브라우저)가 웹 애플리케이션에 접속해 있는 동안 계속 유효합니다.
    • 유지 기간: 브라우저 종료, 세션 타임아웃, session.invalidate() 호출 시 소멸됩니다.
  • application scope
    • application context (ServletContext 객체)에 저장되는 속성입니다.
    • 웹 애플리케이션이 종료될 때까지 유효합니다. (웹 서버가 종료되거나 웹 애플리케이션이 재시작될 때)
    • 웹 애플리케이션 내의 모든 사용자(세션)가 공유하는 데이터를 저장할 때 사용됩니다.

EL (Expression Language) - 스코프 객체

EL은 각 스코프에 직접 접근할 수 있도록 다음과 같은 내장 객체(스코프 객체)를 제공합니다.

스코프 명EL(JSP)Servlet
page scopepageScope지역 변수
request scoperequestScopeHttpServletRequest
session scopesessionScopeHttpSession
application scopeapplicationScopeServletContext

EL에서 스코프 객체를 지정하지 않은 경우 속성 검색 순서

EL 표현식에서 스코프 객체를 명시적으로 지정하지 않고 단순히 ${속성명} 형태로 사용할 경우, EL은 다음과 같은 순서로 해당 이름의 속성을 찾습니다.

pagerequestsessionapplication

  • 예시: ${username}
    • EL은 먼저 pageScope에서 username이라는 속성을 찾습니다.
    • pageScope에 없으면 requestScope에서 찾습니다.
    • requestScope에 없으면 sessionScope에서 찾습니다.
    • sessionScope에도 없으면 applicationScope에서 찾습니다.
    • 특정 스코프에서 속성이 발견되면, 그 값을 출력하고 검색을 멈춥니다.

이러한 스코프 개념은 웹 애플리케이션에서 데이터의 생명주기를 관리하고 공유하는 데 매우 중요합니다.


JSTL (JSP Standard Tag Library) - Formatting Tag Library

JSTL은 JSP 페이지에서 자바 코드(스크립트릿) 사용을 줄이고 웹 페이지의 가독성을 높이며 유지보수를 용이하게 하기 위해 제공되는 표준 태그 라이브러리입니다. 그 중 Formatting 태그 라이브러리는 날짜, 시간, 숫자, 통화, 국제화(i18n) 관련 서식 지정을 처리하는 데 사용됩니다.

JSP Formatting 라이브러리 개요

  • 국제화/지역화(Internationalization/Localization) 및 데이터 포맷팅 기능을 제공합니다.
  • 국제화/지역화 -> 다국어 처리: 다양한 언어와 지역별 문화권에 맞게 웹 페이지의 내용을 변경할 수 있도록 지원합니다.
  • 데이터 포맷팅 -> 날짜와 숫자 처리: 날짜, 시간, 숫자, 통화 등의 데이터를 특정 형식에 맞춰 출력하거나 파싱(변환)하는 기능을 제공합니다.
  • 사용 방법: JSP 페이지 상단에 taglib 지시어를 사용하여 라이브러리를 선언해야 합니다.
    • <fmt taglib url="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
      • uri: JSTL Formatting 라이브러리의 URI를 지정합니다.
      • prefix: 태그를 사용할 때 접두어로 사용할 이름을 지정합니다. 여기서는 fmt로 지정되어 <fmt:태그명> 형태로 사용됩니다.

JSTL Formatting 라이브러리 태그

fmt 접두어를 사용하는 주요 태그들은 다음과 같습니다.

태그설명사용 예
requestEncodingsetCharacterEncoding(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 라이브러리는 웹 애플리케이션의 국제화 및 데이터 출력 포맷팅을 표준화하고 간소화하는 데 필수적인 도구입니다.

This post is licensed under CC BY 4.0 by the author.