표현언어 (EL)
${name]
name은 표현언어의 내장객체가 될 수 있음
name은 영역에 저장된 속성의 이름이 될 수 있음
- page ,request, session, application 영역에 등록된 속성에서 이름이 name인 것을 찾음. 찾을 수 없다면 null을 반환
- 수식 계산의 결과는 객체의 문자열 표현이 됨
표현언어의 사용
스크립트 요소 밖에서 사용
태그의 몸체내부나 데이터 출력이 필요할때 사용됨
<td> ${header["host"]} </td>
헤더라는 것은 표현언어의 내장객체이다. 요청헤더에 host라는 이름으로 넘어온 값이 출력됨
${param['x']}
param은 표현언어의 내장객체인데, 요청파라미터중에서 이름이 x인 값
${person.name}
person은 EL의 내장객체(대부분 Map유형) 또는 자바빈객체 또는 영역에 저장된 속성의 이름이다.
name은 Map의 key이거나 자바빈 객체가 가지는 속성임
${person["name"]}
위와 같은 의미
person은 배열이나 리스트 유형이 될수도 있으며 이때 ${person[1]이나 ${person["1"]}이 가능함 ${person.1}은 불가
인용부호가 없는 ${person[name]}에서 name은 변수로 취급됨





pageScope와 pageContext 차이
JSP의 **표현 언어(Expression Language, EL)**에서 pageScope와 pageContext는 모두 페이지 범위와 관련된 객체들이지만, 그 역할과 사용 방식에 차이가 있습니다. 각각의 차이를 설명하자면 다음과 같습니다.
1. pageScope
- **pageScope**는 **JSP 표현 언어(EL)**에서 사용되는 예약된 변수입니다. pageScope는 현재 JSP 페이지에서 **페이지 범위(page scope)**에 속한 모든 객체들에 접근하기 위한 Map 객체입니다.
- 이 변수는 EL을 사용하여 페이지 범위에 있는 속성들에 접근할 때 주로 사용됩니다. 페이지 범위는 해당 JSP 페이지에서만 유효한 변수들이 저장되는 범위입니다.
- ex) ${pageScope.myVariable}
- pageScope는 기본적으로 페이지 내에서만 유효하며, 그 범위를 벗어나면 해당 변수는 더 이상 접근할 수 없습니다.
2. pageContext
- **pageContext**는 JSP의 내장 객체로, JSP 페이지에서 다양한 정보를 제공하는 객체입니다. 이 객체는 페이지의 모든 범위(page, request, session, application)에 접근할 수 있으며, 또한 페이지에 대한 여러 메타정보(페이지 디렉티브 설정, 응답, 요청 등)에도 접근할 수 있게 해줍니다.
- pageContext는 JSP 페이지에서 매우 중요한 역할을 하며, 주로 페이지의 컨텍스트 정보를 관리하고 다른 범위의 변수에도 접근할 수 있습니다. pageContext는 EL에서 직접적으로 사용할 수 없고, JSP 스크립틀릿이나 태그 라이브러리에서 자주 사용됩니다.
- ex) <% pageContext.setAttribute("myVariable", "Hello", PageContext.PAGE_SCOPE); %>
주요 차이점
- 범위와 역할:
- pageScope: **페이지 범위(page scope)**에 저장된 객체들에 EL을 통해 접근하는 데 사용되는 Map 객체입니다. EL에서는 변수를 조회할 때 pageScope로 명시적으로 접근할 수 있습니다.
- pageContext: JSP 내장 객체로, 페이지 전체의 컨텍스트와 범위 정보를 관리하고, 페이지 내의 모든 정보에 접근할 수 있는 객체입니다. pageContext는 다양한 범위(page, request, session, application)에 접근할 수 있으며, 페이지의 메타정보에 접근할 수 있습니다.
- 사용 방식:
- **pageScope**는 EL 내에서 사용되어 페이지 범위의 변수에 접근하는 데 사용됩니다.
- **pageContext**는 JSP 스크립틀릿이나 JSP 태그 라이브러리에서 사용되며, 여러 범위 및 페이지 메타 정보를 관리합니다.
요약
- pageScope: EL에서 페이지 범위에 있는 변수들에 접근하기 위한 Map 객체입니다. 주로 변수를 읽을 때 사용됩니다.
- pageContext: JSP 내장 객체로, 페이지 범위뿐만 아니라 다른 범위(request, session, application) 및 페이지 관련 메타 정보에 접근할 수 있는 객체입니다. JSP 스크립틀릿이나 태그 라이브러리에서 사용됩니다.


