수업(국비지원)/JSP
[JSP] EL(표현식),JSTL - EL(Expression Language) 표현언어
byeolsub
2023. 4. 18. 23:51
EL(Expression Language)
: JSP에서 사용가능한 새로운 스크립트 언어
: 자바 빈의 프로퍼티, 값을 JSP의 표현식 <%= %>이나
액션 태그 jsp:useBean를 사용하는 것 보다 쉽고 간결하게 꺼낼 수 있게 하는 기술
(간단한 구문 때문에 표현식 대신 사용)
: JSP에서 Java 코드를 분리하고, Java 코드보다 Java 구성 요소에 더 쉽게 액세스할 수 있다.
💡 static 메소드를 호출할 수도 있는데 JSP에서는 주로 서블릿 보관소 (JspContext, ServletRequest, HttpSession, ServletContext)에서 값을 꺼낼 때 사용.
EL의 주요 기능
: JSP의 네가지 기본 객체가 제공하는 영역의 속성 사용
: 집합 객체에 대한 접근 방법 제공
: 수치 연산, 관계 연산, 논리 연산자 제공
: 자바 클래스 메서드 호출 기능 제공
: 표현언어만의 기본 객체 제공
EL 데이터 타입
: Boolean 타입 - true와 false
: 정수 타입 - 0~9로 이루어진 정수값.
: 실수 타입 - 0~9로 이루어져 있으며, 소수점('.')을 사용할 수 있고, 3.24e3과 같이
지수형으로 표현가능
: 문자열 타입 - 따옴표(' 또는 ")로 둘러싼 문자열
작은 따옴표 사용시, 값에 포함된 작은 따옴표는 \\'로 입력
\\기호 자체는 \\\\로 표시
: null 타입
${ }
- JSP가 실행될 때 즉시 반영된다. (Immediate evaluation)
- 객체 프로퍼티 값을 꺼낼때 주로 사용
#{ }
- 시스템에서 필요하다고 판단될 때 그 값을 사용한다. (Deferred evaluation)
- 사용자 입력값을 객체의 프로퍼티에 담는 용도로 주로 사용
- JSP 템플릿 텍스트에서는 사용 불가
**스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용**
- 객체 설명 코드
| pageContext | JSP의 PageContext 객체 | |
| servletContext | ServletContext 객체 | ${pageContext.servletContext.객체명} |
| session | HttpSession 객체 | ${pageContext.session.객체명} |
| request | ServletRequest 객체 | ${pageContext.request.객체명} |
| response | ServletResponse 객체 | |
| param | 요청 매개변수의 값 조회 | ${param.매개변수명} |
| paramValues | 요청 매개변수의 값 배열 조회 | ${paramValues.매개변수명} |
| header | HTTP 헤더의 값 조회 | ${header.헤더명} |
| headerValues | HTTP 헤더의 값 배열 조회 | ${headerValues.헤더명} |
| cookie | 쿠키 값 조회 | ${cookie.쿠키명} |
| initParam | 컨텍스트 초기화 매개변수의 값 조회 | ${initParam.매개변수명} |
| pageScope | page 보관소의 값 조회 | ${pageScope.객체명} |
| requestScope | request 보관소의 값 조회 | ${requestScope.객체명} |
| sessionScope | session 보관소의 값 조회 | ${sessionScope.객체명} |
| applicationScope | application 보관소의 값 조회 | ${applicationScope.객체명} |
📌 elForm.jsp
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- /jsp3/src/main/webapp/el/elForm.jsp --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL(표현언어)</title>
</head>
<body>
<%
session.setAttribute("test","session test 속성");
session.setAttribute("today",new Date());
%>
<form action="elex1.jsp" method="post">
이름 : <input type="text" name="name" value="홍길동">
<input type="submit"value="전송">
</form>
</body>
</html>
💡
${tel} : 영역담당 객체에 저장된 속성 중 이름이 tel인 속성의 값을 출력.
${test} : 영역담당 객체에 저장된 속성 중 이름이 test인 속성의 값을 출력.
1.pageContext에 등록된 속성 중 test인 속성의 값을 출력.
2. 1번이 없는 경우 request에 등록된 속성 중 test인 속성의 값을 출력.
3. 1번,2번이 없는 경우 session에 등록된 속성 중 test인 속성의 값을 출력.
4. 1번,2번,3번이 없는 경우 application에 등록된 속성 중 test인 속성의 값을 출력.
5. 모든 영역 객체에 test 라는 속성이 없는 경우 빈 문자열 출력. null 아님.
📌 elex1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- /jsp3/src/main/webapp/el/elex1.jsp --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>elForm.jsp 의 결과 화면</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String tel = "010-1111-2222";
pageContext.setAttribute("test","pageContext객체의 test속성");
pageContext.setAttribute("tel",tel);
%>
<h3>JSP스크립트를 이용하여 파라미터와 속성값 출력</h3>
pageContext test 속성값 :<%= pageContext.getAttribute("test") %><br>
session test 속성값 : <%= session.getAttribute("test")%><br>
today 속성값 : <%= session.getAttribute("today") %><br>
name 파라미터값 : <%=request.getAttribute("name") %><br>
tel 변수값 : <%= tel %><br>
없는 속성값 : <%= pageContext.getAttribute("noAttr") %><br>
없는 파라미터값 : <%= request.getParameter("noParam") %><br>
<hr>
<h3>JSP의 EL을 이용하여 파라미터와 속성값 출력</h3>
<%-- pageScope : pageContext 객체의 속성객체 --%>
pageContext test 속성값 :${pageScope.test}<br>
<%-- sessionScope : sessionScope 객체의 속성객체 --%>
session test 속성값 : ${sessionScope.test}<br>
today 속성값 : ${sessionScope.today}<br>
today 속성값 : ${today}<br>
<%-- Param : 파라미터 객체 Param. 파라미터명 --%>
name 파라미터값 : ${Param.name} <br>
tel 변수값 : EL로는 표현 불가 <br>
tel 속성값 : ${tel} <br>
test 속성값 : ${test}<br>
없는 속성값 : ${pageScope.noAttr} <br>
없는 파라미터값 :${Param.noParam} <br>
</body>
</html>