xxxScope 내장객체
/*
EL에서는 각 영역에 저장된 속성을 읽어 올 수 있는
xxxScope계열 내장 객체를 제공함.
즉 pageScope/requestScope/sessionScope/applicationScope
읽어 올때 : xxxxScope.속성명 혹은 xxxxScope["속성명"]
또한 xxxxScope는 생략가능 ,
생략시 가장 작은 영역에 있는값을 읽어옴
*/
- requestScope : request 기본 개체에 저장된 속성의 <속성,값> 매핑을 저장한 Map Collection
- sessionScope : session 기본 개체에 저장된 속성의 <속성,값> 매핑을 저장한 Map Collection
- applicationScope : application 기본 개체에 저장된 속성의 <속성,값> 매핑을 저장한 Map Collection
- pageScope : pageContext 기본 개체에 저장된 속성의 <속성,값> 매핑을 저장한 Map Collection
<%
pageContext.setAttribute("scopeVar", "페이지 영역");
request.setAttribute("scopeVar", "리퀘스트 영역");
session.setAttribute("scopeVar", "세션 영역");
application.setAttribute("scopeVar", "어플리케이션 영역");
%>
<h4>각 영역에 저장된 속성 읽기(xxxScope계열 객체 지정)</h4>
<ul class="list-unstyled">
<li>\${pageScope.scopeVar } : ${pageScope.scopeVar }</li>
<li>\${requestScope.scopeVar } : ${requestScope.scopeVar }</li>
<li>\${sessionScope['scopeVar'] } : ${sessionScope['scopeVar'] }</li>
<li>\${applicationScope["scopeVar"] } : ${applicationScope["scopeVar"] }</li>
</ul>
<h4>각 영역에 저장된 속성 읽기(xxxScope계열 객체 미지정)</h4>
<ul class="list-unstyled">
<li>\${scopeVar } : ${scopeVar }</li>
<li>\${scopeVar } : ${scopeVar }</li>
<li>\${scopeVar } : ${scopeVar }</li>
<li>\${scopeVar } : ${scopeVar }</li>
</ul>
<jsp:forward page="BuiltInObjectOfScopeForwarded.jsp"/>
BuiltInObjectOfScopeForwarded.jsp
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">EL의 xxxScope계열 내장객체(포워드된 페이지)</legend>
<h4>자바코드로 각 영역에 저장된 속성 읽기(xxxScope계열 객체 지정)</h4>
<ul class="list-unstyled">
<li>페이지 영역 : <%=pageContext.getAttribute("scopeVar") %></li>
<li>리퀘스트 영역 : <%=request.getAttribute("scopeVar") %></li>
<li>세션 영역 : <%=session.getAttribute("scopeVar") %></li>
<li>어플리케이션 영역 : <%=application.getAttribute("scopeVar") %></li>
</ul>
<h4>각 영역에 저장된 속성 읽기(xxxScope계열 객체 지정)</h4>
<ul class="list-unstyled">
<li>\${pageScope.scopeVar } : ${pageScope.scopeVar }</li>
<li>\${requestScope.scopeVar } : ${requestScope.scopeVar }</li>
<li>\${sessionScope['scopeVar'] } : ${sessionScope['scopeVar'] }</li>
<li>\${applicationScope["scopeVar"] } : ${applicationScope["scopeVar"] }</li>
</ul>
<h4>각 영역에 저장된 속성 읽기(xxxScope계열 객체 미 지정)</h4>
<ul class="list-unstyled">
<li>\${scopeVar } : ${scopeVar}</li>
<li>\${scopeVar } : ${scopeVar}</li>
<li>\${scopeVar} : ${scopeVar}</li>
<li>\${scopeVar} : ${scopeVar}</li>
</ul>
</fieldset>
▲포워드된 페이지 에서는 어떻게 될까?
▲ 페이지영역은 없어져버리니까 그 다음 크기가 큰 request영역에서 찾아오기 때문에 pageScope에서 찾는 값은 모두 null이 나온다.
param내장객체
param
요청 파라미터의 <파라미터명,값> 매핑을 저장한 Map Collection,
파라미터값의 타입은 String request.getParameter(파라미터명)와 동일
값을 얻어올때 : param.파라미터명
paramValues
요청 파라미터의 <파라미터명,값배열> 매핑을 저장한 Map Collection,
파라미터값의 타입은 String[], request.getParametervalues(파라미터명)와 동일
값을 얻어올때 : paramValues.파라미터명
<%
//페이지 이동 전 리퀘스트 영역에 속성저장
request.setAttribute("dtoObject",new MemberDTO("KIM","1234","김길동","20"));
request.setAttribute("stringObject",new String("문자열 객체"));
request.setAttribute("integerObject",new Integer(1000));
%>
<jsp:forward page="BuiltInObjectOfParamResult.jsp">
<jsp:param value="10" name="first"/>
<jsp:param value="5" name="second"/>
</jsp:forward>
▲request 영역에 저장과 foward방식으로 파라미터와 값을 Result페이지로 넘긴다.
BuiltInObjectOfParamResult.jsp
<h4>자바코드로 영역에 저장된 속성 및 파라미터로 전달된 값 읽기</h4>
<h6>영역에 저장된 속성</h6>
<%
MemberDTO member=(MemberDTO)request.getAttribute("dtoObject");
%>
<ul class="list-unstyled">
<li>MemberDTO객체 :<%=member%> </li>
<li>String객체 :<%=request.getAttribute("stringObject")%> </li>
<li>Integer객체 :<%=request.getAttribute("integerObject")%> </li>
</ul>
<h6>파라미터로 전달된 값</h6>
<%
int first=Integer.parseInt(request.getParameter("first"));
int second=Integer.parseInt(request.getParameter("second"));
%>
두 파라미터합 : <%=first+second%>
<h4>EL로 request 영역에 저장된 속성 및 파라미터로 전달된 값 읽기</h4>
<h6>영역에 저장된 속성</h6>
<!--
영역에 저장된 값은 xxxScope내장 객체로]
-xxxScope.속성명 혹은 xxxScope["속성명"]
파라미터로 전달 된 값은
param내장객체 혹은 paramValues내장객체로
]
-param.파라미터명 혹은 param["파라미터명"]
paramValues.파리미터명 혹은 paramValues["파라미터명"]
param은 request.getParameter()와 같고
paramValues는 request.getParameterValues()와 같다
※EL에서는 문자열등을 표시할때 ""이나 '' 둘다 사용가능
-->
<ul class="list-unstyled">
<li>MemberDTO객체 :${requestScope.dtoObject } </li>
<li>String객체 :${stringObject } </li>
<li>Integer객체 :${integerObject } </li>
</ul>
▲ 결과값
param내장객체 예제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>BuiltInObjectOfParamExamIndex.jsp</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<style>
/*점보트론 세로폭 줄이기*/
.jumbotron {
padding-top: 1rem;
padding-bottom: 1rem;
}
</style>
</head>
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h1>Expression Language</h1>
</div><!--container-fluid-->
</div><!--jumbotron-fluid-->
<div class="container">
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">사용자입력값 받기</legend>
<form action="BuiltInObjectOfParamExamResult.jsp" method="post">
<div class="form-group">
<label><kbd class="lead">이름</kbd></label>
<input type="text" class="form-control" name="name" placeholder="이름을 입력하세요">
</div>
<div class="form-group">
<label><kbd class="lead">성별</kbd></label>
<div class="d-flex">
<div class="custom-control custom-radio mr-2">
<input type="radio" class="custom-control-input" name="gender" value="남자" id="male">
<label for="male" class="custom-control-label">남자</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" class="custom-control-input" name="gender" value="여자" id="female">
<label for="female" class="custom-control-label">여자</label>
</div>
</div>
</div>
<div class="form-group">
<label><kbd class="lead">관심사항</kbd></label>
<div class="d-flex">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="inter" value="정치" id="POL">
<label class="custom-control-label" for="POL">정치</label>
</div>
<div class="custom-control custom-checkbox mx-2">
<input type="checkbox" class="custom-control-input" name="inter" value="경제" id="ECO">
<label class="custom-control-label" for="ECO">경제</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="inter" value="연예" id="ENT">
<label class="custom-control-label" for="ENT">연예</label>
</div>
<div class="custom-control custom-checkbox ml-2">
<input type="checkbox" class="custom-control-input" name="inter" value="스포츠" id="SPO">
<label class="custom-control-label" for="SPO">스포츠</label>
</div>
</div>
</div>
<div class="form-group">
<label><kbd class="lead">학력사항</kbd></label>
<select name="grade" class="custom-select mt-3 custom-select-lg">
<option value="">학력을 선택하세요</option>
<option value="초등학교">초등학교</option>
<option value="중학교">중학교</option>
<option value="고등학교">고등학교</option>
<option value="대학교">대학교</option>
</select>
</div>
<button type="submit" class="btn btn-primary">확인</button>
</form>
</fieldset>
</div><!-- container -->
</body>
</html>
▲확인 버튼을 누르면 BuiltInObjectOfParamExamResult.jsp로 전송한다.
BuiltInObjectOfParamExamResult.jsp
<%@page import="java.util.Arrays"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/Common/Validate.jsp" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
//POST방식 한글 처리
request.setCharacterEncoding("UTF-8");
//POST방식일때 한글 깨지는 거 처리용
request.setCharacterEncoding("UTF-8");
if(!"POST".equals(request.getMethod())){
out.println("<script>");
out.println("alert('잘못된 접근입니다');");
out.println("history.back();");
out.println("</script>");
return;//void _jspService()메소드 빠져 나가기
}/////////
//파라미터 받기
String name=request.getParameter("name");
if(!isValidate(out, name,"이름을 입력하세요")) return;
String gender=request.getParameter("gender");
if(!isValidate(out, gender,"성별을 선택하세요")) return;
String[] inter=request.getParameterValues("inter");
if(!isValidate(out,inter,3)) return;
String grade=request.getParameter("grade");
if(!isValidate(out, grade,"학력사항을 선택하세요")) return;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>BuiltInObjectOfParamExamResult.jsp</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<style>
/*점보트론 세로폭 줄이기*/
.jumbotron {
padding-top: 1rem;
padding-bottom: 1rem;
}
</style>
</head>
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h1>Expression Language</h1>
</div><!--container-fluid-->
</div><!--jumbotron-fluid-->
<div class="container">
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">자바코드(스크립팅 요소)로 파라미터 받기</legend>
<ul class="list-unstyled">
<li>이름:<%=name %></li>
<li>성별:<%=gender %></li>
<li>관심사항:<%=Arrays.toString(inter) %> </li>
<li>학력:<%=grade %></li>
</ul>
</fieldset>
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">EL로 파라미터 받기</legend>
<ul class="list-unstyled">
<li>이름:${param.name }</li>
<li>성별:${param.gender }</li>
<li>관심사항:
<c:forEach var="interVal" items="${paramValues.inter}">
${interVal }
</c:forEach>
</li>
<li>학력:${param.grade}</li>
</ul>
</fieldset>
</div><!-- container -->
</body>
</html>
▲파라미터로 전달받은 값은 param 내장객체로 받을 수 있다.
header 및 cookie
header
: 요청정보의 <헤더이름,값> 매필을 저장한 Map Collection,
값을 얻어올때 : header.헤더명 단, user-agent의 경우 헤더명에 - (대쉬) 가 들어가기때문에 header["user-agent"]로
headerValues
: 요청정보의 <헤더이름,값배열> 매필을 저장한 Map Collection
request.getHeaders(이름)결과와 동일
cookie
: <쿠키명,값> 매핑을 저장한 Map Collection.
값 얻어올때: cookie.쿠키명.value
<!--
※EL에서는 값을 설정하거나 영역에 속성을
저장(설정)하지는 못한다.
단지 저장된 값을 출력만 할 수 있다.
-->
<h4>1. EL의 pageContext내장객체</h4>
<!-- JSP의 pageContext내장객체와 같다.단,
자바빈 규칙으로 접근 가능한 메소드만 제공한다.
-->
<h6>자바코드로 컨텍스트 루트 얻기</h6>
<ul class="list-unstyled">
<li>방법1 : request내장객체 - <%=request.getContextPath() %></li>
<%
String context=((HttpServletRequest)pageContext.getRequest()).getContextPath();
%>
<li>방법2 : pageContext내장객체 - <%=context %></li>
</ul>
<h6>EL로 컨텍스트 루트 얻기</h6>
\${pageContext.request.contextPath} : ${pageContext.request.contextPath}
<h6>자바코드로 세션의 유효시간 얻기</h6>
<%=session.getMaxInactiveInterval() %>초<br/>
<%=request.getSession().getMaxInactiveInterval() %>초<br/>
<%=pageContext.getSession().getMaxInactiveInterval() %>초<br/>
<%=((HttpServletRequest)pageContext.getRequest()).getSession().getMaxInactiveInterval() %>초<br/>
<h6>EL로 세션의 유효시간 얻기</h6>
\${pageContext.session.maxInactiveInterval } : ${pageContext.session.maxInactiveInterval }초<br/>
\${pageContext.request.session.maxInactiveInterval } : ${pageContext.request.session.maxInactiveInterval }초
<h4>2. EL의 header내장객체</h4>
<h6>자바코드로 요청헤더값 얻기</h6>
<%=request.getHeader("user-agent") %>
<h6>EL로 요청헤더값 얻기</h6>
<!--
EL식으로 요청헤더명에 따른
헤더 값을 출력할때는
header.요청헤더명이나
혹은 header["요청헤더명"]
단,키값에 해당하는 요청헤더명에
특수 문자가 들어가 있는 경우에는
무조건 []사용
-->
<!-- PropertyNotFoundException:pageContext.request의 header속성이 없다
즉 요청헤더를 구할때는 무조건 header내장객체 사용
-->
\${pageContext.request.header["user-agent"]} : \${pageContext.request.header["user-agent"]}<br/>
\${header.user-agent} : ${header.user-agent}<br/>
\${header['user-agent']} : ${header['user-agent']}
<h4>3. EL의 cookie내장객체</h4>
<%
//자바코드로 쿠키 설정
Cookie cookie = new Cookie("KOSMO","한소인");
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
%>
<h6>자바코드로 쿠키 얻기</h6>
<%
Cookie[] cookies = request.getCookies();
if(cookies !=null){
for(Cookie cook:cookies){
String name= cook.getName();
String value= cook.getValue();
out.println(name + " : "+value+"<br/>");
}
}
%>
<h6>EL로 쿠키 얻기</h6>
\${pageContext.request.cookies} : ${pageContext.request.cookies}<br/>
<!-- cookie내장객체 미 사용 -->
<c:forEach items="${pageContext.request.cookies}" var="cook">
${cook.name} : ${cook.value} <br/>
</c:forEach>
<!--
cookie.쿠키명.value로 쿠키명에 해당하는 쿠키값을
얻을 수 있다.
-->
<!-- cookie내장객체 사용 -->
\${cookie.KOSMO.value } : ${cookie.KOSMO.value }<br/>
\${cookie['KOSMO'].value } : ${cookie['KOSMO'].value }
initParam내장객체
<!--
컨텍스트 초기화 파라미터를 얻어 올수 있는 내장 객체
-->
<!--
[Context초기화 파라미터]
-Context초기화 파라미터는 ServletContext의
getInitParameter("파라미터명")메소드를 통해서
얻는다.
-Context를 구성하는 모든 서블릿에서 공유할 수 있는 변수
[Servlet초기화 파라미터]
-Servlet초기화 파라미터는 ServletConfig의
getInitParameter("파라미터명")메소드를 통해서 얻는다
-해당 서블릿에서만 사용할 수 있는 변수
※초기화 파라미터는 web.xml에 등록
-->
<h6>자바코드로 컨텍스트 초기화 파라미터 얻기</h6>
<ul class="list-unstyled">
<li>ORACLE-URL : <%=application.getInitParameter("ORACLE-URL") %></li>
<li>ORACLE-DRIVER : <%=application.getInitParameter("ORACLE-DRIVER") %></li>
<li>PAGE-SIZE : <%=application.getInitParameter("PAGE-SIZE") %></li>
<li>BLOCK-PAGE : <%=application.getInitParameter("BLOCK-PAGE") %></li>
</ul>
<h6>EL로 컨텍스트 초기화 파라미터 얻기</h6>
<ul class="list-unstyled">
<li>ORACLE-URL : ${initParam['ORACLE-URL']}</li>
<li>ORACLE-DRIVER : ${initParam['ORACLE-DRIVER']}</li>
<li>PAGE-SIZE : ${initParam['PAGE-SIZE']}</li>
<li>BLOCK-PAGE : ${initParam['BLOCK-PAGE']}</li>
</ul>
컬렉션에 저장된 객체를 EL로 출력
<h4>컬렉션에 저장된 객체를 EL로 출력</h4>
<%
//데이타 준비
MemberDTO first= new MemberDTO("KIM","1234","김길동","20");
MemberDTO second= new MemberDTO("LEE","1234","이길동","30");
//리스트 계열 컬렉션에 객체 저장
List<MemberDTO> list= Arrays.asList(first,second);
//맵 계열 컬렉션에 객체 저장
Map<String,MemberDTO> map = new HashMap<>();
map.put("first", first);
map.put("second", second);
%>
<h4>자바코드로 출력</h4>
<h5>리스트 계열 컬렉션</h5>
<h6>일반 for문으로 출력</h6>
<% for(int i=0; i < list.size();i++){ %>
<%=list.get(i) %><br/>
<%} %>
<h6>확장 for문으로 출력</h6>
<% for(MemberDTO member:list){%>
<%=member %><br/>
<%} %>
<h5>맵 계열 컬렉션</h5>
<%
Set<String> keys= map.keySet();
for(String key:keys){
%>
<%=key %> : <%=map.get(key) %><br/>
<%} %>
<h4>EL로 출력</h4>
<c:set var="list" value="<%=list%>"/>
<c:set var="map" value="<%=map%>"/>
<h5>리스트 계열 컬렉션</h5>
<h6>JSTL 미 사용</h6>
\${list} : ${list}<br/>
<!-- list.get(0)와 같다 -->
\${list[0]} : ${list[0]}
<ul class="list-unstyled">
<li>이름:${list[0].name},아이디:${list[0].id} ,비번:${list[0].pwd}</li>
<li>${list[1]}</li>
<!-- 출력만 안된다 \${list[100]}는 null이다-->
<li>${list[100]}</li>
</ul>
<h6>JSTL 사용:즉 저장된 객체를 수를 모름</h6>
<ul class="list-unstyled">
<c:forEach items="${list}" var="member">
<li>이름:${member.name},아이디:${member["id"]} ,비번:${member.pwd}</li>
</c:forEach>
</ul>
<h5>맵 계열 컬렉션</h5>
<h6>JSTL 미 사용</h6>
\${map} : ${map}<br/>
<!-- map.get("first"):와 같다 -->
\${map.first} : ${map.first}
<ul class="list-unstyled">
<li>이름:${map.first.name},아이디:${map["first"]["id"]},비번:${map['first'].pwd }</li>
<li>\${map.second} : ${map.second}</li>
<li>\${map.third} : ${map.third}</li><!-- \${map.third}는 null이다 -->
</ul>
<h6>JSTL 사용:즉 키를 모름</h6>
<ul class="list-unstyled">
<!--
JSTL의 forEach사용시
var에 지정한 변수명.value는 밸류값
변수명.key는 키값
-->
<c:forEach items="${map}" var="item">
키은 ${item.key} 값은 ${item.value}<br/>
이름:${item.value.name},아이디:${item.value.id},비번:${item.value.pwd}<br/>
</c:forEach>
</ul>
<!-- \${}에서 자바객체의 메소드 호출 가능
단,객체의 값을 변화시키는 메소드는 호출불가(에러)
호출가능한 메소드는 읽기용류의 메소드들만 가능
-->
<h4>컬렉션의 읽기용 메소드의 호출</h4>
\${list.isEmpty() } : ${list.isEmpty() }<br/>
\${list.size() } : ${list.size() }<br/>
<% map.clear(); %>
\${map.isEmpty() } : ${map.isEmpty() }<br/>
\${map.size() } : ${map.size() }<br/>
\${list.clear()} : \${list.clear()}<!-- UnsupportedOperationException:읽기용 메소드가 아님으로 -->
'JSP' 카테고리의 다른 글
[JSP] JSTL Core Tag - part.2(if,choose ~when ~otherwise,forEach) (0) | 2022.05.10 |
---|---|
[JSP] JSTL Core Tag - part.1(set,remove) (0) | 2022.05.10 |
[JSP]Expression Language(EL : 표현언어) (0) | 2022.05.06 |
[JSP]Action Tag (0) | 2022.05.03 |
[JSP]session (0) | 2022.05.03 |