티스토리 뷰

Servlet JSP

JSP EL 저장소

Programmers 2021. 4. 27. 13:09
반응형

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 저장소 이용한 EL 출력

 

키워드가 page, request, session, application에서 중복되어서 사용된다면?

키워드를 뒤지는 순서

우선순위가 높은 page에서 값을 가져 오게된다.

그렇다면 request에 있는 키워드를 사용하고 싶다면 어떻게 해야할까?

Scope한정사

특정한 한 위치에서만 값을 뒤져서 가져오겠다라고한다면 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 값을 가져오게 될 것이다.

Scope 활용 예제

중복된 키워드에서 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을 받아와 출력

param, header에서 데이터 입력 값 추출

header에서 accept를 받아와 출력한다. 결과는 이와 같다.

 

pageContext

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
댓글
공지사항