오늘은 이전 포스팅에서 예재 언어로 자주 사용했던 EL(Expression Language)에 대해서 포스팅해 보겠습니다!
■ EL(Expression Language)란?
EL이란 JSP에서 자바 코드를 더욱 간결하게 하기 위해 만들어졌습니다. 어떻게 보면 완벽하게 자바 코드를 JSP에서 걷어내고 EL을 통해 가독성을 높이고자 한 것 같습니다.
즉, EL은 데이터를 표현하기 위한 언어입니다.
그럼 기본 문법을 알아봅시다.
■ EL(Expression Language) 기본 문법
EL의 기본 문법은 ${ 표현식 }입니다. 표현식에는 변수명, 속성명, 메서드 구조로 이루어져 있고, 정수형, 실수형, 문자열형, 논리형, NULL이 올 수 있습니다. 정리하자면 다음과 같습니다.
- 값이 null 이어도 예외가 발생하지 않음
- 표현언어는 항상 "${"로 시작해서 "}"로 끝남 ex) ${num}
- 표현식 안에 연산식도 쓸 수 있음 ex) ${num + 1}
그럼 간단한 사칙연산 코드를 통해서 EL 문법을 알아봅시다.
<예제 코드>
<%@ 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>
<script src="../include/jquery-3.6.3.min.js"></script>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<!--
1) EL의 특징 : JSP에 내장되어 있다. 코드가 깔끔하다. 조건문,반복문의 기능은 없다. 간단한 계산은 가능
-->
<!-- EL은 간단한 사칙연산 및 삼항연산등은 가능하다. -->
${2 + 5} <br>
${4 / 5} <br>
${7 mod 5} <br> <!-- 나머지 계산 -->
${2 < 3} <br>
${3.1 le 3.2} <br> <!-- LEss(작다) -->
<!-- 삼항연산자 -->
${(5>3) ? 5 : 3} <br>
</body>
</html>
EL은 조건문, 반복문의 기능은 없고 간단한 계산은 가능하기 때문에 조건문이나 반복문 등의 제어문과 복잡한 연산 기능을 할 때는 JSTL을 응용합니다.
따라서 EL은 단독으로 쓰이지 않고 JSTL과 혼합해서 사용합니다.
EL 언어에 대해서 좀 더 자세하게 이해하기 위해 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>
<script src="../include/jquery-3.6.3.min.js"></script>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<%-- <% JSP 기본 문법
String name= request.getParameter("name");
if(name ==null){
name ="";
}
%>
--%>
<!-- EL 기법 -->
<!-- form태그에 action="url"을 생략하면 자신의 페이지가 호출되어 실행된다. -->
<form method="get" >
이름 : <input name="name" value="${param.name}">
<input type="submit" value="확인">
</form>
이름 : ${param.name}
</body>
</html>
위 코드만 봐도 코드가 깔끔해지는 걸 볼 수 있습니다. 참고로 Attribute 형식에는 ${attr}로 사용하고. attr은 자바에서는 변수 이름이고, EL에서는 Attribute의 이름으로 해석됩니다.
Attribute는 application > session > request > page 순으로 작은 범위에서 큰 범위로 찾게 됩니다.
또한 위 예제 코드에서 사용했던 ${param.name}은 폼, 쿼리스트링 변수이며, 기존 문법으로는 request.getParameter입니다.
그럼 마지막으로 한 가지 비교 예제 코드를 통해 EL과 JAVA 코드의 차이점을 확인하고 포스팅을 마무리하겠습니다.
예제 코드로는 오랜만에 HashMap을 응용하여 과일 이름을 출력하는 코드로 알아봅시다.
<예제 코드>
<%@ 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>
<script src="../include/jquery-3.6.3.min.js"></script>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<%@ page import="java.util.HashMap" %>
<%
HashMap<String, String> map = new HashMap<>();
map.put("포도", "grape");
map.put("오렌지", "orange");
map.put("바나나", "banana");
map.put("사과", "apple");
request.setAttribute("map", map);
%>
<jsp:forward page="ex06_result.jsp"></jsp:forward>
</body>
</html>
map에 key, value를 각각 입력해서 put으로 담아주고 result 페이지에서 결과를 출력하려고 합니다. 위 코드에서 <jsp:forward>는 다른 페이지로 제어를 이동시킬 때 사용하는 태그인데, 이전 포스팅에서 알아봤던 액션 태그입니다.
JSP 액션 태그에 대해서 궁금하신 분들은 아래 포스팅을 참고해 봅시다.
result.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>
<script src="../include/jquery-3.6.3.min.js"></script>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<%@ page import="java.util.HashMap" %>
<h2>java 코드로 출력</h2>
<%
HashMap<String,String> map=(HashMap<String,String>)request.getAttribute("map");
for(String f : map.keySet()){ //keyset()은 key들을 배열로 만들어 가져옴
out.println(f+":"+ map.get(f) + "<br>"); //map.get("변수명"), map.set("변수명",값)
}
%>
<hr>
<h2>EL/JSTL 출력</h2>
${map["포도"]} <br>
${map["오렌지"]} <br>
${map["바나나"]} <br>
${map["사과"]} <br>
</body>
</html>
이전 포스팅부터 말씀드렸지만 유틸 패키지는 꼭 page import를 해주셔야 합니다.
<%@ page import="java.util.HashMap" %>
그럼 결과를 확인해 봅시다.
마치며
오늘은 EL에 대해서 알아봤습니다.
다음 포스팅은 EL과 혼합해서 사용하는 JSTL로 뵙겠습니다.
'[ View ] > JSP' 카테고리의 다른 글
[ JSP ] Mybatis 개념 및 설정 (0) | 2023.03.16 |
---|---|
[ JSP ] JSTL(Jsp Standard Tag Library) (2) | 2023.03.15 |
[ JSP ] Cookie (0) | 2023.03.11 |
[ JSP ] JDBC 암호화 (0) | 2023.03.08 |
[ JSP ] JAVA Bean (0) | 2023.03.07 |