590 likes | 780 Views
9. 익스프레션 언어. 학습목표 익스프레션 언어 ( 표현식 언어 ) 는 JSP 규격서가 처음 만들어질 때부터 있던 문법이 아니라 새롭게 추가된 문법이다 . 이 문법을 이용하면 데이터를 출력하는 코드를 함축적이고 간결하게 구사할 수 있어 코드의 가독성과 유지보수 용이성에 큰 도움이 된다 . 내용 익스프레션 언어란 ? 익스프레션 언어의 기초 문법 익스프레션 언어의 연산자 익스프레션 언어로 자바의 정적 메서드 호출하기. 1. 익스프레션 언어란 ?.
E N D
9 익스프레션 언어
학습목표 • 익스프레션 언어(표현식 언어)는 JSP규격서가 처음 만들어질 때부터 있던 문법이 아니라 새롭게 추가된 문법이다. 이 문법을 이용하면 데이터를 출력하는 코드를 함축적이고 간결하게 구사할 수 있어 코드의 가독성과 유지보수 용이성에 큰 도움이 된다. • 내용 • 익스프레션 언어란? • 익스프레션 언어의 기초 문법 • 익스프레션 언어의 연산자 • 익스프레션 언어로 자바의 정적 메서드 호출하기
1. 익스프레션 언어란? • 익스프레션 언어(expression language) / 표현식 언어 • 식(expression)을 중심으로 코드를 기술하는 언어 • JSP Spec. 2.0에서 정의 • 자바빈의프로퍼티의프로퍼티를 접근을 지원 • 연산자와 피연산자의 조합을 ${와 }로 둘러싸서 표현한다. • cnt데이터 이름의 의미는 서로 다르다. • 표현식에서 사용된 cnt는 자바 프로그래밍 언어의 변수 이름이며, EL 식에서 사용된 cnt는 내장 객체에 저장되어 있는 속성의 이름이다. 표현식언어의 식(EL식) 표현식
1. 익스프레션 언어란? 덧셈의 결과를 속성로저장합니다 호출 [그림 7-1] 속성 형태로 전달되는 데이터 속성 값을 가져다가 출력합니다.
1. 익스프레션 언어란? 덧셈의 결과를 속성으로 저장합니다 호출 [그림 7-2] 속성값을 출력하는 EL 식 속성값을 가져다가 출력합니다.
2. 익스프레션 언어의 기초 문법 • 익스프레션 언어에서의 식 표현 • 익스프레션 언어의 유일한 목적은 식을 계산해서 그 결과를 출력하는 것 • EL 식의 표현 • 식’위치에는 데이터 이름 하나로만 구성된 식이 들어갈 수도 있고, 연산자를 포함하는 식이 들어 갈 수도 있으며, 자바의 정적 메서드를 호출하는 식이 들어갈 수도 있다. EL 식의 문법 ${ 식 } 데이터 이름 하나로만 구성된 EL 식 연산자를 포함하는 EL 식 자바의 정적 메서드를 호출하는 EL 식
2. 익스프레션 언어의 기초 문법 • 데이터 이름 하나로만 구성된 EL식 • 데이터 이름 하나로만 구성된 EL식은 가장 간단한 형태의 EL식이다. • EL 식 안에 기술되는 데이터 이름은 속성 이름으로 해석 내장 객체에 저장된 속성 애트리뷰트 이름 [표 7-1] JSP/서블릿 기술에서 사용되는 네 종류의 속성
2. 익스프레션 언어의 기초 문법 • 데이터 이름 하나로만 구성된 EL식 request 내장 객체에 속성으로 저장합니다 request 내장 객체에 있는 속성값을 가져다가 출력합니다
2. 익스프레션 언어의 기초 문법 • 데이터 이름 하나로만 구성된 EL식 pageContext내장 객체에 속성으로 저장합니다 pageContext내장 객체에 있는 속성값을 가져다가 출력합니다. [그림 7-4] 예제 7-2의 실행 결과
2. 익스프레션 언어의 기초 문법 • 데이터 이름 하나로만 구성된 EL식 • EL식에 있는 데이터 이름을 해석하는 순서는 생존 범위가 좁은 속성부터 점점 더 생존 범위가 넓은 속성 순으로 진행 된다. • 순서에 상관없이 특정한 종류의 속성를 지정하여 출력하고 할 때는 생존 범위 EL 내장 객체를 사용하여 표시하면 된다. page 속성임을 표시 request 속성임을 표시 session 속성임을 표시 application 속성임을 표시
2. 익스프레션 언어의 기초 문법 • 데이터 접근 EL식
2. 익스프레션 언어의 기초 문법 • EL접근 연산자 • Dot(.) 연산자
2. 익스프레션 언어의 기초 문법 • EL접근 연산자 • [] 연산자
2. 익스프레션 언어의 기초 문법 • EL접근 연산자 • [] 연산자 – 배열 사용
2. 익스프레션 언어의 기초 문법 • EL접근 연산자 • [] 연산자 – 배열 및 리스트에서 문자열 인덱스는 숫자로 변환
2. 익스프레션 언어의 기초 문법 • EL접근 연산자 • 자바빈과맵 객체에 대해서는 Dot(.) 연산자 및 [] 연산자 모두 사용 가능
2. 익스프레션 언어의 기초 문법 • EL접근 연산자 • [] 연산자에서 [] 안의 문자열 처리 방법 • “”(따옴표) 문자열 – [] 왼쪽에서 정의된 항목에 따라 다르게 처리 • 맵 객체 키(key) 값으로 처리 • 빈 객체 프로퍼티 이름으로 처리 • 배열 또는 리스트 인덱스 값으로 전환하여 처리 • “”(따옴표)를 사용하지 않은 문자열 – 실행하여 값을 산출하거나 대응하는 속성을 검색 • 단순 문자열 EL 내장 객체 또는 생존 범위 내장 객체에 저장된 속성을 검색하여 대치 • 수식 실행하여 값으로 대치 Music is ${musicMap[“Ambient”] Music is Zero 7 “Genre” 키가 없어 NULL 값 반환 Music is
2. 익스프레션 언어의 기초 문법 • EL접근 연산자 • [] 연산자에서 [] 안의 표현식 • [] 안에 표현식 작성이 가능(Nested Expression) • 포함되는 표현식의 깊이에는 제한이 없다 • 표현식을 실행할 때에는 안쪽에서 바깥쪽 순서로 진행
2. 익스프레션 언어의 기초 문법 • 익스프레션 언어의 내장 객체 [표 7-2] 익스프레션 언어의 내장 객체 자바빈
2. 익스프레션 언어의 기초 문법 • 생존 범위 EL 내장 객체 • JSP 내장 객체들에 저장(바인딩)되어 있는 속성들의 맵 객체 • pageScope내장 객체 : pageContext내장 객체에 바인딩된 속성의 맵 • requestScope내장 객체 : request 내장 객체에 바인딩된 속성의 맵 • sessionScope내장 객체 : session 내장 객체에 바인딩된 속성의 맵 • applicationScope내장 객체 : application 내장 객체에 바인딩된 속성의 맵 • 주로 특정 생존 범위에 바인딩된 속성을 접근할 때에 사용 모든 생존 범위에 해당하는 내장객체를 검색 session 내장객체만 검색
2. 익스프레션 언어의 기초 문법 • param 내장 객체 • 웹 브라우저에서 <FORM> 엘리먼트를 통해 입력된 데이터를 가져올 때 사용 • 사용 방법 • param뒤에 마침표를 찍고 해당 데이터 이름을 쓰는 방법 • param뒤에 대괄호를 치고, 그 안에 작은따옴표나 큰 따옴표로 묶은 데이터 이름을 쓰는 방법 • paramValues내장 객체 • 동일한 이름으로 여러 개의 데이터가 입력되는 파라미터을 접근할 때에 사용 • param내장 객체의 데이터를 접근 하는 방법과 동일 • 인덱스를 사용하여 특정 데이터를 접급 • EL식의 인덱스가 0부터 시작하므로, 첫 번째 데이터 값을 가져오기 위해서는 인덱스를 0이라고 써야 하고, 두 번째 데이터 값을 가져오기 위해서는 1이라고 써야 한다. 입력 데이터의 이름 입력 데이터의 이름 입력 데이터 이름 인덱스 입력 데이터 이름 인덱스
2. 익스프레션 언어의 기초 문법 • param & paramValues내장 객체
2. 익스프레션 언어의 기초 문법 • param & paramValues내장 객체 • param과 paramValues내장 객체를 사용하는 웹 애플리케이션을 작성해보자. ① 데이터를 선택하고 ‘확인’ 버튼을 누르면 ②선택한 데이터가 나타납니다. [그림 7-5] 애완동물 웹 애플리케이션의 화면 설계
2. 익스프레션 언어의 기초 문법 • param & paramValues내장 객체 • 앞 두 화면을 HTML문서와 JSP페이지로 구현하고, URL을 각각 다음과 같이 정한다. 위쪽 화면의 URL 아래쪽 화면의 URL
2. 익스프레션 언어의 기초 문법 • param & paramValues내장 객체 ① [예제 7-3]의 URL을 입력하세요. ②데이터를 선택하고 ‘확인’ 버튼을 누르면 ③결과 화면이 나타날 것입니다.
2. 익스프레션 언어의 기초 문법 • header 내장 객체 • HTTP요청 메시지에 포함된 HTTP헤더 값을 접근할 때에 사용 • 접근 표현식 작성 : • header 객체의 이름 뒤에 마침표를 찍고 그 다음에 해당 헤더 이름을 쓰는 것 • header 객체의 이름 뒤에 대괄호를 치고 그 안에 따옴표로 묶은 헤더 이름을 표기 • 첫 번째 사용 방법의 제약 사항 - HTTP헤더 이름이 자바의 식별자 명명 규칙을 따르지 않을 때는 사용할 수 없다. HTTP 헤더 이름 HTTP 헤더 이름 잘못된 EL 식 올바른 EL 식
2. 익스프레션 언어의 기초 문법 • headerValues 내장 객체 • HTTP요청 메시지 안에 똑같은 이름의 HTTP헤더가 둘 이상 있을 때는 header내장 객체 대신 headerValues내장 객체를 사용 • headerValues내장 객체의 이름 뒤에 마침표나 대괄호를 이용해서 헤더 이름을 표시하고, 그 다음에 대괄호로 묶은 인덱스를 표시해야 한다. HTTP 헤더 이름 인덱스 HTTP 헤더 이름 인덱스
2. 익스프레션 언어의 기초 문법 • cookie 내장 객체 (1) • 웹 브라우저가 웹 서버로 보낸 쿠키를 가져올 때 사용 • Dot(.) 연산자와 [] 연산자 모두 사용 가능 • 위 EL식이 가져오는 것은 쿠키의 값이 아니라 쿠키 객체이므로, JSP페이지 안에 이런 EL식을 써 놓으면 사용자에게 아무 의미 없는 쿠키 객체의 참조 값만 출력될 것이다. • 쿠키를 가져오는 식 뒤에 마침표를 찍고 value라고 쓰거나, 대괄호를 치고 그 안에 ‘value’또는 “value”라고 쓰면 쿠키 값이 출력된다. 쿠키의 이름 쿠키의 이름 쿠키의 값을 가져오라는 표시 쿠키의 값을 가져오라는 표시 쿠키의 값을 가져오라는 표시 쿠키의 값을 가져오라는 표시
2. 익스프레션 언어의 기초 문법 • cookie 내장 객체 (2) • 쿠키 객체 안에는 쿠키 값 외에도 쿠키가 속하는 도메인 이름, URL경로명, 쿠키의 수명 같은 중요한 정보들이 들어 있다. • 그런 정보를 출력하기 위해서는 앞 페이지와 같은 형식의 EL식에서 value라는 이름을 빼고 대신 domain, path, maxAge라는 이름을 써 넣으면 된다. 쿠키의 도메인 이름을 가져오라는 표시 쿠키의 URL 경로명을 가져오라는 표시 쿠키의 수명을 가져오라는 표시
2. 익스프레션 언어의 기초 문법 • cookie 내장 객체 (3) 쿠키 데이터를 웹 브라우저 쪽에 저장합니다 쿠키 데이터의 값을 가져와서 출력합니다
2. 익스프레션 언어의 기초 문법 • cookie 내장 객체 (4) 쿠키 데이터를 저장하는 JSP 페이지의 URL을 입력하세요 쿠키 데이터를 출력하는 JSP 페이지의 URL을 입력하세요 [그림 7-7] 예제 7-5의 실행 결과
2. 익스프레션 언어의 기초 문법 • initParam 내장 객체 • 웹 애플리케이션의 초기화 파라미터 값을 접근할 때에 사용 • initParam 내장 객체의 이름 뒤에 마침표나 대괄호를 이용해서 해당 초기화 파라미터의 이름을 표시한다. 웹 애플리케이션의 초기화 파라미터 이름 웹 애플리케이션의 초기화 파라미터 이름
2. 익스프레션 언어의 기초 문법 • pageContext 내장 객체 (1) • JSP페이지의 주변 환경에 대한 정보를 제공 • JSP 내장 객체 papeContext와 동일 • 다른 EL 내장 객체는 맵 객체인 반면에 pageContext는 자바빈 객체임 • pageContext내장 객체의 타입은 java.servlet.jsp.PageContext • get으로 시작하는 이름의 메서드를 호출 가능 • 빈의 프로퍼티 이름을 이용하여 접근 가능 • getRequest메서드의리턴값을 출력하는데, 그 값은 JSP 페이지의 request내장 변수의 값과 동일한 객체이므로 사용자에게 아무 의미도 없는 참조값만 출력된다. getRequest메서드를 가리키는 단어 getRequest메서드를 가리키는 단어
2. 익스프레션 언어의 기초 문법 • pageContext 내장 객체 (2) • 다음과 같은 EL식을 이용하면 JSP페이지의 URL경로명을 출력할 수 있다. getRequestURI메서드의리턴값을 가져오는 단어 getRequestURI메서드의리턴값을 가져오는 단어 getRequestURI메서드의리턴값을 가져오는 단어 getRequestURI메서드의리턴값을 가져오는 단어
2. 익스프레션 언어의 기초 문법 • pageContext 내장 객체 (3) [그림 7-11] 예제 7-7의 실행 결과
3. 익스프레션 언어의 연산자 • EL 연산자
3. 익스프레션 언어의 연산자 • 산술 연산자, 비교 연산자, 논리 연산자, 조건 연산자 • 자바 연산자와 동일한 기능을 하는 연산자들에 대해 알아보자.
3. 익스프레션 언어의 연산자 • 산술 연산자, 비교 연산자, 논리 연산자, 조건 연산자 • 톰캣의brain07 웹 애플리케이션 디렉터리에 Operators.jsp라는 이름으로 저장 후 실행해 본다. URL 뒤에 이런 식으로 두 개의 수를 쓰세요. [그림 7-12] 예제 7-8의 실행 결과
3. 익스프레션 언어의 연산자 • 산술 연산자, 비교 연산자, 논리 연산자, 조건 연산자 • 익스프레션 언어의 연산자 중에는 HTML문법이나 JSP문법에서도 특별한 의미를 갖는 기호를 사용하는 것이 있다. • 이런 기호들이 잘못 해석되는 것을 방지하기 위해 익스프레션 언어에서는 기호로 된 연사자들과 똑같은 기능을 하는 영문 단어 연산자들을 추가로 만들어 놓고 있다.
3. 익스프레션 언어의 연산자 • 산술 연산자, 비교 연산자, 논리 연산자, 조건 연산자 • 앞 예제를 톰캣의brain07웹 애플리케이션 디렉터리에 CharOperators.jsp라는 이름으로 저장한 후 실행해 본다. URL 뒤에 이런 식으로 두 개의 수를 쓰세요. [그림 7-13] 예제 7-9의 실행 결과
3. 익스프레션 언어의 연산자 • 산술 연산자, 비교 연산자, 논리 연산자, 조건 연산자 • 익스프레션 언어의 연산자 중에는 같은 모습으로 다른 기능을 하는 것도 있다. 두 값이 같으면 true 다르면 false 유니코드에 따른 사전식 비교. CAR가 먼저이므로 true 유니코드에 따른 사전식 비교. CAT이 먼저이므로 false
3. 익스프레션 언어의 연산자 • 산술 연산자, 비교 연산자, 논리 연산자, 조건 연산자 • 앞 예제를 톰캣의brain07웹 애플리케이션 디렉터리에 StringOperators.jsp라는 이름으로 저장한 후에 실행해 본다. URL 뒤에 이런 식으로 두 개의 수를 쓰세요. [그림 7-13] 예제 7-9의 실행 결과
3. 익스프레션 언어의 연산자 • empty 연산자 • 데이터의 존재 여부를 확인하는 단항 연산자 • 피연산자인 데이터 이름은 empty라는 연산자 이름 뒤에 써야 한다. 데이터 이름
3. 익스프레션 언어의 연산자 • 괄호 연산자 • 여러 개의 연산자가 포함된 수학식에는 왼쪽에서부터 오른쪽으로 계산 • 가감승제 연산자가 뒤섞여 있을 때는 곱셈, 나눗셈이 덧셈, 뺄셈보다 먼저 계산 • 익스프레션 언어의 연산자에도 마찬가지로 우선순위가 있다. • EL식 안에 여러 개의 연산자가 있으면 왼쪽부터 오른쪽으로 순서대로 처리되지만, 우선순위가 다른 연산자가 섞여 있으면 높은 우선순위의 연산자가 먼저 처리된다. • 우선순위를 바꾸기 위해서는 수학식과 마찬가지로 괄호를 사용하면 된다. 곱셈이 먼저 수행됩니다 덧셈이 먼저 수행됩니다.
3. 익스프레션 언어의 연산자 • 괄호 연산자 • 익스프레션 언어의 연산자 우선 순위
3. 익스프레션 언어의 연산자 • NULL 값 처리 • 예외 처리를 하기 보다는 상황에 맞게 해석하여 처리
4. EL 함수 등록과 호출 • EL 함수 • 자바 클래스의 정적 메서드를EL 함수로 등록하여 호출 가능 • EL함수를 사용하기 위해서는.tld확장자를 갖는 TLD파일에 등록해야 한다. • TLD(Tag Library Descriptor) 파일 • 태그 라이브러리 기술자’를 의미 • web.xml 파일과 달리 하나의 웹 애플리케이션 디렉터리 내에 여러 개 존재 할 수 있다 • 루트 엘리먼트는<tablib>가 되어야 하며 그 엘리먼트 안에 <tlib-version>과 <short-name>이라는 두 개의 서브엘리먼트를 반드시 정의하여야 한다. 태그 라이브러리의 버전 태그 라이브러리의 버전
4. EL 함수 등록과 호출 • 자바의 정적 메서드를EL함수로 등록하는 방법 • TDL 파일에서 <taglib> 엘리먼트 아래에 <function>이라는 서브엘리먼트를 추가 • <function>엘리먼트 안에 <name>, <function-class>, <function-signature>라는 3개의 서브 엘리먼트를 추가 • <name> 엘리먼트 안에는 개발자가 정한 EL함수의 이름을, <function-class> 안에는 EL함수로 등록할 정적 메서드가 속하는 자바 클래스의 풀네임, <function-signature> 안에는 그 메서드의시그니처(메서드 이름, 리턴 타입, 파라미터 타입)을 작성 • 위의 <function> 엘리먼트는 자바 표준 라이브러리에 있는 java.lang.Math클래스의 sqrt메서드를squareroot라는 이름의 EL함수로 등록한다. EL 함수의 이름 자바 클래스의 이름 정적 메서드의시그니처
4. EL 함수 등록과 호출 • TLD 파일 작성 • TLD 파일을 완성하려면 루트 엘리먼트는<tablib> 안에 TLD 파일의 작성에 사용된 문법의 식별자와 그 문법의 버전을 다음과 같이 기재해야 한다. • TLD 파일을 완성한 다음에는 web.xml 파일에 등록하여웹 컨테이너는TLD 파일의 존재를 인식하도록 한다. TLD 문법의 식별자 TLD 문법의 버전
4. EL 함수 등록과 호출 • TLD 파일 등록 • TLD 파일을 web.xml파일에 등록하는 방법 • web.xml파일의 루트 엘리먼트인<web-app>안에 <taglib>라는 서브엘리먼트를 만들고, 그 안에 <taglib-uri>와 <taglib-location>이라는 2개의 서브엘리먼트를 만든다. 그 두 엘리먼트 안에 각각 TLD파일의 식별자로 사용할 URI와 TLD파일의 경로명을 쓴다. • <taglib-url> 엘리먼트에는 다음과 같이상대 URI을 쓸 수도 있다. TLD 파일의 식별자 TLD 파일의 경로명 TLD 파일의 식별자 TLD 파일의 경로명