Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

JAVA 웹 프로그래밍 7주차 정리(EL/JSTL) 본문

2-2/JAVA 웹 프로그래밍 실무

JAVA 웹 프로그래밍 7주차 정리(EL/JSTL)

김브래 2023. 10. 14. 17:39

EL
(Expression Language)




EL(Expression Language)


등장 배경

스크립팅 요소 활용의 문제점

- 스크립틀릿으로 작성된 코드는 Java를 알지 못하는 개발자들에게는 이해 뿐 아니라 유지보수가 어렵다.

- 표현식은 간단하지만 제한적인 기능 제공으로 다양한 결과 출력이 어렵다.

- 표준 액션은 웹 개발자에게는 친근한 표현이고, 기본형 형변환을 지원하여 편리하지만 구문 구조가 복잡하고,

서브 프로퍼티를 접근할 수 없다는 단점이 있다.

 

스크립팅 요소의 활용이 적은 JSP 페이지를 작성하는 것이 추세임

 

정의

- JSP 기본 문법을 보완할 목적으로 간단하고 직관적인 표현으로 데이터, 속성, JSP 기본 객체 등

자바 컴포넌트들에 대한 손쉬운 접근 방법을 제공하는 스크립트 언어

 

주요 사용

- MVC 모델 2에서 간결하고 단순화된 (view)를 작성

 

형식

${<표현식>}

 

특징 및 장점

▣ 다음 요소들에 대한 간결하고 읽기 쉬운 접근을 제공한다.

유효범위 내 setAttribute()로 저장된 객체들

빈즈 객체의 프로퍼티들

▸ 컬렉션 요소들

EL 기본 객체의 프로퍼티들

 

▣ 간단하지만 유용한 연산자들과 조건문을 제공한다.

 

자동적인 형변환 제공한다.

필요한 경우 문자열을 숫자로 자동 형변환 한다.

 

값이 없는 경우 Empty value로 처리한다.

처리도중 값이 없거나 NullPointerExceptions이 오류를 발생시키지 않고 출력하지 않는다.

 

주요 기능

리터럴 데이터 출력
${출력내용} - ${10}, ${"안녕"},

 

각종 연산자를 제공하여 연산 결과 출력을 지원
${10+20} ${10%3}

 

attribute로 저장된 객체들 접근

빈즈 객체의 프로퍼티들 접근

▣ 컬렉션 요소들 접근

EL 기본 객체들의 프로퍼티들 접근

 

EL 사용 위치

HTML 태그안에서 사용

 

JSTL에서 사용

- <c:out value="${member.name}" />

 

표준 액션에서 사용

- <jsp:include page="${param.path}/result.jsp" />
- <jsp:getProperty name="member" property="name" />

 

주의

JSPscripting elements(스크립틀릿, 표현식, 선언식, 지시자)에서는 사용 못함

- <%= ${param.path} %> : 구문 오류가 발생함

 

예약어

식별자로 사용할 수 없다.

 

자료형

- 불리언, 정수, 실수
- 문자열 : ' 또는 "둘려싸여진,  ) "dream"
- null

 

연산자

연산자 활용

empty : 값이 널인지 여부를 반환

- ${empty param[“name”]} //name 값이 null인 경우 true

/ : 몫을 구함, div
% : 나머지를 구함, mod

 

비교연산자

- 피연산자는 동일한 유형의 데이터임
- 숫자와 숫자, 문자와 문자, 문자열과 문자열
- true / false 값을 반환함

 

논리연산자

- 피연산자가 불리언식임
- true / false 값을 반환함

 

객체 접근 연산자

- EL 표현식은 어떤 타입도 반환할 수 있다.

- EL 표현식의 반환 값이 속성을 가진 객체라면 []. 연산자를 이용해 속성에 접근할 수 있다.

- 두 연산자의 동작은 비슷하지만 []는 일반적인 형태이고, ‘. ’연산자는 좀 더 간략한 형태이다.

- 객체의 속성이 객체를 반환하며, 이 객체도 속성을 가질 경우에는 역시 []

