안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)
* 데이터들을 담을수 있는 JSP 내장객체 종류
1. ServletContext(application Scope)
* 한 애플리케이션당 1개 존재하는 객체
* 이 영역에 데이터를 담으면 애플리케이션 전역에서 사용 가능 => 공유범위가 가장 큼
2. HttpSession (Session Scope)
* 한 브라우저당 1개 존재하는 객체
* 이 영역에 데이터를 담으면 jsp / servlet단에서 사용 가능
* 값이 한번 담기면 서버가 멈추거나 브라우저가 닫히기 전까지 사용가능.
3. HttpServletRequest(request Scope)
* 요청 및 응답시 매번 생성되는 객체
* 이 영역에 데이터를 담으면 해당 request객체를 포워딩 받는 응답 jsp 에서만 쓸수 있다.
* => 공유범위가 요청에 대한 응답jsp 하나뿐
4. PageContext(page Scope)
* 현재 jsp에서만 사용 가능 => 공유범위가 가장 작음
다음 예시를 보며 좀 더 제대로 알아보자.
<Servlet 영역>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// EL사용할때 내장객체들에 저장된 키값이 동일할 경우
// 공유범위가 제일 작은 Scope에서부터 제시된 키값을 검색함.
// page => request => session => application 순
request.setAttribute("scope","request");
session.setAttribute("scope","session");
request.getRequestDispatcher("views/1_EL/01_el.jsp").forward(request, response);
response.getWriter().append("Served at: ").append(request.getContextPath());
아래 jsp에서 3번으로 출력할 내용으로 request와 session에 같은 키값을 가진 scope를 담아줍니다.
<01_el.jsp영역>
<h3>3. EL사용할때 내장객체들에 저장된 키값이 동일할 경우
scope 값 : ${scope } <br>
<!--
EL은 공유범위가 제일 작은 Scope에서부터 제시된 키값을 검색함.
page => request => session => application 순
만약 모든 영역에서 못 찾을 경우?? => 아무것도 출력 안됨. 화면상 오류는 안뜸
ex) 존재하지 않는 값을 입력 -> scope 값 : ${scope2 }
-->
</h3>
그리고 JSP상에서 표현하고자 하는 값을 키값 scope를 el을 사용하여 ${scope } 형식으로 표현하여 저장된 키값에 접근하여 출력합니다.
<화면 출력 모습>
EL사용할때 내장객체들에 저장된 키값이 동일할 경우 EL은 공유범위가 제일 작은 Scope에서부터 제시된 키값을 검색하여 (page => request => session => application 순) 화면에 출력합니다.
※ 만약 모든 영역에서 못 찾을 경우 ? 에러가 나지 않고 그냥 아무것도 출력이 되지 않습니다.
ex) 존재하지 않는 값을 입력 -> scope 값 : ${scope2 }
다음 예시를 보며 좀 더 제대로 알아보자.
<Servlet 영역>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//application에 담기
ServletContext application = request.getServletContext();
application.setAttribute("scope", "application");
request.getRequestDispatcher("views/1_EL/01_el.jsp").forward(request, response);
response.getWriter().append("Served at: ").append(request.getContextPath());
application 객체를 얻어와서 값을 담아줍니다.
scope 명칭의 키값으로 application 문자열을 담아줍니다.
<01_el.jsp영역>
<h3>4. 직접 Scope영역을 지정해서 접근하기</h3>
<%
pageContext.setAttribute("scope", "page");
%>
pageScope에 담긴 값 : ${scope } 또는 ${pageScope.scope } <br>
requestScope에 담긴 값 : ${requestScope.scope } <br>
sessionScope에 담긴 값 : ${sessionScope.scope } <br>
applicationScope에 담긴 값 : ${applicationScope.scope } <br><br>
application에 담은 scope 키값이 다른 scope와 겹칠 수 있습니다.
<% %>표현식 안에 직접 scope영역을 지정하여 값을 불러낼 수 있습니다.
하나하나 직접 scope영역을 지정해서 접근해보자.
<화면 출력 모습>
동일한 키값이더라도 각 하나하나의 scope에 담겨있는 키값이 출력되는 것이 보입니다.
안전성을 위해서 scope의 값을 꺼낼때는 el표현식으로 ${ scope종류.Scope.키값 }으로 적어주는 것이 불러오는 값이 어디선가 혹시라도 중복되지 않고 안전합니다.
※ 직접 값을 담을 때에는 request 혹은 session 하나만 선택해서 사용하는 것이 편리합니다.
관리해야할 scope가 늘어날수록 유지보수가 힘들어지기 때문입니다.
'⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆ > JSP' 카테고리의 다른 글
JSP - EL을 활용한 연산 (null값 비교, 논리연산자비교) (0) | 2023.07.30 |
---|---|
JSP - EL을 활용한 연산 (산술, 대소비교, 동등비교) (0) | 2023.07.30 |
JSP - 스클립틀릿과 표현식으로 / EL을 이용해서 'Scope에 저장된 값들 출력하기' (0) | 2023.07.30 |
[JSP] JSP Action Tag (커스텀액션태그 - JSTL FormatNumber, FormatDate) (1) | 2023.07.28 |
[JSP] JSP Action Tag (표준액션태그 - 정적, 동적 include방식) (0) | 2023.07.28 |