본문 바로가기

Backend/JSP & SERVLET

[JSP/EL] 서버 객체에 저장된 값을 EL 문법으로 출력하기


서버 객체에 저장된 값을 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>