. 연산자를 이용해 반환된 속성 객체의 속성에 접근할 수 있다.


EL 기본 객체


정의

- 효율적인 JSP와의 상호작용의 지원을 위해 미리 작성된 객체
참고
- pageContext 객체를 제외하고 JSP 기본 객체와는 다른 객체임
- request라는 기본 객체와 requestScope EL 기본 객체는 다름
 

특징

${ 표현식 } 내에서 첫번째 요소로 사용해야 한다.

- ${cookie.name.value}
- ${param.id}

pageContext

- JSP 페이지를 위한 컨텍스트 접근을 제공하는 기본 객체

- JSP 페이지의 환경 정보의 집합을 처리하는 객체

 

유효 범위 접근을 제공하는 기본 객체

pageScope

- page 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체

 

requestScope

- request 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체

 

sessionScope

- sessoin 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체

 

applicationScope

- application 유효 범위의 컬렉션 객체에 대한 접근을 제공하는 객체

 

묵시적인 EL표현식에 포함된 속성 이름이 해석되는 순서 

page -> request -> session -> application

EL 주요 활용


객체의 값을 출력

${internalObj}, ${beansObj}, ${attributedObj}

 

객체의 프로퍼티 또는 키의 값을 출력

§${mapObj.key}
${
internalObj.propertyName}
${
beansObj.propertyName}

 

객체의 프로퍼티, 키 또는 인덱스에 해당하는 값을 출력

${internalObj[“propertyName”]}
${
beansObj[“propertyName”]}
${
mapObj[“key”]}
${
listObj[index]}
${
arrayObj[index]}

 

JSP에서 속성(attribute)

웹 애플리케이션에서 정보를 공유하기 위해 사용하는 객체
 

JSP에서 프로퍼티(property)

특별한 규약(자바 빈 프로퍼티 스펙)을 준수하는 독립적으로 수행하는 자바 클래스를 구성하는 요소

- 프로퍼티 이름은 소문자로 시작됨, ex) name

- 프로퍼티 접근 메소드 이름에서는 get/set 뒤에 대문자로 시작됨, ex) getName(), setName()

 

서브 프로퍼티를 가질 수 있음

 

Attribute로 저장된 객체 접근

§pageContext.setAttribute(“attributeName”, “validPage”);
§request.setAttribute(“attributeName”, “validRequest”);
§session.setAttribute(“login”, “legalUser”);
§application.setAttribute(“dbName”, “pim”);
 

스크립틀릿 또는 표현식 사용

- <%= request.getAttribute(“attributeName”) %>
- <%= session.getAttribute(“login”) %>
 

EL 사용

- ${attributeName} : EL에서 동일한 Attribute 이름을 해석하는 순서는 좁은 범위에서 넓은 범위로임,

page => request => session => application

- ${pageContext.attributeName}, ${requestScope.attributeName}
- ${sessionScope.login}, ${applicationScope.dbName}
 

컬렉션(Collections) 객체 접근

propertyNameArrayList, 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 형식을 가진다.

- 개발자마다 구현이 달라 사용이 어려웠다.
 

의미

- 커스텀 태그(Custom Tag)들 중 공통적으로 널리 사용되는 태그들만을 모아 표준화한 라이브러리를 의미한다.

- 맵이나 컬렉션의 항목 순회, 조건에 따라 실행, XML 처리, 데이터베이스 접근, 데이터 조작 등의

작업을 처리하는 커스텀 태그 라이브러리의 집합을 의미한다


JSTL 설치 및 사용


설치 개요

JSTL의 최신 버전은 3.0.1

 

자바 커뮤니티 프로세스(JCP, Java Community Process )  JSR-52 전문가 그룹이 관리하였으나,

지금은 https://jakarta.ee/specifications/tags/ 에서 지원한다.

 

JSTL을 사용하려면 JSTL APIJSTL 구현체를 모두 다운로드해야 한다.

