1. EL 파라미터
JSP 페이지에서 내장 객체를 지원한다.
내장 객체란, 내부적으로 변수 선언과 초기화 작업이 자동으로 되는 객체로서 개발자는 내장 객체를 사용할 때 참조변수의 이름을 기억하고 있다가 참조변수로 바로 접근하여 사용할 수 있다.
EL에서도 JSP처럼 내장 객체를 지원하므로 필요한 객체는 내장 객체를 참조변수 이름으로 곧바로 사용할 수 있다.
EL에서 지원하는 내장객체는 다음과 같다.
내장객체 | 설명 |
pageContext | JSP 내장 객체 pageContext와 같습니다. |
pageScope | pageContext에 등록된 데이터의 이름과 값을 저장하고 있는 map객체 |
requestScope | HttpServletRequest에 등록된 데이터의 이름과 값을 저장하고 있는 map객체 |
sessionScope | HttpSession에 등록된 데이터의 이름과 값을 저장하고 있는 map객체 |
applicationScope | ServletContext에 등록된 데이터의 이름과 값을 저장하고 있는 map 객체 |
param | QueryString의 이름과 값을 저장하고 있는 map객체 |
paramValues | 같은 이름으로 전달된 질의 문자열의 이름과 값들을 저정하고 있는 map 객체 |
header | 요청정보 헤더의 정보를 이름과 값으로 저장하고 있는 map객체 |
headerValues | 요청정보 헤더의 정보들을 이름과 값들을 저장하고 있는 map객체 |
cookie | 요청을 보낸 클라이언트의 쿠기 이름과 값을 저장하고 있는 map객체 |
initParam | 웹 애플리케이션에 저장한 초기 파라미터의 이름과 값을 저장하고 있는 map 객체 |
우린 이 모든 것들을 다 사용하진 못하고 주로 사용되는 param 내부객체부터 사용해보려 한다.
2. param
우리가 어느 폼에서 id와 pw를 받아와서 불러오려 한다.
이 때 param은 받아온 어느 이름을 가진 데이터의 값을 저장하고 있는 객체이다.
이것을 우리는 jsp에서 request.getParameter("")로 가져왔었다.
여기서 param이라는 글자가 보이지 않는가?
파라미터의 약자이다.
1) JSP방식<br>
아이디 : <%=request.getParameter("id")%><br>
비번 : <%=request.getParameter("pw")%><br>
<hr>
2) EL방식<br>
아이디 : ${param.id}<br>
비번 : ${param.pw}<br>
3. 내장 객체(Collection)
우리가 JSP에서 내장 객체로 사용되었던 Scope 범위가 있다.
pageContext.setAttribute("kor", 100); // 현재 페이지에서만 유효
request.setAttribute("eng", 200); // 전역변수(부모와 자식 페이지에서만 유효)
session.setAttribute("mat", 300); // 전역변수(모든 페이지에서 유효, 개인 사용자, 시간)
application.setAttribute("aver", 400); // 전역변수(모든 페이지에서 유효, 모든 사용자)
이 안에 저장된 값을 불러올 때 EL에서 사용되는 내장객체도 있다.
JSP와 크게 차이점은 없기 때문에 그렇게 햇갈리진 않을 듯 하다.
1-1) JSP 문법
1) JSP<br>
kor : <%=pageContext.getAttribute("kor")%><br>
eng : <%=request.getAttribute("eng")%><br>
mat : <%=session.getAttribute("mat")%><br>
aver : <%=application.getAttribute("aver")%><br>
2-1) EL 문법
2) EL<br>
kor : ${pageScope.kor}<br>
eng : ${requestScope.eng}<br>
mat : ${sessionScope.mat}<br>
aver : ${applicationScope.aver}<br>
2-2) 내장 객체명 생략
그런데 여기서 EL문법을 더 간소화 시킬 수도 있다!!
kor : ${kor}<br>
eng : ${eng}<br>
mat : ${mat}<br>
aver : ${aver}<br>
이게 어떻게 된 일일까?
EL에서는 page -> request -> session -> applicaion 순으로 자동 검색을 한다.
그래서 내장객체의 범위를 따로 쓰지 않아도 된다.
2-3) 내장 객체명 동일할 때
그렇다면 만약 다른 내장객체의 같은 이름의 값이 있으면 어떻게 될까?
<%
pageContext.setAttribute("num", 500); // 현재 페이지에서만 유효
request.setAttribute("num", 600); // 전역변수(부모와 자식 페이지에서만 유효)
session.setAttribute("num", 700); // 전역변수(모든 페이지에서 유효, 개인 사용자, 시간)
application.setAttribute("num", 800);
%>
<!-- 내장객체명이 생략되면 자동으로 작은 영역순으로 찾게 된다 -->
num : ${num}<br> <!-- 500 -->
위의 코드에서 num을 출력시키면 500이 나온다.
작은 영역순으로 찾기 때문이다.
2-3) 없는 내장 객체명을 불러올 때
<!-- 각 Scope의 내장 변수가 없는 경우 -->
JSP : <%=request.getAttribute("uname")%> <!-- null -->
<br>
EL : @${requestScope.uname}@ <!-- "" -->
uname이란 것을 선언해주지 않았다.
이 경우에 아래와 같은 결과가 출력된다.
request 객체는 값이 없으면 null 이 잡히지만,
EL은 값이 없다면 "", 즉 empty 상태로 값을 출력시킨다.
이 차이점을 잘 알아두면 좋다!
3) JSP와 EL로 값을 공유하는 방법
JSP와 EL은 같은 페이지 내에서는 서로 값을 공유할 수 없다.
<h3>* JSP와 EL의 값 공유 *</h3>
<%
// JSP와 EL은 현재 페이지에서는 서로 값을 공유할 수 없다
String uname="아이티윌";
%>
이름(JSP) : <%=uname%><br>
이름(EL) : ${uname}
이 값들을 공유하고 싶다면 pageScope를 활용하면 된다.
<%
// 현재 페이지에서는 JSP와 EL이 서로 값을 공유하기 위해서는 pageScope를 활용한다
pageContext.setAttribute("uid", "KOREA");
%>
아이디(JSP) : <%=pageContext.getAttribute("uid")%><br>
아이디(EL) : ${pageScope.uid}<br>
아이디(EL) : ${uid}
'⁂ JSP > : 기본 익히기' 카테고리의 다른 글
[JSP] #11-5 JSTL 제어문 (0) | 2022.10.26 |
---|---|
[JSP] #11-4 JSTL(JSP Standard Tag Library, JSP전용태그) (0) | 2022.10.26 |
[JSP] #11-3 EL(Expression Language) - 기본 문법 (0) | 2022.10.26 |
[JSP] #11-2 Http 에러페이지 만들고 띄우기 / web.xml 파일 수정하기 (0) | 2022.10.26 |
[JSP] #11-1 MVC 모델 2를 알아보자 > EL/JSTL의 초석! (0) | 2022.10.26 |