상세 컨텐츠

본문 제목

JSP EL(Expression Language)

FrontEnd/JSP (JavaServerPage)

by H_Develop 2022. 8. 25. 08:51

본문

EL(Expression Language) 표현식
EL 표현식이란 JSP에서 사용하는 (정규) 표현식( html이나 서블릿에서는 사용 불가 )을 조금 더 간결하게 사용하기 위한 표현 형태이다. 
1. EL로 값을 표현하려면 4개 영역(4개 영역은 모두 JSP의 내장 객체이다.)
- 기본 객체의 영역은 객체의 유효기간이라고도 불리며, 객체를 누구와 공유할 것인가를 나타낸다.
(1) page 영역
- page 영역은 한 번의 웹 브라우저(클라이언트)의 요청에 대해 하나의 JSP 
페이지가 호출된다.
- 웹 브라우저의 요청이 들어오면 이때 단 한 개의 페이지만 대응이 된다.
- 따라서 page 영역은 객체를 하나의 페이지 내에서만 공유한다.
(2) request 영역(가장 많이 사용하는 영역) - 지역개념으로 페이지가 닫히면 종료된다.
- 같은 request 영역이면 두 개의 페이지가 같은 요청을 공유할 수 있다
- 따라서 request 영역은 객체를 하나 또는 두 개의 페이지 내에서 공유할 수 있다.
- 주로 페이지 모듈화에 사용된다.
(3) session 영역(두번째로 많이 사용하는 영역) - 전역개념으로 페이지가 닫혀도 남아있다.
- 톰캣이 실행될 때 자동으로 만들어지는 영역.
- session 영역은 하나의 웹 브라우저 당 1개의 session 객체가 생성된다
- 즉, 같은 웹 브라우저 내에서는 요청되는 페이지들은 같은 객체를 공유하게 된다.
(4) application 영역
- application 영역은 하나의 웹 어플리케이션 당 1개의 applicaition 객체가 생성된다.
- 즉, 같은 웹 어플리케이션에 요청되는 페이지들은 같은 객체를 공유한다.WAS 서버에 실제 존재하는 데이터만 사용할 수 있다.
2. EL 접근형식
${영역.변수}식으로 해준다.

 

 

 


el_test1.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
	String msg="안녕";
	// 4개 영역에 포함되지 않는 일반 스크립트 릿 영역이다. 
	// JSP를 통해서 pageScope영역에 값을 넣는다.
	pageContext.setAttribute("msg", msg);
	// JSP를 통해서 requestScope영역에 값을 넣는다.
	request.setAttribute("msg", "requestScope의 안녕");
	// JSP를 통해서 sessionScope영역에 값을 넣는다.
	session.setAttribute("msg2", "세션에 담긴 내용");
%>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	JSP 표현식 : <%= msg %><br>
	EL 표현식(파라미터) : ${param.msg}<br>
	EL 표현식(생략) : ${msg}<br>
	EL 표현식(pageScope) : ${pageScope.msg}<br>
	EL 표현식(requestScope) : ${requestScope.msg}<br>
	EL 표현식(session) : ${sessionScope.msg2}<br>
	
	

</body>
</html>

 

 

 


el_test2.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
	String msg="안녕";
	// 4개 영역에 포함되지 않는 일반 스크립트 릿 영역이다.
	// JSP를 통해서 pageScope영역에 값을 넣는다.
	pageContext.setAttribute("msg", msg);
	// JSP를 통해서 requestScope영역에 값을 넣는다.
	request.setAttribute("msg", "requestScope의 안녕");
	// JSP를 통해서 sessionScope영역에 값을 넣는다.
	session.setAttribute("msg2", "세션에 담긴 내용");