- JSTL APIjakarata.servlet.jsp.jstl 패키지를 포함하고 있으며, 이 패키지에는 JSTL 명세를 선언한 타입이 들어있다. JSTL 구현체는 구현 클래스를 포함한다.

 

파일 다운로드

JSTL의 구현체는 메이븐 저장소(mvnrepository)에서 ‘jstl-1.2.jar’다운로드할 수 있다.

- https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

Tomcat의 경우 ‘taglibs-standards-spec-1.2.5.jar’와 ‘taglibs-standards-impl-1.2.5.jar’ 를 사용한다.

 

<c:set>

용도 1 : EL 변수를 생성
용도 2 : 객체의 프로퍼티 값을 설정
#{expr} : 지연된 표현식(Deferred Expression)을 값으로 설정
 

<c:remove>

용도 : 지정한 변수를 삭제할 때 사용


제어 흐름 지원


<c:if>

스크립틀릿에서 if문과 동일한 기능을 수행함

 

<c:choose> <c:when> ... <c:otherwise>

<c:when>스크립틀릿에서 else if문과 동일한 기능임
<c:otherwise>스크립틀릿에서 else문과 동일한 기능임

 

<c:forEach>

스크립틀릿에서 for문과 동일함

 

<c:forTokens>

지정한 구분자로 분리한 토큰들을 순회할 때 사용함
 
참고

varStatus = "status"

-루프의 상태를 나타내는 속성

 

<c:out>

표현식을 평가하고, 그 결과를 JspWriter로 출력한다.

 

<c:catch>

발생된 예외를 EL 변수에 저장할 때 사용
 

<c:import>

현재 위치에 웹 애플리케이션 내부 자원 또는 외부 자원을 삽입함

 

<c:url>

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)

sStr을 모두 대문자 / 소문자로 변경
 

substring(sStr, idx1, idx2)

sStr 문자열에서 인덱스가 idx1에서 idx2 - 1 까지인 문자열을 반환
 

substringAfter(sStr, iStr)

iStr이후의 문자열을 반환
 

substringBefore(sStr, iStr)

iStr이전의 문자열을 반환

 

trim(sStr)

sStr의 좌우 공백을 제거한 문자열을 반환
 

replace(sStr, from, to)

sStr에 포함된 from 문자열을 to 문자열로 교체한 문자열을 반환
 

indexOf(sStr, iStr)

sStr에서 iStr이 시작하는 인덱스를 반환
 

length(sStr)

문자열인 경우 문자열의 길이를 반환
컬렉션인 경우 저장된 항목의 개수를 리턴

 

contains(sStr, iStr)

sStriStr이 포함되어 있는 경우 true를 반환
 

containsIgnoreCases(sStr, iStr)

대소문자 구분 없이 sStriStr이 포함되어 있는 경우 true를 반환
 

startsWith(sStr, iStr)

sStriStr로 시작되는 문자열인 경우 true를 반환
 

endsWith(sStr, iStr)

sStriStr로 끝나는 문자열인 경우 true를 반환

 

split(sStr, iStr)

sStr 문자열을 iStr 문자열을 기준으로 나누고 이를 String 배열로 반환
 

join(strArr, iStr)

strArr의 요소들을 iStr라는 구분자로 합친 문자열을 반환
 

escapeXml(sStr)

sStr 문자열에 포함된 특수문자를 변환함

SQL Tag Library


<sql:setDataSource>

데이터베이스 연결을 위한 데이터소스 생성
 

<sql:query>

데이터 조회를 수행하여 결과를 지정한 변수에 저장

 

<sql:update>

데이터 삽입, 업데이트, 삭제를 수행하여 결과를 지정한 변수에 저장

 

<sql:param>

SQL 쿼리들에 매개변수들을 설정
 

<sql:dateParam>

SQL 쿼리들에 날짜 시간 정보를 설정

 

<sql:transaction>

지정된 태그 사이에 설정된 SQL 쿼리들을 트랜잭션으로 실행, 예외가 발생하면 롤백을 수행

XML Tag Library


XML 문서들을 생성하거나 조작하기 위한 JSP 중심의 방법을 제공