JSP - EL(Expression Language)

2025. 3. 5. 07:10·개발/JSP

JSP EL (Expression Language) 

JSP EL(Expression Language)은 JSP 페이지에서 데이터를 간결하고 편리하게 출력하거나, 속성(attribute), 파라미터, 쿠키, 헤더 등의 값에 접근하고, 간단한 연산을 수행하기 위해 사용되는 스크립트 언어다 . EL을 사용하면 JSP 코드 내에서 Java 코드(스크립틀릿) 사용을 최소화하여 가독성과 유지보수성을 높일 수 있다.

1. EL의 특징 및 장점

  • 간결성: 복잡한 Java 코드 없이도 데이터를 쉽게 출력할 수 있다.
  • 가독성 향상: 스크립틀릿(<% ... %>)보다 훨씬 간결하고 가독성이 좋다.
  • NullPointerException 방지: 접근하려는 객체가 null인 경우, NullPointerException이 발생하는 대신, 빈 문자열("")을 반환하거나 아무것도 출력하지 않는다.
  • 자동 형변환: 대부분의 경우, 데이터 타입 변환을 명시적으로 하지 않아도 자동으로 처리된다. (예: 문자열을 숫자로 자동 변환)
  • 다양한 내장 객체: JSP의 내장 객체(request, response, session, application, param, ...)에 쉽게 접근할 수 있다.
  • 연산자 지원: 산술, 관계, 논리 연산자를 사용하여 간단한 연산을 수행할 수 있다.
  • 정적 메서드 호출: (EL 3.0부터) Java 클래스의 정적(static) 메서드를 호출할 수 있다.

2. EL의 기본 문법

  • ${}: EL 표현식은 ${} 안에 작성.
  • List, Map과 같은 컬렉션의 요소에도 쉽게 접근할 수 있다.
    • List:
      • [] 연산자를 사용하여 인덱스로 접근. (0부터 시작)
      • ${list[0]}, ${myList[2]}
    • Map:
      • [] 연산자 또는 . 연산자를 사용하여 키(key)로 접근.
      • ${map["key"]}, ${myMap.key}

3. EL 내장 객체 (Implicit Objects)

EL은 JSP의 다양한 내장 객체에 쉽게 접근할 수 있도록 미리 정의된 객체들을 제공.

내장 객체설명
pageContext javax.servlet.jsp.PageContext 객체. 다른 내장 객체에 접근하거나, 페이지 관련 정보 얻기
pageScope Page Scope에 저장된 속성(attribute)에 접근하는 Map 객체
requestScope Request Scope에 저장된 속성에 접근하는 Map 객체
sessionScope Session Scope에 저장된 속성에 접근하는 Map 객체
applicationScope Application Scope(ServletContext)에 저장된 속성에 접근하는 Map 객체
param 요청 파라미터(단일 값)에 접근하는 Map 객체 (String)
paramValues 요청 파라미터(여러 값)에 접근하는 Map 객체 (String[])
header 요청 헤더(단일 값)에 접근하는 Map 객체
headerValues 요청 헤더(여러 값)에 접근하는 Map 객체
cookie 쿠키에 접근하는 Map 객체
initParam 웹 애플리케이션 초기화 파라미터(context parameter)에 접근하는 Map 객체
 
  • Scope 우선순위: pageScope -> requestScope -> sessionScope -> applicationScope 순으로 속성을 찾는다. (가장 좁은 범위부터)
  • Scope 생략: Scope를 명시하지 않으면, 위 우선순위 순서대로 속성을 찾는다.

4. EL 연산자

연산자 종류연산자설명
 
