브래의 슬기로운 코딩 생활
JAVA 웹 프로그래밍 7주차 정리(EL/JSTL) 본문
EL
(Expression Language)
EL(Expression Language)
등장 배경
스크립팅 요소 활용의 문제점
- 스크립틀릿으로 작성된 코드는 Java를 알지 못하는 개발자들에게는 이해 뿐 아니라 유지보수가 어렵다.
- 표현식은 간단하지만 제한적인 기능 제공으로 다양한 결과 출력이 어렵다.
- 표준 액션은 웹 개발자에게는 친근한 표현이고, 기본형 형변환을 지원하여 편리하지만 구문 구조가 복잡하고,
서브 프로퍼티를 접근할 수 없다는 단점이 있다.
스크립팅 요소의 활용이 적은 JSP 페이지를 작성하는 것이 추세임
정의
- JSP 기본 문법을 보완할 목적으로 간단하고 직관적인 표현으로 데이터, 속성, JSP 기본 객체 등
자바 컴포넌트들에 대한 손쉬운 접근 방법을 제공하는 스크립트 언어
주요 사용
형식
${<표현식>}
특징 및 장점
▣ 다음 요소들에 대한 간결하고 읽기 쉬운 접근을 제공한다.
▸ 유효범위 내 setAttribute()로 저장된 객체들
▸ 빈즈 객체의 프로퍼티들
▸ 컬렉션 요소들
▸ EL 기본 객체의 프로퍼티들
▣ 간단하지만 유용한 연산자들과 조건문을 제공한다.
▣ 자동적인 형변환 제공한다.
▸ 필요한 경우 문자열을 숫자로 자동 형변환 한다.
▣ 값이 없는 경우 Empty value로 처리한다.
▸ 처리도중 값이 없거나 NullPointerExceptions이 오류를 발생시키지 않고 출력하지 않는다.
주요 기능
▣ 리터럴 데이터 출력
${출력내용} - ${10}, ${"안녕"},
▣ 각종 연산자를 제공하여 연산 결과 출력을 지원
${10+20} ${10%3}
▣ attribute로 저장된 객체들 접근
▣ 빈즈 객체의 프로퍼티들 접근
▣ 컬렉션 요소들 접근
▣ EL 기본 객체들의 프로퍼티들 접근
EL 사용 위치
HTML 태그안에서 사용
JSTL에서 사용
표준 액션에서 사용
주의
- <%= ${param.path} %> : 구문 오류가 발생함
예약어
자료형
연산자
연산자 활용
empty : 값이 널인지 여부를 반환
- ${empty param[“name”]} //name 값이 null인 경우 true
비교연산자
논리연산자
객체 접근 연산자
- EL 표현식은 어떤 타입도 반환할 수 있다.
- EL 표현식의 반환 값이 속성을 가진 객체라면 []나 . 연산자를 이용해 속성에 접근할 수 있다.
- 두 연산자의 동작은 비슷하지만 []는 일반적인 형태이고, ‘. ’연산자는 좀 더 간략한 형태이다.
- 객체의 속성이 객체를 반환하며, 이 객체도 속성을 가질 경우에는 역시 []나
. 연산자를 이용해 반환된 속성 객체의 속성에 접근할 수 있다.
EL 기본 객체
정의
특징
${ 표현식 } 내에서 첫번째 요소로 사용해야 한다.
pageContext
- JSP 페이지의 환경 정보의 집합을 처리하는 객체
유효 범위 접근을 제공하는 기본 객체
pageScope
- page 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체
requestScope
- request 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체
sessionScope
- sessoin 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체
applicationScope
- application 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체
묵시적인 EL의 표현식에 포함된 속성 이름이 해석되는 순서
EL 주요 활용
객체의 값을 출력
객체의 프로퍼티 또는 키의 값을 출력
${internalObj.propertyName}
${beansObj.propertyName}
객체의 프로퍼티, 키 또는 인덱스에 해당하는 값을 출력
${beansObj[“propertyName”]}
${mapObj[“key”]}
${listObj[index]}
${arrayObj[index]}
JSP에서 속성(attribute)
JSP에서 프로퍼티(property)
특별한 규약(자바 빈 프로퍼티 스펙)을 준수하는 독립적으로 수행하는 자바 클래스를 구성하는 요소
- 프로퍼티 이름은 소문자로 시작됨, ex) name
- 프로퍼티 접근 메소드 이름에서는 get/set 뒤에 대문자로 시작됨, ex) getName(), setName()
서브 프로퍼티를 가질 수 있음
Attribute로 저장된 객체 접근
스크립틀릿 또는 표현식 사용
EL 사용
- ${attributeName} : EL에서 동일한 Attribute 이름을 해석하는 순서는 좁은 범위에서 넓은 범위로임,
즉 page => request => session => application
컬렉션(Collections) 객체 접근
propertyName이 Array나 List, Map 등 컬렉션 인스턴스인 경우
스크립틀릿 또는 표현식
- Array : arrayName[index]
- List : listName.get(index)
- Map : mapName.get(keyName)
EL 사용
- ${propertyName[keyName]}
- ${propertyName[“keyName”]}과 ${propertyName.keyName}은 동등한 표현임
JSTL
(Java Standard Tag Library)
JSTL 개요
등장 배경
- 프로그래머는 간결한 JSP 페이지 작성을 위해 다양하고 강력한 기능의 태그를 개발하여 사용하였다.
이를 커스텀 태그라고 한다.
- 커스텀 태그는 JSP 사용서에 기술되지 않은 태그로, 개발자들이 필요에 따라 생성한 태그들을 의미하고,
JSP 문법을 확장하기 위해 XML 기술을 이용하여 생성한 태그로 XML 형식을 가진다.
의미
- 맵이나 컬렉션의 항목 순회, 조건에 따라 실행, XML 처리, 데이터베이스 접근, 데이터 조작 등의
작업을 처리하는 커스텀 태그 라이브러리의 집합을 의미한다
JSTL 설치 및 사용
설치 개요
JSTL의 최신 버전은 3.0.1
자바 커뮤니티 프로세스(JCP, Java Community Process )의 JSR-52 전문가 그룹이 관리하였으나,
지금은 https://jakarta.ee/specifications/tags/ 에서 지원한다.
JSTL을 사용하려면 JSTL API와 JSTL 구현체를 모두 다운로드해야 한다.
- JSTL API는 jakarata.servlet.jsp.jstl 패키지를 포함하고 있으며, 이 패키지에는 JSTL 명세를 선언한 타입이 들어있다. JSTL 구현체는 구현 클래스를 포함한다.
파일 다운로드
JSTL의 구현체는 메이븐 저장소(mvnrepository)에서 ‘jstl-1.2.jar’를 다운로드할 수 있다.
- https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
<c:set>
<c:remove>
용도 : 지정한 변수를 삭제할 때 사용
제어 흐름 지원
<c:if>
<c:choose> <c:when> ... <c:otherwise>
<c:forEach>
스크립틀릿에서 for문과 동일함
<c:forTokens>
varStatus = "status"
-루프의 상태를 나타내는 속성
<c:out>
<c:catch>
<c:import>
현재 위치에 웹 애플리케이션 내부 자원 또는 외부 자원을 삽입함
<c:url>
<c:redirect>
International Tag Library
<fmt:setLocale>
<fmt:requestEncoding>
<fmt:formatNumber>
<fmt:formatDate>
<fmt:parseNumber>
로케일에 따라 포매팅한 문자열을 숫자로 파싱
<fmt:parseDate>
<fmt:timeZone>
<fmt:setTimeZone>
요구된 시간대(time zone) 값으로 설정
JSTL Functions
toUpperCase(sStr) / toLowerCase(sStr)
substring(sStr, idx1, idx2)
substringAfter(sStr, iStr)
substringBefore(sStr, iStr)
trim(sStr)
replace(sStr, from, to)
indexOf(sStr, iStr)
length(sStr)
contains(sStr, iStr)
containsIgnoreCases(sStr, iStr)
startsWith(sStr, iStr)
endsWith(sStr, iStr)
split(sStr, iStr)
join(strArr, iStr)
escapeXml(sStr)
SQL Tag Library
<sql:setDataSource>
<sql:query>
데이터 조회를 수행하여 결과를 지정한 변수에 저장
<sql:update>
데이터 삽입, 업데이트, 삭제를 수행하여 결과를 지정한 변수에 저장
<sql:param>
<sql:dateParam>
SQL 쿼리들에 날짜 시간 정보를 설정
<sql:transaction>
XML Tag Library
'2-2 > JAVA 웹 프로그래밍 실무' 카테고리의 다른 글
JAVA 웹 프로그래밍 8주차 정리 (DBMS, JDBC) (2) | 2023.10.25 |
---|---|
JAVA 웹 프로그래밍 6주차 정리 (JSP) (0) | 2023.10.11 |
JAVA 웹 프로그래밍 4주차 정리 (Servlet) (0) | 2023.09.28 |
JAVA 웹 프로그래밍 3주차 정리 (Servlet & JSP) (0) | 2023.09.20 |
JAVA 웹 프로그래밍 2주차 정리 (JAVA 웹 프로그래밍) (2) | 2023.09.13 |