서버 객체에 저장된 값을 EL 문법을 이용해 출력하기
1. EL
표현언어(Expression Language, EL) 은 JSP의 자료(전달값이나 변수값)를 출력할 때의 번거로움을 간단히 해결하기 위해 만들어진 출력 문법이다. JSP의 문법을 HTML5 에서 좀 구분하기 쉽도록 하여 오류를 줄이기 위해 개발됐다.
주로 pageContext, request, session, application 서버 객체에 전달되는 Attribute 의 값을 getter 를 이용하지 않고 출력할 때 많이 사용된다.
2. 변수 출력
${}
변수 출력을 위한 기본형은 위와 같다.
{중괄호} 안에 출력하고자 하는 값을 작성한다.
2-1. 변수값 출력 1
<h2>
EL 문법으로 출력<br>
정수형 변수 값 : ${10}<br>
실수형 변수 값 : ${123.123}<br>
문자형 변수 값 : ${"Hello EL"}<br>
null 값 : ${null}<br>
</h2>
null 의 출력은 빈칸이다.
EL에서는 null 과 비교하는 비교식(EL 에서는 '==' 연산자 사용) 을 사용할 경우 에러가 뜬다.
2-2. 변수값 출력2 - JSP로 선언한 변수
<%
int a = 100;
double b = 123.123;
String c = "Hello EL";
String d = null;
%>
<h2>
<!-- request(session)에 저장된 값을 가져와서 출력. 다른 변수는 출력이 안 됨 -->
EL 문법으로 출력<br>
정수형 변수 값 : ${a}<br>
실수형 변수 값 : ${b}<br>
문자형 변수 값 : ${c}<br>
null 값 : ${d}<br>
</h2>
서버 객체(request 등)에 저장된 값을 가져와서 출력하기 때문에 JSP 로 선언된 변수는 출력이 되지 않는다.
3. 서버 객체(request, session)에 저장된 값 출력
<%
request.setAttribute("name1", "rq홍길동");
session.setAttribute("name2", "ss홍길남");
request.setAttribute("name3", "rq홍길서");
session.setAttribute("name4", "ss홍길북");
%>
request 와 session 객체에 setAttribute로 데이터를 4개 저장했다.
JSP
<h3>
JSP 문법으로 서버 객체(request, session)에 저장된 값 출력<br>
name1 : <%=request.getAttribute("name1")%><br>
name2 : <%=session.getAttribute("name2")%><br>
name3 : <%=request.getAttribute("name3")%><br>
name4 : <%=session.getAttribute("name4")%><br>
</h3>
서버 객체에 저장된 값을 jsp 로 출력하기 위해서는 getAttribute 로 일일이 지정해서 꺼내줘야 했다.
EL
<h2>
EL 문법으로 서버 객체(request, session)에 저장된 값 출력<br>
name1 : ${name1}<br>
name2 : ${name2}<br>
name3 : ${name3}<br>
name4 : ${name4}<br>
</h2>
EL은 getAttribute 없이 저장한 이름만으로 내용을 출력할 수 있다. 불필요하게 코드가 길어질 일이 없다.
dto 객체(getter, setter)의 출력
public class MemberDto {
private String userid; // member 테이블에 id
private String name;
private String pwd;
private String phone;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
member 테이블의 값을 설정하고 가져오기 위한 MemberDto 파일을 가져왔다.
<%
MemberDto mdto = new MemberDto();
mdto.setUserid("scott");
mdto.setName("김하나");
mdto.setPwd("1234");
mdto.setPhone("010-8888-9999");
request.setAttribute("mdto", mdto);
%>
JSP 로 MemberDto 객체에 임시로 값을 넣어 request 객체에 담아주었다.
<h2>
EL 문법으로 서버 객체(request, session)에 저장된 MemberDto 멤버 변수값 출력<br/>
id : ${mdto.userid}<br>
name : ${mdto.name}<br>
pwd : ${mdto.pwd}<br>
phone : ${mdto.phone}<br>
</h2>
mdto.getUserid().. 와 같은 과정을 생략하고 Attribute 에 저장한 이름(mdto)을 참조하여 변수명으로 값을 불러온다.
만약 MemberDto 객체에 getter setter 가 없다면 해당 과정은 불가능하다. EL은 MemberDto에 getter를 이용하여 값을 가져오는 것이다.
4. 서버 오브젝트에 따른 우선순위
<%
// 우선순위 오름차순
pageContext.setAttribute("name", "홍길서");
request.setAttribute("name", "홍길동");
session.setAttribute("name", "홍길남");
application.setAttribute("name", "홍길북");
%>
<h3>
pageContext : ${pageScope.name}<br>
request : ${requestScope.name}<br>
session : ${sessionScope.name}<br>
application : ${applicationScope.name}<br>
</h3>
객체에 저장한 값은 서블릿 보관소의 이름을 직접 지정하여 출력할 수 있다.
객체 | 서블릿 보관소 | 보관소 이름 |
pageContext | JspContext | pageScope |
request | ServletRequest | requestScope |
session | HttpSession | sessionScope |
application | ServletContext | applicationScope |
EL을 이용해 서버 객체의 내용을 출력하고자 할 때, 어떤 객체인지 명시하지 않고 단순히 애트리뷰트의 이름만 사용한다면
pageContext → request → session → application |
위의 순서대로 검색하여 가장 먼저 발견되는 내용이 출력된다.
<h3>
pageContext : ${name}<b/>
request : ${name}<br> <!-- pageContext 객체의 name 값 출력 -->
session : ${sessionScope.name}<br>
application : ${applicationScope.name}<br>
</h3>
'Backend > JSP & SERVLET' 카테고리의 다른 글
[JSP/SERVLET] 게시판 페이징(Paging) 처리 & 구현 (0) | 2024.11.15 |
---|---|
[JSP/SERVLET] 서블릿(Servlet)을 활용한 form 데이터 주고받기 (0) | 2024.11.07 |
[JSP] 페이지 이동 (redirect, forward) (0) | 2024.11.05 |
[JSP] form 태그로 데이터 주고받기 (getParameter) (0) | 2024.11.04 |