JSP(Java Server Pages)란 정적인 HTML 코드에 자바 코드를 넣어서 동적인 웹페이지를 구성할 수 있게 만드는 웹 어플리케이션 도구이다.
EL(Expression Language)란 이러한 JSP의 출력을 보다 쉽게 하기 위해 개발된 코드이다.


EL은 다른 표현식보다 사용방법이 간단하고 문법체계가 직관적이다.
EL은 ${ }의 중괄호 사이에 데이터를 넣어 값을 표현한다.
EL: 데이터 타입, 연산자


EL이 표현할 수 있는 데이터 타입에는 정수형, 실수형, 문자열형, 논리형, null값 그리고 연산자가 있다.
EL에서의 연산 중 /(div), %(mod), ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)와 같은 특정 연산에 한해서는 연산자와
EL 예약 키워드를 혼용할 수 있다.
이때 EL에서 정수끼리의 나눗셈(/, div)의 결과 값이 실수로 자동 형변환된다.
EL의 관계연산자 표현
\${5 == 2 } : ${5 == 2 } => \${5 eq 5 }: ${5 eq 2 }<br>
\${5 != 2 } : ${5 != 2 } => \${5 ne 5 }: ${5 ne 2 }<br>
\${5 < 2 } : ${5 < 2 } => \${5 lt 5 }: ${5 lt 2 }<br>
\${5 > 2 } : ${5 > 2 } => \${5 gt 5 }: ${5 gt 2 }<br>
\${5 <= 2 } : ${5 <= 2 } => \${5 le 5 }: ${5 le 2 }<br>
\${5 >= 2 } : ${5 >= 2 } => \${5 ge 5 }: ${5 ge 2 }<br>

EL의 연산자
연산자 종류 | 연산자 |
산술 | +, -, *, /(div), %(mod) |
관계 | ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge) |
조건 | a ? b : c |
논리 | &&(and), ||(or), !(not) |
null 검사 | empty |
*관계 표현식 줄임말
eq: equal / ne: not equal
lt: little / gt: greater
le: little or equal / ge: greater or equal
각 표현식별 null값

표현식(<%= %>)과 out.print() 함수에 직접적으로 null을 넣으면 에러가 나 존재하지 않는 속성인 data를 표현하게 하였다.

EL은 null을 공백으로, 나머지 표현식은 null을 null로 표시하는 것을 알 수 있다.
EL: 요청 파라미터 처리하기
사용자가 폼에 입력한 값을 얻어오기 위해서 JSP 내장 객체인 request의 getParameter() 메소드를 사용했었다.
EL(표현 언어)에서는 request.getParameter() 대신 param 객체를 사용한다.
param.파라미터명
param.['파라미터명'], param.["파라미터명"]
내장 객체 | 설명 |
param | request.getParameter()와 동일 |
paramValues | request의 getParameterValues()와 동일 |
직접 코드를 확인하여 사용법을 익혀보자!
ex6_form.jsp
<form action="ex6_result.jsp" method="post">
<input type="text" name="id" placeholder="아이디"> <br>
<input type="password" name="pwd" placeholder="비밀번호"><br>
<input type="submit" value="로그인"><br>
</form>
ex6_result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
아이디: ${param.id }<br>
비밀번호: ${param.pwd }<br>
--------------<br>
아이디: ${param['id'] }<br>
비밀번호: ${param['pwd'] }<br>
ex6_form.jsp로부터 폼태그 내부 데이터인 id와 pwd를 전달 받고 이를 EL과 param 객체를 통해 출력하는 코드이다.


EL: 보관소 검색 범위 지정
이름 | 보관소 |
pageScope | JspContext |
requestScope | ServletRequest |
sessionScope | HttpSession |
applicationScope | ServletContext |
위의 표는 EL에서 보관소를 참조할때 사용하는 이름이다.
ex7_A.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("data", "pageContext");
request.setAttribute("data", "request");
session.setAttribute("data", "session");
application.setAttribute("data", "application");
%>
범위 지정X: ${data }<br>
pageContext: ${pageScope.data }<br>
request: ${requestScope.data }<br>
session: ${sessionScope.data }<br>
application: ${applicationScope.data }<br>
<a href="ex7_B.jsp">이동</a>

보관소의 범위를 지정하지 않았을 때는 pageScope -> requestScope -> sessionScope -> applicationScope순으로 data를 검색한다.
pageScope에 data속성이 존재하기 때문에 ${data}는 pageContext로 표현된다.
보관소의 범위를 지정하면 해당 보관소에서만 data를 검색한다.

맨 밑에 a태그를 클릭하면 클라이언트는 웹 서버에 ex7_B.jsp를 새롭게 요청(request)한다.
pageScope에 저장된 속성은 해당 jsp이 실행되는 동안에만 유지되고, requestScope에 저장된 속성도 클라이언트가 웹 서버에 새로운 요청을 보내기 전까지 유지된다.
따라서 웹 서버가 요청 받은 ex7_B.jsp의 코드를 실행했을 때에는 pageScope, requestScope 내부의 data 속성이 사라진 상태이다.
클라이언트의 화면에는 웹 서버에 의해 실행된 결과가 나타나고 pageContext객체와 request객체를 통해 지정한
data 속성의 데이터는 null이기 때문에 EL은 이를 공백으로 표시한다.

EL의 내장 객체와 jsp 내장 객체를 혼동하지 말자!
방법1. 스크립트 릿에서 만든 자바 변수를 EL표현식으로 표현할 수 없으므로 되도록
액션 태그를 사용해 인스턴스를 생성
or
방법2. 내장 객체의 속성에 자바 변수를 추가하여 EL표현식으로 표현할 수 있음
<jsp:useBean>태그의 scope속성을 생략 시 기본 값인 pageContext객체에 저장돼서
EL표현식으로 해당 인스턴스를 표현할 때 pageContext의 속성을 찾아
NullpointerException이 발생하지 않음
참고
JSP - EL 표현식 문법과 사용 방법
JSP - EL 표현식 문법과 사용 방법 EL(Expression Language)은 자바 빈의 프로퍼티, 값을 JSP의 표현식 <%= %>이나 액션 태그 를 사용하는것 보다 쉽고 간결하게 꺼낼수 있게 하는 기술이다. 또한 static
atoz-develop.tistory.com
'Jsp' 카테고리의 다른 글
[jstl] 회원 가입, 로그인, 로그아웃, 회원 정보 수정, 회원 탈퇴(코드 포함) (0) | 2022.05.24 |
---|---|
[jsp] JSTL (0) | 2022.05.21 |
[jsp] 액션 태그, 사용법 (0) | 2022.05.19 |
[jsp] 회원가입, 회원정보 수정, 회원탈퇴(필수 값 검증, 정규표현식 검증) (0) | 2022.05.17 |
[jsp 내장 객체] session 개념, 로그인 성공 시 아이디 저장 예제 (0) | 2022.05.12 |