티스토리 뷰
EL의 데이터 저장소
우선순위:
1. Page
2. request
3. session
4. application
우선순위 순으로 돌면서 데이터를 찾아서 사용.
but Page에서 찾으면 request 이후 에서는 찾지 않는다.
Page: Page내에서 저장소로 사용 할 수있다.
예제) spag.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- page저장소를 이용한 "Hello" -> "aa"에 저장 -->
<%
pageContext.setAttribute("aa", "hello");
%>
<!--출력 코드--------------------------------------------------------->
<!-- 변수: request.getAttribute("value") -->
${value}<br>
<!-- List: ((List)request.getAttribute("names")).get(0) -->
${names[0]}<br>
<!-- Map: ((Map)request.getAttribute("notice")).get("title") -->
${notice.title}<br>
<!-- PageContext 페이지 객체 -->
${aa}
</body>
</html>
pageContext.setAttribute를 이용해 hello를 aa저장 후 ${aa}로 출력
키워드가 page, request, session, application에서 중복되어서 사용된다면?
우선순위가 높은 page에서 값을 가져 오게된다.
그렇다면 request에 있는 키워드를 사용하고 싶다면 어떻게 해야할까?
특정한 한 위치에서만 값을 뒤져서 가져오겠다라고한다면 Scope라는 한정사를 사용하면 된다.
예제를 통해서 확인해보자.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- page저장소를 이용한 "Hello" -> "aa"에 저장 -->
<%
pageContext.setAttribute("value", "hello");
%>
<!--출력 코드--------------------------------------------------------->
<!-- 변수: request.getAttribute("value") -->
<!-- request객체에서 value를 찾겠다! -->
${requestScope.value}<br>
<!-- List: ((List)request.getAttribute("names")).get(0) -->
${names[0]}<br>
<!-- Map: ((Map)request.getAttribute("notice")).get("title") -->
${notice.title}<br>
<!-- PageContext 페이지 객체 -->
${value}
</body>
</html>
위의 빨간 박스안 코드는 requestScope를 통해서 value값을 request에 있는 값을 가져온다.
반면 같은 value값이지만 아래의 빨간 박스에서는 페이지 내의 value 값을 가져오게 될 것이다.
중복된 키워드에서 requestScope.value를 통해서 "짝수"를 출력
중복된 키워드에서 page내의 value를 통해서 "hello"를 출력
위의 내장객체 Scope이외에도 다른 저장소를 통해서도 값을 저장하고 받아올 수있다.
사용방법
코드를 추가하고 확인해보자.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- page저장소를 이용한 "Hello" -> "aa"에 저장 -->
<%
pageContext.setAttribute("value", "hello");
%>
<!--출력 코드--------------------------------------------------------->
<!-- 변수: request.getAttribute("value") -->
<!-- request객체에서 value를 찾겠다! -->
${requestScope.value}<br>
<!-- List: ((List)request.getAttribute("names")).get(0) -->
${names[0]}<br>
<!-- Map: ((Map)request.getAttribute("notice")).get("title") -->
${notice.title}<br>
<!-- PageContext 페이지 객체 -->
${value}<br>
<!-- Parameter 정보 -->
${param.num}<br>
<!-- header에서 accept 정보 -->
${header.accept}<br>
</body>
</html>
Param에서 num정보와 header에서 accept정보를 출력해본다.
spag.java에서 num을 받아와 출력
header에서 accept를 받아와 출력한다. 결과는 이와 같다.
pageContext
pageContext는 특이하게 사용된다.
get함수를 사용해야하는데 EL에서는 함수호출을 사용 할 수없다.
그래서 get함수가 아닌 속성처럼 객체를 얻거나 매소드를 호출 할 수있다.
${pageContext.request.method}
'Servlet JSP' 카테고리의 다른 글
JSP 프로젝트 수업 준비 (0) | 2021.04.27 |
---|---|
JSP EL 연산자 (0) | 2021.04.27 |
JSP EL(Expression Language) (0) | 2021.04.27 |
JSP MVC model2 (0) | 2021.04.26 |
JSP MVC model1 (0) | 2021.04.26 |