action속성이 없으면 자기자신을 다시 호출함

<%= pageContext.getAttribute("name") %>
JSP에서 pageContext.getAttribute("name")을 사용하면, name 속성이 페이지 범위에 있는지 먼저 확인하고, 만약 페이지 범위에서 해당 속성이 존재하지 않으면 다른 범위(요청, 세션, 애플리케이션 범위)에서 순차적으로 검색합니다.
따라서, 만약 name 속성이 request 범위에 존재하고, 페이지 범위에 같은 이름의 속성이 존재하지 않는다면, pageContext.getAttribute("name")은 request 범위에서 해당 속성의 값을 검색하고 출력하게 됩니다.
pageContext.getAttribute()의 동작 원리
pageContext.getAttribute("name")을 사용할 때, 속성을 찾는 순서는 다음과 같습니다:
- Page Scope (페이지 범위)
- Request Scope (요청 범위)
- Session Scope (세션 범위, 만약 세션이 존재할 경우)
- Application Scope (애플리케이션 범위)
이 순서대로 각 범위에서 "name"이라는 속성을 찾아 반환합니다. 페이지 범위에서 찾지 못하면 요청 범위, 세션 범위, 애플리케이션 범위로 넘어갑니다.


스클립틀릿에서 자바빈객체를 생성한 경우 표현언어수식에서 사용하려면 먼저 자바빈객체를 영역객체의 속성으로 등록해야함


표현 언어의 사용에 관한 설명이다. 잘못된 것은?
간결한 형태로 수식을 표현할 수 있게 한다.
태그의 속성 값을 지정할 때 표현 언어 수식을 사용한다.
표현식을 대신하여 자주 사용된다.
스크립트릿 내부에 표현 언어 수식을 사용할 수 있다.
표현 언어로 작성된 수식은 스크립트 요소 밖에서 사용해야 한다
태그속성값을 지정할때 사용한 경우
<c:if test="${user.age >= 18}"> <p>Adult</p> </c:if>
${param.code}
표현 언어에서 제공하는 내장 객체 param을 이용하여 다음과 같은 표현 언어 수식을 작성하였다. 이것과 의미가 다른 것을 고르시오.
${param[code]}
${param[‘code’]}
${param[“code”]}
<%= request.getParameter(“code”) %>
보기 2과 3은 같은 의미의 표현이다. 보기 4는 표현식을 이용하여 작성된 것이다. ${param.이름}의 결과는 요청 파라미터 중 해당 이름의 파라미터 값이 된다.
<% Cookie cookie = new Cookie("firstname", "Jimmy"); response.addCookie(cookie); %> |
위 지문과 같이 쿠키가 생성되어 클라이언트로 보내지고, 이후 요청에서 쿠가 다시 서버로 전송되었다고 하자. 요청을 처리하기 위한 보기의 수식 중에서 결과가 “Jimmy”가 되는 것은 무엇인가?
<%= cookie.firstname.value %>
${cookie.name}
${cookie.firstname}
${cookie.firstname.value}
cookie는 표현 언어의 내장 객체이다. ${cookie.firstname}의 결과는 이름이 “firstname”인 Cookie 객체의 문자열 표현이다. Cookie 객체는 name 속성과 value 속성을 가지고 있다. 따라서 보기 4가 정답이다. 한편 ${cookie.firstname.name}의 결과는 “firstname”이다.
'수업 > JSP' 카테고리의 다른 글
14 표준 태그 라이브러리 (JSTL) (0) | 2024.10.06 |
---|---|
11.JDBC 12. DTO,DAO (0) | 2024.10.06 |
10.자바빈 (0) | 2024.10.06 |
8.쿠키 9.세션 (1) | 2024.10.06 |
7.모듈화된 jsp , 액션태그 (1) | 2024.10.05 |