개발자 미니민의 개발스터디

[JSP] EL 태그 정의 / EL 사용 이유 / 내장객체 / 연산

by mini_min

JSP

[JSP] EL 태그 정의 / EL 사용 이유 / 내장객체 / 연산

✔️ EL 정의 Expresstion language

: 표현 언어

: 스크립트 요소의 사용 없이, JSP 페이지에 값을 표현할 수 있는 태그 기반의 스크립트 언어이다.

: 표현 언어는 JSP 2.0 버전부터 추가되었다.

: JSP 2.2 부터는 EL 에서 객체의 메소드를 직접 접근 할 수 있는 기능이 추가되었다.

: 표현 언어는 JSP 의 스크립트 요소를 제외한 나머지 부분에서 사용 가능하다.

 

📓 기능

: JSP 의 네 가지 기본 객체가 제공하는 영역 속성 사용 가능

(page, request, session, application 에 바인딩된 속성 이나 그 속성의 프로퍼티 값 출력)

: collection 객체에 대한 접근 방법 제공

: 수치, 관계, 논리 등 EL 연산자 제공

: 자바 클래스의 메소드 호출 가능

: EL 내장 객체 제공

 

 

✔️ EL 연산

💡 사칙연산

: 사칙연산에서 더하기의 기본 자료형은 long 형으로 처리한다.

: 나눗셈은 기본 Double 형이다.

: 자바에서 문자열 + 숫자 / 문자열 + 문자열 은 '문자열'이 나왔지만, EL 에서는 long 형으로 처리한다. 

mod : 나눗셈 구하기 

👩‍💻 EL 에서 "A" + "B" 의 결과는 에러. + 로 문자열 결합은 불가하다.

<h3> 사칙 연산 </h3>
<p> ${3+5} </p> <!-- 8 전송 : 자료형은 long 형으로 처리 -->
<p> ${"3"+5} </p> <!-- 8 전송 : 자료형은 long 형으로 처리 -->
<p> ${"3"+"5"} </p> <!-- 8 전송 : 자료형은 long 형으로 처리 -->

<p> ${10/5} </p> <!-- 2.0 : 나눗셈은 기본 Double 형 -->
<p> ${13/5} </p> <!-- 2.6 : 나눗셈은 기본 Double 형 -->
<p> ${13 mod 5} </p> <!-- 3-->
<p> ${13 % 5} </p> <!-- 3-->
<p>EL 에서 "A" + "B" 의 결과는 에러. + 로 문자열 결합은 불가하다. </p>
<hr>

 

💡 비교/논리 연산 (삼항 연산자 가능)

👩‍💻 같다 표시 : eq

👩‍💻 부등호 < : lt (le 같다 의미 포함)

👩‍💻 부등호 > : gt (ge 같다 의미 포함)

👩‍💻 empty는 값이 null, 빈문자열, 길이가 0인 배열일 때 true 를 반환한다. 

<h3> 비교/논리 연산 </h3>
<p> 3 == 4 : ${ 3 == 4  }, 3 eq 4 : ${ 3 eq 4 } </p>
<p> 3 != 4 : ${ 3 != 4  } </p>

<p>3 &lt; 4 : ${3 < 4}, 3 lt 4 : ${3 lt 4} </p>
<p>3 &lt; 4 : ${3 > 4}, 3 gt 4 : ${3 gt 4} </p>

<p>3 &lt;= 4 : ${3 <= 4}, 3 le 4 : ${3 le 4} </p>
<p>3 &lt;= 4 : ${3 >= 4}, 3 ge 4 : ${3 ge 4} </p>
<p>empty name : ${empty name} </p>
	<!--  name 속성이 없으므로 참이다. -->
	<!--  empty는 값이 null, 빈문자열, 길이가 0인 배열 -->
<p>${10%2 == 0 ? "짝수" : "홀수" }</p>
<p> 논리 연산자 : not, and, or, !, &amp;&amp;, || </p>

 

💡 기타연산

: 사칙연산에

<h3> 기타 연산자 </h3>
<p>문자열 결합 : +=, ${"서울" += "경기"}</p>
<p>; 연산자 : a;b 에서 a는 출력하지 않고 b만 출력 </p>
<p> ${1+2; 2+5} </p> <!--  7 -->

