본문 바로가기
Backend/Servlet & JSP

[Servlet & JSP] JSP EL 표현식

by Forsaken Developer 2023. 5. 29.
728x90
728x90

[Servlet & JSP] JSP EL 표현식

JSP EL(Expression Language)은 JSP에서 값을 표현할 때 사용하는 문법이다.

JSP EL은 ${}를 사용하여 표현식을 작성하며, JSP 페이지에서 Java 코드를 작성하지 않고도 변수, 객체, 메서드 등을 쉽게 참조할 수 있도록 하여 코드가 간결해지고 가독성이 좋아져 유지보수가 용이하다.

<%
String name = (String) request.getAttribute("name");
int age = (int) request.getAttribute("age");
String email = (String) request.getAttribute("email");
%>

name : <%= name %> <br>
age : <%= age %> <br>
email : <%= email %> <br>

기존에는 request로 전달 받은 데이터를 응답하기 위해서 JSP 태그를 이용해서 attribute를 받아와서 응답한다.

name : ${requestScope.name} <br>
age : ${requestScope.age} <br>
email : ${requestScope.email} <br>

EL 표현식을 사용하면 ${}를 사용해서 데이터를 쉽게 받아올 수 있다.

name : ${name} <br>
age : ${age} <br>
email : ${email} <br>

scope에 대한 생략도 가능하며 scope를 생략했을 때는 좁은 범위의 scope부터 넓은 범위의 scope로 탐색해서 attribute를 받아올 수 있다.

<%
java.util.List hobbies = (java.util.ArrayList) request.getAttribute("hobbies");

for(int i=0; i<hobbies.size(); i++) {
%>

<%=i %>  : <%= hobbies.get(i) %> <br>
<%
}
%>

타입이 List인 attribute를 순회하며 데이터를 응답하려면 JSP 태그와 for문을 활용할 수 있다.

문제는 없지만 EL을 사용하면 이런 상황에서도 코드를 간결하게 표현할 수 있다.

 0 : ${requestScope.hobbies[0]}<br>
 1 : ${requestScope.hobbies[1]}<br>
 2 : ${requestScope.hobbies[2]}<br>
 
 0 : ${hobbies[0]}<br>
 1 : ${hobbies[1]}<br>
 2 : ${hobbies[2]}<br>

배열 요소에 접근하는 것처럼 인덱스로 접근할 수 있고 마찬가지로 scope의 생략도 가능하다.

<%
dto.MemberDTO member = (dto.MemberDTO)request.getAttribute("member");
%>

name : <%=member.getName() %> <br>
age : <%= member.getAge() %> <br>
email : <%= member.getEmail() %> <br>

name : ${requestScope.member.name} <br>
age : ${requestScope.member.age} <br>
email : ${requestScope.member.email} <br>

name : ${member.name} <br>
age : ${member.age} <br>
email : ${member.email} <br>

사용자가 정의한 타입의 객체에 접근하기 위해서 getter메소드를 사용해야 하지만 EL 표현법을 사용하면 내부적으로 접근하려는 필드의 getter메소드를 호출하여 값을 받아올 수 있다.

<a href="param.jsp?name=forsaken&age=20&email=forsaken@test.com&hobbies=reading&hobbies=coding">jsp EL param</a>

위와 같이 query string의 param으로 넘겨준 값을 사용하는 상황이 있다.

<%
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String email = request.getParameter("email");
String[] hobbies = request.getParameterValues("hobbies");
%>

name : <%= name %> <br>
age : <%= age %> <br>
email : <%= email %> <br>
hobbies : <%= hobbies[0] %> and <%= hobbies[1] %> <br>

parameter를 받아오기 위해서 getParameter, 다중 parameter를 받아오기 위해서 getParameterValues를 사용해야한다.

name : ${param.name} <br>
age : ${param.age} <br>
email : ${param.email} <br>
hobbies : ${paramValues.hobbies[0]} and ${paramValues.hobbies[1]} <br>

EL 표현법에서는 param scope와 paramValues scope에서 parameter값을 받아올 수 있다.

이 때 param이라는 scope를 생략하면 값을 받아올 수 없어서 scope를 명시해야한다.

 

 

 

 

 

728x90
반응형

'Backend > Servlet & JSP' 카테고리의 다른 글

[Servlet & JSP] JSTL format과 functions  (0) 2023.05.31
[Servlet & JSP] JSTL core  (0) 2023.05.30
[Servlet & JSP] JSP 태그 종류  (0) 2023.05.28
[Servlet & JSP] JSP의 역할  (0) 2023.05.27
[Servlet & JSP] 서블릿 listener  (0) 2023.05.26

댓글