Backend/Servlet & JSP

표현 언어 (Expression Language; EL)

swoody 2024. 11. 22. 11:04
  • JSP 내장 객체의 영역에 담긴 속성을 사용 가능
  • 산술 연산, 비교 연산, 논리 연산이 가능
  • 자바 클래스에 정의된 메서드를 호출 가능
  • 표현 언어만의 객체를 통해 JSP와 동일한 기능을 수행
     

기본 사용법

${ 속성 }
  • HTML 태그, JavaScript, CSS에 사용 가능
  • 액션 태그, JSTL의 속성값으로 사용 가능
  • JSP 스크립트 요소(선언부, 표현식, 스크립틀릿)에서 사용 불가능
     

객체 표현 방식

  • EL에서 객체를 표현할 때 .(점)이나 [](대괄호 사용)
    ${ param.name }
    ${ param["name"] }
    ${ param['name'] }
  • 속성명에 특수 기호나 한글이 포함될 경우 대괄호만 사용
    ${ header["user-agent"] }
    ${ header['한글'] }
     

EL의 내장 객체

  • pageScope : pageContext 내장 객체와 같이 page 영역에 저장된 속성값을 읽음
  • requestScope : request 내장 객체와 같이 request 영역에 저장된 속성값을 읽음
  • sessionScope : session 내장 객체와 같이 session 영역에 저장된 속성값을 읽음
  • applicationScope : application 내장 객체와 같이 application 영역에 저장된 속성값을 읽음
     

폼값 처리

  • param : request.getParameter(”매개변수명”)과 동일하게 요청 매개변수의 값을 받아온다.
  • paramValues : request.getParameterValues(”매개변수명”)과 동일하게 요청
     

객체 전달

  • 순수 JSP
      <%
      Object object = request.getAttribute("personObj");
      Person person = (Person)object;
      %>
      이름 : <%= person.getName() %>
      나이 : <%= person.getAge() %>
  • EL
      이름 : ${ personObj.name }
      나이 : ${ personObj.age }
     

쿠키, HTTP 헤더, 컨텍스트 초기화 매개변수

EL은 쿠키나 헤더값을 읽을 수 있도록 내장 객체 제공

  • cookie : 쿠키를 읽을 때 사용
  • header : request.getHeader(헤더명)와 동일
  • headerValues : request.getHeaders(헤더명)와 동일
  • initParam : web.xml에 설정한 컨텍스트 초기화 매개변수를 읽을 때 사용
  • pageContext : JSP의 pageContext 내장 객체와 동일한 역할
     

EL의 연산자

  • 할당 연산자
    초기의 EL은 할당이 불가능했으나 EL 3.0 부터는 = 연산자를 써서 변수에 값을 할당 가능
    다만, 할당과 동시에 출력되기에 할당만을 하고 싶다면 세미콜론과 작은 따옴표를 함께 사용
      ${ numberVar = 10 }      // 할당과 동시에 출력
      ${ numberVar = 10;'' }   // 할당만 되고 출력은 되지 않음
  • 산술 연산자
    • +, -, * : 덧셈, 뺄셈, 곱셈
    • / 또는 div : 나눗셈
    • % 또는 mod : 나머지
  • 비교 연산자
    • > 또는 gt : Greater Than(~보다 크다.)
    • ≥ 또는 ge : Greater than or Equal(~보다 크거나 같다.)
    • < 또는 lt : Less Than(~보다 작다.)
    • ≤ 또는 le : Less than or Equal(~보다 작거나 같다.)
    • == 또는 eq : EQual(같다.)
    • != 또는 ne : Not Equal(같지 않다. 즉 다르다.)
  • 논리 연산자
    • && 또는 and : 논리 And
    • || 또는 or : 논리 Or
    • ! 또는 not : 논리 Not
  • empty 연산자
    값이 없을 때 true를 반환하는 연산자
    • null
    • 빈 문자열
    • 길이가 0인 배열
    • size가 0인 컬렉션
  • 삼항 연산자
    자바의 삼항 연산자와 사용법이 동일
      ${ 조건 ? "true일 때 선택" : "false일 때 선택" }
  • null일 때 연산
    자바에서는 null을 조작하려 하거나 연산에 사용하면 NullPointerException이 발생
    하지만 EL에서는 0으로 인식되어 예외가 발생하지 않습니다.
     

인스턴스 메서드 호출

EL은 영역에 저장된 값을 가져오는 기법이므로, 호출하려면 먼저 객체를 만들어 영역에 저장해야 합니다. 그리고 나면 저장된 속성명을 통해 메서드를 호출할 수 있습니다.
 

정적 메서드 호출

  • 클래스명을 통한 정적 메서드 호출
      ${ "클래스명"."함수" }
  • TLD를 이용한 정적 메서드 호출
    • 경로 : webapp/WEB-INF/’파일명’.tld(xml 파일로 생성 후 확장자 변경)
    • “Create file using a DTO or XML schema file” 선택
    • “Select XML Catalog entry” 선택 → “web-jsptaglibrary_2_0” 입력 → “http://java.sum.com…” 선택 → Next
    • Namespace Information 영역에서 첫 번째 항목 Edit → Prefix 텍스트 삭제
    • 함수 추가
            <function>
                <name>"메서드명"</name>
                <function-class>"경로 및 클래스명"</function-class>
                <function-signature>boolean "메서드명"(java.lang.String)</function-signature>
            </function>
    • taglib 지시어로 정적 메서드를 활용할 곳에 작성
        <%@ taglib prefix="태그명" uri="/WEB-INF/'파일명'.tld" %>
       

핵심 요약

  • EL은 내장 객체를 통해 4가지 영역에 저장된 속성값을 읽을 수 있습니다.
  • 전송된 폼값이나 객체를 EL을 통해 읽을 수 있습니다.
  • 컬렉션을 보다 쉽게 사용할 수 있습니다.
  • 자바에서 제공하는 연산자와 함께 문자 형태의 연산자를 추가로 사용할 수 있습니다.
  • JSP 코드를 직접 사용할 수는 없지만, 메서드를 호출할 수 있는 기능을 제공합니다.
     

 

Must Have 성낙현의 JSP 자바 웹 프로그래밍

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

JSP 표준 태그 라이브러리 (JSTL)  (1) 2024.11.29