수업 내용/[JSP] JSP

[JSP] 07. EL (Expression Language)

프롯 2023. 5. 23. 19:09

EL 은 자바 빈의 프로퍼티, 값을 JSP의 표현식 <%= %>이나 액션 태그 <jsp:useBean>를 사용하는것 보다 쉽게 출력할 수 있게 해주는 태그이다.

 

표기법 : ${ }

다른 태그보다 훨씬 간단하다.

 

 

다른 표현식과의 비교

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	//1~100 값의 총 합 출력
	int total = 0;
	for(int i = 0; i< 101; i++){
		total += i;
	}
	pageContext.setAttribute("TOTAL", total);
	
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>1~100 사이의 모든 정수의 합은 <%=total %></h1>
	<h1>1~100 사이의 모든 정수의 합은 <%=pageContext.getAttribute("TOTAL") %></h1>
	<h1>1~100 사이의 모든 정수의 합은 ${TOTAL }</h1>
</body>
</html>

EL 태그의 간편함을 알 수 있다.

 

 

 

속성의 저장 공간과 EL 태그 사용시 우선순위

 

setAttribute 메소드를 사용하여 속성이 저장되는 공간에는 

pageContext, request, session, application이 있다.

<%@ 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>
	<h1>EL 에서 사용되는 4가지 속성의 우선 순위</h1>
	<%
		pageContext.setAttribute("car", "s-class");
		request.setAttribute("car", "e-class");
		session.setAttribute("car", "d-class");
		application.setAttribute("car", "a-class");
	%>
	
	<ul>
		<li>그냥 호출 : ${car }</li>
		<li>pageContext : ${pageScope.car }</li>
		<li>request : ${requestScope.car }</li>
		<li>session : ${sessionScope.car }</li>
		<li>application : ${applicationScope.car }</li>
		
	</ul>
	
</body>
</html>

 

 

결과

범위가 좁아질수록 우선순위가 높다.

application은 거의 사용하지 않는다.

 

 

 

데이터를 파라미터로 받아올 때

<%@ 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="Ex03_EL2.jsp">
		<h1>좋아하는 음식 선택</h1>
		<p>아이디 : <input type="text" name="id"></p>
		<input type="checkbox" name ="fav" value="한식">한식
		<input type="checkbox" name ="fav" value="중식">중식
		<input type="checkbox" name ="fav" value="일식">일식
		<input type="checkbox" name ="fav" value="양식">양식
		<input type="checkbox" name ="fav" value="기타">기타<br>
		<input type="submit" value="전송">
	</form>
</body>
</html>
<%@ 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>
	아이디 : ${param.id } <br> <!-- 파라미터로 받아오므로 -->
	
	좋아하는 음식 : ${paramValues.fav[0] }
	${paramValues.fav[1] }
	${paramValues.fav[2] }
	${paramValues.fav[3] }
	${paramValues.fav[4] }<br>
</body>
</html>

(속성이 아닌) 파라미터로 데이터를 받아올 때는 param. 을 붙여준다. (출처를 남긴다고 생각하자)

checkbox 데이터를 submit 할때는 배열로 받아오는걸 기억하자.

 

 

 

 

EL 추가 문법

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ 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>
<%
	List<Integer> list = new ArrayList<>();
	list.add(7);
	list.add(3);
	list.add(5);
	
	request.setAttribute("LIST", list);
	
%>
	<jsp:forward page="Ex07_EL2.jsp"/>

</body>
</html>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ 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>
	<h1>request의 속성으로 저장된 list</h1>
	<ul>
		<li>${LIST[0] }</li>
		<li>${LIST[1] }</li>
		<li>${LIST[2] }</li>
		<li>합 : ${LIST.stream().sum() }</li>
		<li>평균 : ${LIST.stream().average().get() }</li>
		<li>최대 값 : ${LIST.stream().max().get() }</li>
		<li>최소 값 : ${LIST.stream().min().get() }</li>
		<li>정렬 : ${LIST.stream().sorted().toList() }</li>
		<li>길이 : ${LIST.stream().count() }</li>
	</ul>

</body>
</html>

.stream() 을 뒤에 붙여 

배열의 합,  평균, 최대/최소, 정렬, 길이 등을 구할 수 있다.

 

 

EL 태그 내 연산

EL 태그 내에서 논리연산, 산술연산 등이 가능하다.

산술연산은 기호가 똑같아서 따로 알아둘 필요 없다.

 

비교 연산은 알던 기호를 써도 되고, 아래의 다른 기호를 사용해도 된다.

1) ==, eq

2) !=, ne

3) <, lt

4) >, gt

5) <=, le

6) >=, ge

 

empty 연산자도 알아두자

ArrayList에 null 또는 ""(빈 문자열)이 있다면 true 리턴

${empty list }