<p>할당 연산자 : 할당 자체도 출력</p>
<p>${a=10} ${a}</p> <!--  결과 10 10 -->
<p>${a=10; a}</p> <!--  결과 10 -->

 

 

✔️ EL 내장 객체

: EL 은 다양한 내장 객체가 있고, 대부분의 내장 객체 타입은 Map 이다.

 

💡 pageContext

: 현재 페이지의 설정 정보

<p>pageContext : 현재 페이지의 설정 정보 </p>
<p>Context path : <%=request.getContextPath() %> </p>
<p>Context path : ${pageContext.request.contextPath} </p>
<hr>

 

💡 header

: 요청 헤더 정보

<p>header : 요청 헤더 정보</p>
<p>User-Agent : ${header["user-agent"]}</p>
<hr>

 

💡 기타 내장 객체

<p>기타 내장 객체</p>
<p>EL 에서 session 객체 : sessionScope</p>

 

 

✔️ EL 사용 이유

: EL 의 주 사용 목적은 request, pageContext, session 등에서 설정한 속성(attribute)을 출력 (클라이언트에게 전송) 하기 위해 사용한다.

 

🔒 예제 1

User dto : 이름, 나이, 전화번호, 과목 getter, setter 존재

: User 객체에 값을 넣어서 선언하고 request 로 vo 속성으로 설정했다 (setAttribute)

: 이후 ex03_ok.jsp 로 포워딩함

<%@page import="ch10.user.User"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@page trimDirectiveWhitespaces="true" %>
<%
	request.setCharacterEncoding("utf-8");
	User dto = new User("홍길동", 20, "010-1111-1111", null);
	request.setAttribute("vo", dto);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<jsp:forward page="ex03_ok.jsp">
	<jsp:param value="서울" name="city"/>
</jsp:forward>

</body>
</html>

 

🔒 1-1) EL 태그를 사용하지 않은 경우 (ex03_ok.jsp)

: setAttribute 로 설정한 속성을 받기 위해 getAttribute 해줘야하며, Object 객체라 다운 캐스팅까지 해야한다.

: <jsp:param> 으로 넘긴 'city' 는 따로 파라미터를 받아야한다.

: getter 메소드로 값을 출력해야한다.

: getter 메소드가 없는 새로운 속성 city 는 이름으로 바로 호출한다.

<%@page import="ch10.user.User"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@page trimDirectiveWhitespaces="true" %>
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<%-- <h3> EL 을 사용하지 않은 경우 </h3>
<%
	User vv = (User)request.getAttribute("vo");
	String city = request.getParameter("city");
%>

<p>
	<%=vv.getName() %>
	<%=vv.getAge() %>
	<%=vv.getTel() %>
	<%=vv.getSubject() %>
	<!-- null 값도 출력한다. -->
</p>
<p>
	<%=city %>
</p> --%>

<hr>


</body>
</html>

 

🔒 1-2) EL 태그를 사용한 경우 (ex03_ok.jsp)

: getter 없이 필드명 으로 바로 속성 값을 가져온다.

: 다만, setAttribute 로 설정한 vo 안에 없는 내용을 호출하면 터진다.

: 필드 값이 null 인 경우, 아무것도 출력되지 않는다.

: 파라미터는 param 이란 내장 객체로 가져온다. (request.getParameter("city") 와 유사)

<%@page import="ch10.user.User"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@page trimDirectiveWhitespaces="true" %>
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<hr> 

<h3> EL 사용하여 출력 </h3>

<p>
	<!--  getter 가 아니라 필드명 으로 바로 가져온다. 
		vo 안에 없는걸 쓰면 터진다. 
		dto 가 null 이니까 안터지지만 내용이 안나온다.	-->
	${vo.name}, ${vo.age},${vo.tel},${vo.subject}, ${dto.city}
	<!--  필드 값이 null 인 경우 아무것도 출력되지 않음 -->
</p>

<p>
	${param.city}
	<!--  파라미터는 param 이라는 내장 객체를 사용한다. -->
	<!--  request.getParameter("city") 와 유사 -->
</p>


</body>
</html>

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기