EL (Expression Language)
- EL의 표현식 : ${ }
- 값(데이터)을 웹 페이지에 표시하는데 사용하는 태그로, JSP 2.0부터 간단하게 사용할 수 있는 출력용 언어인 EL이 개발됨
→ 프론트 쪽 태그와 쉽게 어울릴 수 있게 기획됨
JSP 표현식 : <%= %> → ${ 자바 영역으로 생각하자 }
- 요청객체로부터 특정 값을 가져와 JSP 표현식을 사용해 출력하는 코드
<%
String id = request.getParameter("id");
%>
<%= id %>
- 위의 코드를 EL로 바꿔보자
${ param.id }
- 두 코드를 비교해보면,
❶ EL로 코드를 작성하는 것이 불필요한 코드 줄여줌 → JSP 페이지의 전체적인 코드 간결해짐
❷ 자바 코드가 줄어듦 → 디자인적 요소( HTML, CSS )와 자바 코드를 서로 구분하기 쉬워짐
- 자바 코드를 몰라도 getter/setter 호출 및 약간의 연산 등도 가능
- EL을 이용한 출력
· EL을 이용하는 경우, 자동으로 getter를 호출함
· 멤버변수 : private 지정 후, getter / setter 속성함수로 접근
→ EL 표현식으로는 자동적으로 getter 호출되므로, private로 지정된 멤버변수를 속성함수없이 바로 접근 가능
ex ) getTno( ) 대신 ${ list[0].tno }로 작성할 수 있음
물론 정식표현인 ${ list[0].getTno } 도 가능
· ${ } 내부에 표현식이 결과를 만들어 낼 수 있다면 언제든 사용 가능
⇒ EL : JSP에서 간단한 표현식을 이용해서 데이터의 출력만을 담당하는 용도
예시를 통해 EL 표현식에 대해 알아보자.
* JSP file 생성 시, 하단의 Advanced 클릭 → 폴더까지 생성 가능
① el_01EL연습.jsp
- 서블릿 / JSP에서 데이터 출력하는 방법 3가지
: EL, 표현식, Scriptlet
· Scriptlet : 내장객체인 out의 println( ) 메서드 이용해 출력
→ JSP 페이지가 생성하는 결과를 출력할때 사용되는 출력 스트림
② el_02EL데이터형.jsp
- EL에서는 5가지의 데이터형 제공
데이터형 | 예시 | 설명 |
boolean | ${ true } ${ 3 > 2 } |
true와 false값을 가짐 |
int | ${ 1000 } | 0 ~ 9로 이루어진 정수를 표현, 음수 표현 시 - 가 붙음 |
double / float | ${ 3.14 } | 실수를 표현하며, 소수점 사용 및 지수형 표현 가능 |
String | ${ 'Hello' } ${ "Hello" } |
문자열로 작은따옴표 또는 큰따옴표로 표현 가능 |
null | ${ null } | EL의 결과가 null인 경우, 최종적으로 출력하는 값은 "" (공백 문자열) |
※ 일반적으로 자바에서 null은 가르키는 주소가 없음을 의미 → 콘솔창에 NPE(Null Pointer Exception) 예외 발생
웹에서는 출력할 데이터가 없으면, 빈 공백으로 처리됨
③ el_03연산자연습.jsp
- 일부 연산은 평소에 사용하는 연산자 이외에 lt, gt와 같은 키워드를 통한 연산이 가능함
연산자 구분 | 연산자 | 설명 |
산술 연산자 | + | 덧셈 |
- | 뺄셈 | |
* | 곱셈 | |
/ or div | 나눗셈 | |
% or mod | 나머지 연산 | |
비교 연산자 | == or eq | 앞의 값이 뒤의 값과 같으면 true |
!= or ne | 앞의 값이 뒤의 값과 다르면 true | |
< or lt | 앞의 값이 뒤의 값보다 작으면 true | |
> or gt | 앞의 값이 뒤의 값보다 크면 true | |
<= or le | 앞의 값이 뒤의 값보다 같거나 작으면 true | |
>= or ge | 앞의 값이 뒤의 값보다 같거나 크면 true | |
empty 연산자 | empty < 대상 > | < 대상 >이 null이거나 빈 문자열 또는 길이가 0인 배열이나 List, 비어있는 Map, Collection 객체인 경우, true를 리턴함 |
비교 선택 연산자 | < 수식 > ? <값1> : < 값2 > | 앞의 <수식>이 true인 경우 < 값1 >, false인 경우 <값2>를 리턴함 |
※ ${ } 표기를 문자열 그대로 출력하고 싶은 경우, $ 앞에 '\(역슬래시)'를 붙여주면 됨
( null 여부 검사 내용 추가 )
④ el_04요청파라미터처리.jsp
- EL에서 사용할 수 있는 내장 객체 중 요청 파라미터와 관련된 것만 살펴보자.
분류 | 내장 객체 | 설명 | 예시 |
요청 파라미터 | param | HTTP 요청 파라미터 값 참조하는 Map 객체 | ${ param.파라미터명 } |
paramValues | HTTP 요청 파라미터를 배열로 참조하는 param과 다르게 배열이므로 속성명 뒤에 배열의 요소를 참조하는 것처럼 [ index ]를 붙여주어야 함 | ${ paramValues.속성명[index] } ${ paramValues.name[3] } |
• el_04do.jsp
- 향상된 for문 : 배열 또는 여러 원소를 포함한 자료형일 때 이용
for ( 자료형 변수명 : 배열명 ) {
}
⑤ el_05logon.jsp
- 태그의 method를 따로 작성하지 않은 경우, GET 방식으로 처리됨
- <label> 태그 : 폼의 양식에 이름 붙이는 태그
· for 속성 : label의 for 속성 값과 양식의 id 값이 같으면 연결됨
→ label 클릭 시, 연결된 양식에 입력할 수 있도록 하거나, 체크를 하거나 체크를 해지함
즉, input 태그의 type 속성에 맞게 처리됨
- <input> 태그의 id 속성과 name 속성 비교
❶ id 속성
: page 영역에서 중복으로 사용 불가, 주로 JavaScript에서 다루기 위해 지정
❷ name 속성
: page 영역에서 중복되어 사용 가능, action에 해당하는 페이지에 전달할 수 있는 파라미터로 사용
- : ‘Non-breaking Space’을 의미하는 HTML entity로, 줄바꿈을 일으키지 않는 공백을 의미함
→ 띄어쓰기는 되지만, 자동으로 줄바꿈은 되지 않음
즉, 줄바꿈을 일으키지 않으면서 공백을 넣고 싶을 때 를 사용함
→ '아이디' 클릭 시, 양식에 입력할 수 있도록 연결됨
• el_05logon_do.jsp
➊ 고전적 방식 : 요청객체에서 정보를 얻어와 표현식으로 출력
❷ EL 방식 : EL의 내장 객체인 param을 이용해 출력
⑥-➊ el_06null.jsp
• el_06null.jsp를 실행시킨 경우
: EL의 결과가 null인 경우, 최종적으로 출력하는 값은 "" (공백 문자열)
• id에 입력하지 않을 경우
• id 값에 ‘중앙’을 입력한 경우
⑥-❷ el_06값비교_자바.jsp
→ 500 내부 서버 오류 발생
: NPE 오류
요청객체로부터 가져온 id 값이 null 상태인데, 값과 비교하려고 했으므로 예외 발생
• id에 비어있는 상태로 값은 존재 / null 상태 아님
• id 값에 “seoul” 입력해보자
※ 자바와 달리 EL식에서 '==' 연산자로 비교 : 주소 비교가 아닌 값 비교를 기본으로 함
⑥-❸ el_06null_에러처리.jsp
: 500 에러 java.lang.nullpointerexception 논리 오류
- 사용자가 올바른 입력을 제공함에도 불구하고 잘못된 출력을 생성 할 때 Java 로직 오류가 발생
- 값을 가져와서 사용하기 전에, 그 값이 null 값인지 먼저 확인 후 사용하자!
null은 값이 아니라 상태!
- View에는 비즈니스 로직 포함시키지 말자!
• 요청 파라미터 id가 null인 경우
param으로 처리할 경우, 빈 공백이 출력되거나 값이 출력됨 ( null 값 나오지 않음 )
• id에 비어있는 상태로 값은 존재 / null 상태 아님
• id 값에 “seoul” 입력해보자
⑦ el_07간단계산기.jsp
• el_07간단계산기_결과.jsp
'백엔드 > JSP' 카테고리의 다른 글
JSP : JSTL (0) | 2023.06.19 |
---|---|
웹 프로그래밍의 시작 (3) (0) | 2023.06.18 |
웹 프로그래밍의 시작 (2) (0) | 2023.06.16 |
웹 프로그래밍의 시작 (1) (0) | 2023.06.14 |
JSP Servlet 기초 (8) : Session (0) | 2023.06.13 |