Programming/JSP & Servlet

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

하더코 2024. 11. 7. 21:01

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