산술 연산자 +, -, *, / (또는 div), % (또는 mod) 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지
관계 연산자 == (또는 eq), != (또는 ne), < (또는 lt), > (또는 gt), <= (또는 le), >= (또는 ge) 동등, 부등, 작음, 큼, 작거나 같음, 크거나 같음
논리 연산자 && (또는 and), ` (또는or),!(또는not`)
empty 연산자 empty 값이 null이거나 비어 있는지(empty string, empty collection) 확인. empty x는 `x == null
조건(삼항) 연산자 condition ? expr1 : expr2 condition이 true이면 expr1을, false이면 expr2를 반환
.(dot) 객체.프로퍼티 객체의 프로퍼티(또는 Map의 key)에 접근
[] 객체["프로퍼티"] 또는 리스트[인덱스] 또는 맵["키"] 객체의 프로퍼티, 리스트의 요소, 맵의 값에 접근
 
 

5. EL 사용 예시

Java
 
<%-- User 객체가 request scope에 "user"라는 이름으로 저장되어 있다고 가정 --%>
<%
    User user = new User();
    user.setId("test");
    user.setName("테스터");
    request.setAttribute("user", user);

    List<String> colors = new ArrayList<>();
    colors.add("red");
    colors.add("blue");

    request.setAttribute("colors" , colors);

    Map<String, Object> map = new HashMap();
    map.put("A", "apple");
    request.setAttribute("map", map);
%>
<html>
<head>
    <title>EL Example</title>
</head>
<body>
    <h2>User Information</h2>
    <p>User ID: ${user.id}</p> <%-- 객체의 프로퍼티 접근 --%>
    <p>User Name: ${user.name}</p>
    <p>User Name: ${user["name"]}</p> <%-- 객체의 프로퍼티 접근 --%>

    <h2>Request Information</h2>
    <p>Request Method: ${pageContext.request.method}</p> <%-- pageContext를 통해 request 객체 접근 --%>
    <p>Context Path: ${pageContext.servletContext.contextPath}</p>

    <h2>Parameters</h2>
    <p>Name Parameter: ${param.name}</p> <%-- 요청 파라미터 (단일 값) --%>
    <p>Colors Parameter: ${paramValues.colors[0]}, ${paramValues.colors[1]}</p> <%-- 요청 파라미터 (배열) --%>

    <h2>Conditional Expression</h2>
    <p>Is Name Empty?: ${empty param.name}</p> <%-- empty 연산자 --%>
    <p>Greeting: ${empty param.name ? 'Guest' : param.name}</p> <%-- 삼항 연산자 --%>

    <h2>Arithmetic operations</h2>
    ${1+4} <br/>
    ${5 div 2} <br/>

    <h2>List</h2>
    ${colors[0]} <br/>

    <h2>Map</h2>
    ${map.A}
    ${map["A"]}

    <h2>Header</h2>
     User-Agent : ${header["User-Agent"]}

</body>
</html>

6. 인스턴스 메서드 호출

EL에서는 JavaBean 객체의 getter 메서드뿐만 아니라, 일반적인 인스턴스 메서드도 호출할 수 있다.

Java
 
${object.methodName(param1, param2, ...)}

예시:

Java
 
// MyBean.java
package com.example;
public class MyBean {
    public String toUpperCase(String str) {
        return str.toUpperCase();
    }

     public int add(int a, int b) {
        return a + b;
    }
}
Java
 
<jsp:useBean id="myBean" class="com.example.MyBean" />

<p>Uppercase: ${myBean.toUpperCase("hello")}</p> <%-- HELLO --%>
<p> 5 + 3 = ${myBean.add(5,3)}</p>

10.6 정적 메서드 호출

EL 2.2부터는 정적(static) 메서드 호출도 지원. 단, 이를 위해서는 web.xml 또는 태그 파일에서 설정을 해야 한다.

web.xml (또는 tag file) 설정:

XML
 
<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <el-ignored>false</el-ignored>
     <scripting-invalid>false</scripting-invalid>
    <is-xml>false</is-xml>
    <include-prelude>/WEB-INF/jspf/prelude.jspf</include-prelude>
     <include-coda>/WEB-INF/jspf/coda.jspf</include-coda>
    <trim-directive-whitespaces>true</trim-directive-whitespaces>
    <default-content-type>text/html</default-content-type>
  </jsp-property-group>
    <taglib>
        <taglib-uri>http://example.com/functions</taglib-uri>
        <taglib-location>/WEB-INF/functions.tld</taglib-location>
    </taglib>
</jsp-config>

functions.tld 파일

XML
 
<?xml version="1.0" encoding="UTF-8" ?>  
<taglib xmlns="http://java.sun.com/xml/ns/javaee"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
        version="2.1">  

    <tlib-version>1.0</tlib-version>  
    <short-name>Functions</short-name>  
    <uri>http://example.com/functions</uri>  

    <function>  
        <name>max</name>  
        <function-class>java.lang.Math</function-class>  
        <function-signature>int max(int, int)</function-signature>  
    </function>  
     <function>
        <name>reverseString</name>
        <function-class>com.example.StringUtils</function-class> <function-signature>java.lang.String reverse(java.lang.String)</function-signature>
    </function>

</taglib>

StringUtils.java (유틸리티 클래스):

Java
 
package com.example;

public class StringUtils {
     public static String reverse(String text) {
        return new StringBuilder(text).reverse().toString();
    }
}

JSP에서 사용:

Java
 
<%@ taglib prefix="f" uri="http://example.com/functions" %>

<p>Max(10, 20): ${f:max(10, 20)}</p>  <%-- 결과 : 20,  java.lang.Math 클래스의 max() 메서드 호출 --%>
<p>Reverse: ${f:reverseString("hello")}</p> <%-- 결과: olleh --%>

 

저작자표시 비영리 변경금지 (새창열림)

'개발 > JSP' 카테고리의 다른 글

JSP 내장객체와 주요 매서드  (0) 2025.03.08
<%@ include %> vs <jsp:include >  (0) 2025.03.08
JSP 액션태그  (0) 2025.03.08
JSP 지시어와 스크립트 요소  (0) 2025.03.08
JSP는 어떻게 작동할까?  (0) 2025.03.08
'개발/JSP' 카테고리의 다른 글
  • <%@ include %> vs <jsp:include >
  • JSP 액션태그
  • JSP 지시어와 스크립트 요소
  • JSP는 어떻게 작동할까?
함수형 인간
함수형 인간
잘 까먹는 개발자의 두뇌 확장 장치
  • 함수형 인간
    개발 기록 노트
    함수형 인간
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 글 목록 (84)
      • 기타 (1)
      • 개발 (82)
        • Java (6)
        • Javascript (1)
        • Spring (20)
        • jQuery (0)
        • Git (0)
        • servlet (11)
        • JSP (6)
        • HTML (0)
        • CSS (10)
        • SQL (9)
        • JSTL (3)
        • Mybatis (4)
        • Design Patterns (0)
        • HTTP (2)
        • Devtools (0)
        • IntelliJ (5)
        • JDBC (1)
        • Lombok (3)
        • Logging (1)
      • 책 리뷰 (0)
  • hELLO· Designed By정상우.v4.10.3
함수형 인간
JSP - EL(Expression Language)
상단으로

티스토리툴바