2022년 7월 18일 월요일

JSP 8강 - 표현 언어(EL)

표현 언어란? 변수의 값을 출력할 때 사용하는 스크립트 언어

1. 표현 언어가 제공하는 기능

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

${ 영역에 저장된 속성 }

JSP에서 생성한 변수를 접근하려면, 반드시 영역에 저장 후 사용해야 한다.
JSP 스크립트 요소(선언부, 표현식, 스크립틀릿)에서는 사용할 수 없다.

EL에서 객체를 표현할 때는 . 이나 []를 사용한다. []를 사용할 때 속성명은 ""와 '' 모두 사용 가능
(예) ${ param.name }
     ${ param["name"] }
     ${ param['name'] }

3. EL에서 4가지 영역에 접근하기 위한 내장 객체
  • pageScope : page 영역에 저장된 속성값 읽어옴.
  • requestScope : request영역에 저장된 속성값 읽어옴.
  • sessionScope : session 영역에 저장된 속성값 읽어옴.
  • aplicationScope : application 영역에 저장된 속성값 읽어옴.

4. 폼 값 처리하기

param : request.getParmeter("매개변수명")과 동일하게 요청 매개변수의 값을 받아온다.

paramValues : request.getParameterValues("매개변수명")와 동일하게 요청 매개변수의 값을 문자열 배열로 받아온다. 주로 다중 선택이 가능한 checkbox를 통해 전달된 폼 값을 받을 때 사용.

5. 객체 전달하기

폼으로는 객체를 전달 할 수 없기에 영역을 사용한다.

예제) 객체 전달 부분

<%@ page import="common.Person"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<html>

<meta charset="UTF-8">

<head><title>표현 언어(EL) - 객체 매개변수</title></head>

<body>

    <%

    request.setAttribute("personObj", new Person("홍길동", 33));

    request.setAttribute("stringObj", "나는 문자열");

    request.setAttribute("integerObj", new Integer(99));

    %>

    <jsp:forward page="ObjectResult.jsp">

        <jsp:param value="10" name="firstNum" />

        <jsp:param value="20" name="secondNum" />

    </jsp:forward>

</body>

</html>


예제) 전달 받은 객체 확인 부분

<%@ page import="common.Person"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<html>

<meta charset="UTF-8">

<head><title>표현 언어(EL) - 객체 매개변수</title></head>

<body>  

    <h2>영역을 통해 전달된 객체 읽기</h2>

    <ul>

        <li>Person 객체 => 이름 : ${ personObj.name }, 나이 : ${ personObj.age }</li>

        <li>String 객체 => ${ requestScope.stringObj }</li>

        <li>Integer 객체 => ${ integerObj }</li> 

    </ul>

    <h2>매개변수로 전달된 값 읽기</h2>

    <ul>

        <li>${ param.firstNum + param['secondNum'] }</li>  

        <li>${ param.firstNum } + ${param["secondNum"] }</li> 

    </ul>

</body>

</html>

영역에서는 모든 객체가 Object 타입으로 저장되기에 읽어올 때는 반드시 형 변환 후 사용하고, 게터로 멤버 변수의 값을 가져온다. 

한편 EL 사용하면 형 변환이 필요 없고, 게터 호출 대신 멤버 변수 이름만 쓰면 값을 출력 할 수 있다.

6. 쿠키, HTTP 헤더, 컨텍스트 초기화 매개변수 출력하기

EL은 쿠키나 헤더 값을 읽을 수 있도록 다음의 내장 객체를 제공한다.

  • cookie : 쿠키를 읽을 때 사용
  • header : request.getHeader(헤더명)와 동일하게 헤더값을 읽을 때 사용
  • headerValues : request.getHeaders(헤더명)와 동일하게 헤더값을 배영 형태로 읽을 때 사용
  • initParam : web.xml 에 설정한 컨텍스트 초기화 매개변수를 읽을 때 사용
  • pageContext : JSP의 pageContext 내장 객체와 동일한 역할
예제) 쿠키, HTTP 헤더, 컨텍스트 초기화 매개변수 출력하기

<%@ page import="utils.CookieManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
CookieManager.makeCookie(response, "ELCookie", "EL좋아요", 10);
%>    
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 그 외 내장 객체</title></head>
<body>
    <h3>쿠키값 읽기</h3>
    <li>ELCookie값 : ${ cookie.ELCookie.value }</li>
    
    <h3>HTTP 헤더 읽기</h3>
    <ul>
        <li>host : ${ header.host }</li>
        <li>user-agent : ${ header['user-agent'] }</li>
        <li>cookie : ${ header.cookie }</li>
    </ul>
    
    <h3>컨텍스트 초기화 매개변수 읽기</h3>
    <li>OracleDriver : ${ initParam.OracleDriver }</li>

    <h3>컨텍스트 루트 경로 읽기</h3>
    <li>${ pageContext.request.contextPath }</li>
</body>
</html>

7. 컬렉션 사용하기

예제) EL로 컬렉션 이용하기
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.Map"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="common.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 컬렉션</title></head>
<body>
<h2>List 컬렉션</h2>
<%
List<Object> aList = new ArrayList<Object>();
aList.add("청해진");
aList.add(new Person("장보고", 28));
pageContext.setAttribute("Ocean", aList);
%>
<ul>
    <li>0번째 요소 : ${ Ocean[0] }</li>
    <li>1번째 요소 : ${ Ocean[1].name }, ${ Ocean[1].age }</li>
    <li>2번째 요소 : ${ Ocean[2] }<!--출력되지 않음--></li>
</ul>
<h2>Map 컬렉션</h2>
<%
Map<String, String> map = new HashMap<String, String>();
map.put("한글", "훈민정음");
map.put("Eng", "English");
pageContext.setAttribute("King", map);
%>
<ul>
    <li>영문 Key : ${ King["Eng"] }, ${ King['Eng'] }, ${ King.Eng }</li>
    <li>한글 Key : ${ King["한글"] }, ${ King['한글'] }, \${King.한글 }<!--에러--></li>
</ul>
</body>
</html>

8. EL의 연산자들

1) 할당 연산자(EL 3.0 부터는 = 연산자로 변수에 값을 할당 가능)
  • ${ number = 10 } //할당과 동시에 출력
  • ${ number = 10; '' } //할달만 되고 출력은 되지 않음
2) 비교 연산자
  • > 또는 gt : ~보다 크다
  • >= 또는 ge : ~보다 크거나 같다
  • < 또는 lt : ~보다 작다
  • <= 또는 le : ~보다 작거나 같다
  • == 또는 eq : 같다
  • != 또는 ne : 같지 않다.
3) 논리 연산자
  • && 또는 and : 논리 and
  • || 또는 or : 논리 or
  • | 또는 not : 논리 not
4) empty 연산자
  • null
  • 빈 문자열
  • 길이가 0인 배열
  • size가 0인 컬렉션
5) 삼항 연산자(자바의 삼항 연산자와 사용법이 동일)
  • ${ 조건 ? "true일 때 선택" : "fales일 때 선택" }

    댓글 없음:

    댓글 쓰기