[JSP] EL 태그 정의 / EL 사용 이유 / 내장객체 / 연산
by mini_min[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 < 4 : ${3 < 4}, 3 lt 4 : ${3 lt 4} </p>
<p>3 < 4 : ${3 > 4}, 3 gt 4 : ${3 gt 4} </p>
<p>3 <= 4 : ${3 <= 4}, 3 le 4 : ${3 le 4} </p>
<p>3 <= 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, !, &&, || </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>
'JSP' 카테고리의 다른 글
[JSP] JSTL - <c:out> / <c:set> / <c:url> / <c:param> (0) | 2022.10.04 |
---|---|
[JSP] JSTL 정의 / Core 태그 / <c:forEach> / Map 접근 (0) | 2022.10.04 |
[JSP] Paging 가운데 정렬 (구글 페이지네이션) (0) | 2022.10.03 |
[JSP] Paging 처리 (Myutil) (1) | 2022.10.03 |
[JSP] DB Connection (0) | 2022.10.03 |
블로그의 정보
개발자 미니민의 개발로그
mini_min