Expression Language
- 값을 간결하고 간편하게 출력할 수 있도록 해주는 언어
- <%= %>, out.println()과 같은 자바코드를 더이상 사용하지 않고 좀 더 간편하게 출력을 지원하기 위한 도구
- 배열이나 컬렉션에도 사용되고, javaBean의 프로퍼티에서도 사용된다.
${..}
내에 표현식으로 표현한다.
- 예시
${true} ${false} ${123} ${"java"} 📌 띄어쓰기는 있어도 상관 없지만, 오류처럼 인식한다.
EX)
<body>
<%
// 자바변수로 등록된 값을 그대로 사용하면 보이지 않는다.
String data = "hello";
// pageContext : '현재 페이지에 저장한다'는 뜻
pageContext.setAttribute("data", data);
%>
<!-- '\'는 문자열 그대로 출력한다는 의미
${data} : hello가 그대로 출력됨 -->
\${data} : ${data} <br/>
<!-- 30 -->
${10+20} <br/>
<!-- true -->
${10>3} <br/>
</body>
- EL식에서는 Attribute의 이름으로 해석이 된다. 값을 찾을 때 Attribute는 작은 Scope에서 큰 Scope로 찾는다.
- page > request > session > application
- 만약 특정한 객체 값을 가져오려면 Scope의 범위를 지정해서 호출
✔️ page scope : 하나의 JSP 페이지에서만 사용할 수 있는 영역 ✔️ request scope : 하나의 요청에서만 사용할 수 있는 영역 ✔️ session scope : 하나의 웹 브라우저에서 사용할 수 있는 영역 ✔️ application scope : 웹 어플리케이션 영역
- 산술연산자 : +, -, *, /(div), %(mode)
- 논리연산자 : &&(and), ||(or), !(not)
- 비교연산자 : ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)
- empty 연산자 : 값이 null이거나 공백문자인지를 판단하는 연산자
${empty ""} -> true ${empty null} -> true ${empty data} -> data에 값이 없으면 true
- 조건연산자 : a? b:c
a 조건이 만족하면 b를 리턴, 만족하지 않으면 c를 리턴
EX1)
Servlet.java
@WebServlet("/eltest")
public class Servlet extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
arg0.setAttribute("result", "success");
String[] names = {"lhy", "abc"};
arg0.setAttribute("names", names);
Map<String, Object> notice = new HashMap<String, Object>();
notice.put("id", 1);
notice.put("title", "el학습");
arg0.setAttribute("notice", notice);
RequestDispatcher dispatcher = arg0.getRequestDispatcher("/el/el_test2.jsp");
dispatcher.forward(arg0, arg1);
}
}
el_test2.jsp
<body>
<!-- success 출력 -->
<%=request.getAttribute("result") %> <br/>
${result}
<!-- 특정한 객체 값을 가져올 때 -->
${requestScope.result}
<!-- lhy, abc -->
${names[0]}<br/>
${names[1]}<br/>
<!-- 1, el학습 -->
${notice.id}<br/>
${notice.title}<br/>
</body>
EX2)
<BODY>
<!--
http://localhost:8081/el/el_test2.jsp?num=3
'?num=3', '?num=5' 등 url에 직접 값을 입력하는 것이 가능하다.
만약 '?num=3'을 입력했을 경우
-->
${param.num} // 페이지에 '3'이라고 표출
${param.num >= 3} // true
${param.num ge 3} // true (>=와 ge는 같은 의미)
${empty param.num} // false
${not empty param.num} // true
${empty param.num? '값이 비어있습니다.':param.num}
// 삼항연산자로 표현하기
</BODY>
EX3)
el_test3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="el_test4.jsp">
아이디 <input type="text" name="id" /><br/>
패스워드 <input type="password" name="pw" /><br/>
<input type="submit" />
</form>
</body>
</html>
el_test4.jsp
<body>
<!-- EL식에서는 값을 찾을 때 작은 Scope에서 큰 Scope로 찾는다.
pageContext.getAttribute("id");
requestContext.getAttribute("id");
sessionContext.getAttribute("id");
applicationContext.getAttribute("id");
-->
아이디 ${param.id } <br/>
패스워드 ${param.pw } <br/>
</body>
EX4)
<body>
<%
ArrayList<String> arList = new ArrayList<>();
arList.add("Hello");
arList.add("JSP");
arList.add("EL");
arList.add("JSTP");
pageContext.setAttribute("list",arList);
%>
<!-- for문으로 작성해야되는 걸 간편하게 표현 가능 -->
${list }<br/>
</body>