본문 바로가기
java spring/servlet&jsp

서블릿, jsp 7(EL, 내장객체)

by 킹차니 2021. 4. 4.

 

지난 포스트에서 뷰와 컨트롤러를 완전히 분리하였다. 하지만 아직 뷰에는 

<%=request.getAttribute("result")%>입니다.<br>

위와 같은 자바 코드가 남아있었다. 뷰에는 완전히 출력만을 하기 위해 jsp는 EL이라는 것을 제공한다.

사용방법은 간단하다. 컨트롤러에서 뷰로 보내는 데이터의 key값으로 value를 얻을 수 있다.

다음과 같다. ${key}

이렇게 하면 value의 값을 얻을 수 있는 것이다.

아래의 코드를 보자.

spag.jsp의 11 line의 자바코드가 들어간 것보다. 12번 라인이하는 훨씬 간결하다.

또한 리스트 데이터도 전달받을 수 있는데, 13line처럼

${키[index]}라 하면 해당 인덱스의 데이터를 얻을 수 있다.

 

아래는 결과

(${notice.title}의 결과가 위에는 없는데, "EL에 대해서"도 출력된다.)

 저장소로 사용할 수 있는 객체에는 page, request, session, application이 있는데,

pageContext.setAttribute("key", value); 라 하면 page도 저장소로 사용할 수 있다.

결과:

page -> request -> session -> application

나열한 순서대로 우선순위가 있어 다른 저장소에 같은 이름의 key값 데이터를 저장하더라도 충돌하지 않는다.

즉 만약 page에 key가 result라는 데이터가있고, key가 result인 데이터가 request저장소에도 있을 때, 

뷰에서 ${result}라 하면 page에 저장된 result가 출력된다.

결과:

page의 hello출력

하지만 각각 pageScope, requestScope, sessionScope, applicationScope를 사용하면 각각의 저장소에 있는 데이터를 출력할 수 있다.

사용법은 만약 page에서 찾고 싶다면 ${pageScope.키값}하면 끝이다

화면 출력결과

 

또한 내장객체에는 Scope외에도 

param, paramValues, header, headerValues, cookie, initParam, pageContext 등의 많은 객채들이 있다.

 

몇가지만 사용해보면 param은 컨트롤러 단에서 받은 get이나 post요청의 parameter를 뷰단에서 바로 받을 수 있다.

또한 header는 여러가지 Request hedaer의 정보를 얻을 수 있다.

header로 얻을 수 있는 정보들.

위에서 설명한 param과 header를 수행해보자.

결과:

지금까지 EL을 통해 컨트롤러와 뷰를 오나전히 분리하고, 내장객체의 사용을 보았다.