%>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<body>
	EL 산술 연산자 <br>
	<!-- \는 EL 기법이 아닌 일반 문자로 인식 -->
	<!-- 상수는 4가지 영역이 아니어도 사용 가능  -->
	${ 1 + 1 } <br>
	\${ 1 + 1 } <br>	
	\${1 + 1} = ${1 + 1} <br>
	\${2 - 2} = ${2 - 1} <br>
	\${3 * 2} = ${3 * 2} <br>
	\${10 / 3} = ${10 / 3} <br>
	\${10 % 3} = ${10 % 3} <br>
	<hr>
	
	EL 관계(비교) 연산자 <br>
	\${3 > 2} = ${3 > 2} 또는 ${3 gt 2}<br><!--  greater than -->
	\${3 >= 2} = ${3 >= 2} 또는 ${3 ge 2}<br><br><!--  greater equal -->
	\${3 < 2} = ${3 < 2} 또는 ${3 lt 2}<br><!-- little than -->
	\${3 <= 2} = ${3 <= 2} 또는 ${3 le 2}<br><br><!-- little equal -->
	\${3 == 2} = ${3 == 2} 또는 ${3 eq 2}<br><!-- equal -->
	\${3 != 2} = ${3 != 2} 또는 ${3 ne 2}<br><!-- not equal -->
	<hr>
	
	EL 삼항 연산자 <br>
	<!-- 파라미터로 넘어온 값(aa.jsp?msg="값있음")이 있을때와 없을때를 비교 -->
	<!-- empty : 비어있는지 확인. -->
	파라미터 값: ${ empty param.msg ? '값 없음' : param.msg }<br>
	<hr>
	EL 논리 연산자<br>
	파라미터 값: 
	${ param.msg == null or param.msg == '' ? 'X' : param.msg}
</body>


</body>
</html>

 

 

el_test3.jsp

 

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<% 	// EL을 통한 맵 출력(put 코드는 오타나도 됨ㅋ)
	Map<String, String> map = new HashMap<String, String>();
	map.put("driver", "oracle.jdbc.driver.OracleDriver");
	map.put("url", "jdbc:oracle:thin:@localhost:1521:orcl123");
	map.put("user", "scott");
	map.put("pwd", "tiger");
	// map이 Scope 영역 중 한 군데에는 들어가 있어야 EL 표현식이 가능하다 
	pageContext.setAttribute("map1", map);
%>
<html>
<head>
<meta charset=“UTF-8">
<title>Insert title here</title>
</head>
<body>
	driver : ${ pageScope.map1.get("driver") }<br>
	url : ${ map1.get("url") } <br>
	url : ${ map1['url'] }<br>    <!-- 이렇게도 씀 -->
	user : ${ map1["user"] } <br>
	pwd : ${ map1.pwd }        <!-- 가장 편한 방법(제일 많이 쓴다) -->
</body>
</html>

 

 

 

el_test3_1.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page import="vo.PersonVO" %>
<%@ page import="java.util.ArrayList" %>
    
    <!-- PersonVO 연결 -->
    
<!DOCTYPE html>
<% 	// EL을 통한 맵 출력(put 코드는 오타나도 됨ㅋ)
	Map<String, String> map = new HashMap<String, String>();
	map.put("driver", "oracle.jdbc.driver.OracleDriver");
	map.put("url", "jdbc:oracle:thin:@localhost:1521:orcl123");
	map.put("user", "scott");
	map.put("pwd", "tiger");
	// map이 Scope 영역 중 한 군데에는 들어가 있어야 EL 표현식이 가능하다 
	pageContext.setAttribute("map1", map);
	
	// PersonVO 객체
	PersonVO vo = new PersonVO("홍길동", 30);
	// vo를 Scope 영역에 넣는다.
	request.setAttribute("vo", vo);	
	// ArrayList 객체
	ArrayList<PersonVO> arr = new ArrayList<>();
	arr.add(vo);
	arr.add(vo);
	request.setAttribute("arr", arr);
%>
<html>
<head>
<meta charset=“UTF-8">
<title>Insert title here</title>
</head>
<body>

	driver : ${ pageScope.map1.get("driver") }<br>
	url : ${ map1.get("url") } <br>
	url : ${ map1['url'] }<br>    <!-- 이렇게도 씀 -->
	user : ${ map1["user"] } <br>
	pwd : ${ map1.pwd }        <!-- 가장 편한 방법(제일 많이 쓴다) -->
	
	<hr>
	이름 : ${requestScope.vo.name} <br>
	나이 : ${vo.age}<br>
	
	<hr>
	${arr[0].name}<br>
	${arr[0].age}<br>
	
</body>
</html>

 

 

 

PersonVO.java

 

package vo;

public class PersonVO {
	String name;
	int age;
	// Generate Getters & Setters로 생성 
	public PersonVO() {
	}
	public PersonVO(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

관련글 더보기