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;
}
}| JSP JSON, Ajax (Asynchronous JavaScript and XML) (0) | 2022.08.25 |
|---|---|
| JSP JSTL(JSP Standard Tag Library) (0) | 2022.08.25 |
| JSP ( 회원관리 DB 만들기 ) (0) | 2022.08.25 |
| JSP (DB연결, 성적 테스트) (0) | 2022.08.19 |
| JSP Templates(템플릿 이용, 부서 별 사원 입력 및 출력) (0) | 2022.08.19 |