땅콩이 맛난고 먹이자

[부스트코스]{2. DB 연결 웹 앱}(6. JSTL & EL -BE)_EL 본문

edwith_부스트코스_웹 프로그래밍

[부스트코스]{2. DB 연결 웹 앱}(6. JSTL & EL -BE)_EL

pea_Nut 2020. 3. 1. 13:01

EL(Expression Language)

jsp에서 표현식을 이용해 값을 출력할 때 변수의 값이 null이면 화면에 null이 출력되었다.

이 경우 null인지를 check한 후 null이면 아무것도 없는 문자열을 출력해야 하는 등 불편한 과정을 거쳐야 한다.

이때 EL을 사용하면 좀 더 편리하게 변수를 JSP에서 사용할 수 있다.

 

 

 

#표현언어란?

값을 표현하는 데 사용되는 스크립트 언어로서 JSP의 기본 문법을 보완하는 역할을 한다. 보통 jsp에 쓰이는 스크립트릿 등을 줄여 영역값을 일일이 받아 출력하는 수고로움을 덜 수 있으며 코드도 간결해진다. 

=> 기본적으로 스크립트릿 <% %> 안이 아닌 HTML 영역에 ${ }을 사용한다.

표현 언어가 제공하는 기능

JSP의 스코프(scope)에 맞는 속성 사용
집합 객체에 대한 접근 방법 제공
수치 연산, 관계 연산, 논리 연산자 제공
자바 클래스 메소드 호출 기능 제공
표현언어만의 기본 객체 제공

 

 

 

 

 

#표현 언어의 표현 방법

 

 

 

 

 

 

 

#표현 언어의 기본 객체

 

 

 

 

 

 

 

#표현 언어의 기본 객체 사용 예시

 

 

 

 

 

 

 

#표현 언어의 데이터 타입

 

불리언 타입 true와 false
정수타입 0~9로 이루어진 정수 값 음수의 경우 '-'가 붙음
실수타입  0~9로 이루어져 있으며, 소수점('.')을 사용할 수 있고, 3.24e3과 같이 지수형으로 표현 가능
문자열 타입 따옴표( ' 또는" )로 둘러싼 문자열. 만약 작은 따옴표(')를 사용해서 표현할 경우 값에 포함된 작은 따옴표는 \' 와 같이 \ 기호와 함께 사용
\ 기호 \ 기호 자체는 \\ 로 표시
널 타입 null

 

 

 

 

 

#문법

 

객체 접근 규칙
표현 1이나 표현 2가 null이면 null을 반환한다.
표현1이 Map일 경우 표현2를 key로한 값을 반환한다.
표현1이 List나 배열이면 표현2가 정수일 경우 해당 정수 번째 index에 해당하는 값을 반환한다.
만약 정수가 아닐 경우에는 오류가 발생한다.
표현1이 객체일 경우는 표현2에 해당하는 getter메소드에 해당하는 메소드를 호출한 결과를 반환한다.
표현 언어의 수치 연산자
+ : 덧셈
- : 뺄셈
* : 곱셈
/ 또는 div : 나눗셈
% 또는 mod : 나머지
숫자가 아닌 객체와 수치 연산자를 사용할 경우 객체를 숫자 값으로 변환 후 연산자를 수행 : ${"10"+1} → ${10+1}
숫자로 변환할 수 없는 객체와 수치 연산자를 함께 사용하면 에러를 발생 : ${"열"+1} → 에러
수치 연산자에서 사용되는 객체가 null이면 0으로 처리 : ${null + 1} → ${0+1}
비교 연산자
== 또는 eq
!= 또는 ne
< 또는 lt
> 또는 gt
<= 또는 le
>= 또는 ge
문자열 비교: ${str == '값'} str.compareTo("값") == 0 과 동일
논리 연산자
&& 또는 and
|| 또는 or
! 또는 not

 

 

 

 

 

#empty 연산자

 

 

 

 

#비교 선택 연산자

 

 

 

 

 

 

#연산자 우선순위

 

 

 

 

 

#표현 언어 비활성화: JSP에 명시하기

<%@ page isELIgnored = "true" %>

 

spec에 맞게 사용해야한다.

 

 

 

 

실습(JSP 파일)

 

#Scope별 표현 언어의 사용

각 scope별 저장 값들을 EL로 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    pageContext.setAttribute("p1", "page scope value");
    request.setAttribute("r1", "request scope value");
    session.setAttribute("s1", "session scope value");
    application.setAttribute("a1", "application scope value");
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
pageContext.getAttribute("p1") : ${pageScope.p1 }<br>
request.getAttribute("r1") : ${requestScope.r1 }<br>
session.getAttribute("s1") : ${sessionScope.s1 }<br>
application.getAttribute("a1") : ${applicationScope.a1 }<br>
<br><br>
pageContext.getAttribute("p1") : ${p1 }<br>
request.getAttribute("r1") : ${r1 }<br>
session.getAttribute("s1") : ${s1 }<br>
application.getAttribute("a1") : ${a1 }<br>

</body>
</html>

 

예제 코드 설명

 

0. Scope별로 값들 저장

pageContext.setAttribute("p1", "page scope value");

request.setAttribute("r1", "request scope value");

session.setAttribute("s1", "session scope value");

application.setAttribute("a1", "application scope value");

 

1. JAVA --> EL

pageContext.getAttribute("p1") --> ${pageScope.p1 }

request.getAttribute("r1") --> ${requestScope.r1 }

session.getAttribute("s1") --> ${sessionScope.s1 }

application.getAttribute("a1") --> ${applicationScope.a1 }

 

2. 변수 내용이 겹치지 않다면 더 간단하게 EL 코드로 작성 가능함

(*겹친다면 가장 작은 Scope 먼저 찾아냄)

pageContext.getAttribute("p1") --> ${p1 }

request.getAttribute("r1") --> ${r1 }

session.getAttribute("s1") --> ${s1 }

application.getAttribute("a1") --> ${a1 }

 

 

 

 

 

#표현 언어의 연산

k, m에다 값 저장 후 이를 불러와서 계산 한 값을 화면에 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setAttribute("k", 10);
    request.setAttribute("m", true);
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
k : ${k } <br>
k + 5 : ${ k + 5 } <br>
k - 5 : ${ k - 5 } <br>
k * 5 : ${ k * 5 } <br>
k / 5 : ${ k div 5 } <br>


k : ${k }<br>
m : ${m }<br>
k > 5 : ${ k > 5 } <br>
k < 5 : ${ k < 5 } <br>
k <= 10 : ${ k <= 10} <br>
k >= 10 : ${ k >= 10 } <br>
m : ${ m } <br>
!m : ${ !m } <br>

</body>
</html>

 

결과

 

=>만약 EL문법을 무시하고 그대로 출력하려면

<%@ page isELIgnored = "true" %>

 

 

 

 

 

 

#부스트코스 강의

https://www.edwith.org/boostcourse-web/lecture/16714/

 

[LECTURE] 1) EL(Expression Language) : edwith

들어가기 전에 jsp에서 표현식을 이용해 값을 출력할 때 변수의 값이 null이면 화면에 null이 출력되었습니다. 이 경우 null인지를 check한 후 null이면 아무것도 없... - 부스트코스

www.edwith.org