익스프레션(expression)이라는 단어를 사전에서 찾아보면 여러가지 뜻이 있지만, 프로그래밍에서는 대개 '식(式)'이라는 뜻으로 사용됩니다.
식이란 수학시간에 배우는 3+4, 2x+7처럼 어떤 값을 산출하는 연산자와 피연산자의 조합을 말합니다. 익스프레션 언어는 이 같은 식을 중심으로 코드를 기술하는 언어입니다.
하지만 수학에서 사용하는 식과는 달리 연산자와 피연산자의 조합을 다음과 같이 ${ .. } 로 둘러싸서 표현합니다.
${식} / 연산, 속성(변수)
${cnt+1}
위와 같은 형태의 식을 EL 식이라고 합니다.
EL 식에 포함된 데이터 이름은 기본적으로 애트리뷰트의 이름으로 해석됩니다.
애트리뷰트란 setAttribute, getAttribute, removeAttribute 메서드를 통해 저장되고 관리되는 데이터를 의미합니다.


setAttribute("속성명", "값");
반환값이 Object라 필요한거로 형변환 해야하는데 EL식은 알아서 형변환 해줌
속성을 추가하면 El식에서는 속성명을 변수와 동일하게 사용할 수 있다.

${속성}
${...식 ...}
// 데이터 이름 하나로만 구성된 EL식
${RESULT}
// 연산자를 포함하는 EL 식
${RESULT + 101}
${RESULT} // 애트리뷰트 이름
서블릿과 JSP 기술에서 사용할 수 있는 setAttribute, getAttribute, removeAttribute 메서드는 4세트가 있고 그래서 애트리뷰트 종류도 네가지 입니다.
JSP 페이지에서는 이런 메서드를 호출할 떄 각각 pageContext, request, session, application 내장 객체를 사용합니다.
1) page
pageContext 내장객체
javax.servlet.jsp.JspContext 클래스 소속
2) request
request 내장 객체
javax.servlet.ServletRequest 인터페이스
3) session
session 내장 객체
javax.servlet.http.HttpSession 인터페이스
4) application
application 내장 객체
javax.servlet.ServletContext 인터페이스
5) EL 식 안에 있는 데이터 이름이 해석되는 순서
✔pageContext -> request -> session -> application



속성값을 범위에 따라 조회할 수 있는 객체(map)
마침표(.)
대괄호(['속성명'])
1) pageScope
2) requestScope
3) sessionScope
4) applicationScope


◻마침표: 변수명 규칙과 동일한 속성명일때 사용
◻대괄호: 변수명 규칙과 맞지 않는 속성명일때 사용
변수명 규칙과 맞지않을때 대괄호를 쓴다.

맞지 않는 데이터가 나옴. 대괄호를 쓰면 된다!

5) param
참고)
HttpServletRequest - String getParameter(String name)와 동일 기능
GET방식: ?이름=값&이름=값;
POST방식: 바디/ application/x-www-form-urlencoded
이름=값&이름=값
- 값: url 인코딩 처리된 값

6) paramValues
HttpServletRequest - String[] getParameterValues(String name)와 동일기능


Values!


7) header: 요청 헤더 조회

8) headerValues
9) cookie
쿠키는 요청헤더쪽에 있음
키와 값 형태로 조회 가능


이름을 가지고 쿠키 조회


10) initParam
<context-param>
<param-name></param-name>
<param-value></param-value>
</context-param>
<context-param>
<param-name>key1</param-name>
<param-value>value1</param-value>
</context-param>

11) pageContext
서블릿 문서 pageContext

lt ➡ lesser than : <
gt ➡ greater than : >
le ➡ lesser than and equal : <=
ge ➡ greater than and equal : >=
eq ➡ equal : ==
ne ➡ not equal !=
논리 연산자
&& / AND
|| / OR
! / NOT

null 체크시 사용, 빈 문자열 ''
<%@ page contentType="text/html; charset=UTF-8" %>
${empty param.str ? '없음' : param.str}
http://localhost:3000/day05/exam04/ex06.jsp?str=입력
입력값이 param.str이 된다.
${empty str}
EL식 속성 : 객체 -> 객체의 각 속성명을 접근(getter 호출)
예) ${book.title} -> book.getTitle()
${book['title']}
마침표로 사용하는 경우는 변수명 규칙과 동일하게 적용
예) nums['0']예) num-1 (X) -> 대괄호 연산자 ['num-1']