데이터들을 담을 수 있는 JSP내장객체 종류
1.
ServletContext(application Scope)
: 한 애플리케이션당 단 1개 존재하는 객체
이 영역에 데이터를 담으면 애플리케이션 전역에서 사용가능 (내가 제거하기 전까지)
공유범위가 가장 큼 (jsp/servlet/java)
2.
HttpSession(session Scope)
: 한 브라우저당 1개 존재하는 객체
이 영역에 데이터를 담으면 jsp/servlet 단에서 사용가능
공유범위가 다소 제한적임
3.
HttpServletRequest(request Scope)
: 요청 및 응답시 매번 생성되는 객체
이 영역에 데이터를 담으면 해당 request 객체를 포워딩 받는 응답jsp에서만 사용 가능 (1회성)
공유범위가 응답 jsp뿐 !
4.
pageContext(page Scope)
: 현재 그 jsp페이지에서만 사용 가능
공유범위가 가장 적음 (해당 그 페이지)
- 위의 객체들에 담을 때는 .setAttribute("키", 담고자하는데이터)
꺼낼 때는 .getAttribute("키") : 밸류
지우고자 할 때는 .removeAttribute("키")
객체에 저장된 값들 가져오기
•
기존에 하던 방식대로 스크립틀릿과 표현식을 이용해서 각 영역에 담겨있는 값 뽑아서 화면에 출력
<%
String classRoom = (String)request.getAttribute("classRoom");
Person student = (Person)request.getAttribute("student");
String academy = (String)session.getAttribute("academy");
Person teacher = (Person)session.getAttribute("teacher");
%>
<p>
학원명 : <%= academy %> <br>
강의장 : <%= classRoom %> <br>
강사 : <%= teacher.getName() %>, <%= teacher.getAge() %>, <%= teacher.getGender() %> <br>
<br><br>
수강생정보
<ul>
<li>이름 : <%= student.getName() %></li>
<li>나이 : <%= student.getAge() %></li>
<li>성별 : <%= student.getGender() %></li>
</ul>
</p>
--%>
JavaScript
복사
•
EL을 이용해서 보다 쉽게 해당 Scope에 저장된 값들 출력하기
◦
EL은 getXXXX를 통해 값을 빼 올 필요 없이 키값만 제시하면 바로 접근 가능
내부적으로 해당 Scope영역에 해당 키값의 밸류값을 가져올 수 있음
기본적으로 EL은 JSP내장 객체를 구분하지 않고 자동적으로 모든 내장객체에 키값을 검색해서 존재하는 경우 값을 가져옴
(+)import도 안해도 됨 !
<p>
학원명 : ${ academy } <br>
강의장 : ${ classRoom } <br>
강사 : ${ teacher.name } , ${ teacher.age } , ${ teacher.gender }<br><br>
<%--
teacher에 접근했을때의 밸류값 Person 객체임, 해당 Person객체의 각 필드에 담긴 값을
출력하고자 한다면 .필드명 으로 접근하면 됨. 내부적으로 getter메소드 찾아서 실행됨
(즉, getter메소드 만들어둬야됨!!)
--%>
수강생정보
<ul>
<li>이름 : ${student.name}</li>
<li>나이 : ${student.age}</li>
<li>성별 : ${student.gender}</li>
</ul>
</p>
JavaScript
복사
•
단, EL사용시 내장 객체들에 저장된 키값이 동일할 경우
•
직접 Scope영역을 지정해서 접근하기
<h3>3. 단, EL사용시 내장 객체들에 저장된 키값이 동일할 경우</h3>
scope값 : ${ scope } <br>
<!--
EL은 공유범위가 제일 작은 Scope에서부터 해당 키값을 검색함
page => request => session => application
만일, 모든 영역에서 못찾을경우? => 아무것도 출력안됨 (오류안남) / null출력 X !!!
-->
<h3>4. 직접 Scope영역을 지정해서 접근하기</h3>
<%
// pageScope에 담기
pageContext.setAttribute("scope", "page");
%>
pageScope에 담긴 값 : ${ scope } 또는 ${ pageScope.scope } <br>
requestScope에 담긴 값 : ${ requestScope.scope } <br>
sessionScope에 담긴 값 : ${ sessionScope.scope } <br>
applicationScope에 담긴 값 : ${ applicationScope.scope } <br><br>
잘못접근예시(session에 classRoom) : ${ sessionScope.classRoom }
JavaScript
복사
EL연산
<h1>1. 산술 연산</h1>
<%-- <%= (int)request.getAttribute("big") + (int)request.getAttribute("small") %> --%>
10 + 3 = ${ big + small } <br>
10 - 3 = ${ big - small } <br>
10 x 3 = ${ big * small } <br>
10 / 3 = ${ big / small } 또는 ${ big div small } <br>
10 % 3 = ${ big % small } 또는 ${ big mod small } <br><br>
<h3>2. 숫자간 대소 비교 연산</h3>
10 > 3 = ${ big > small } 또는 ${ big gt small } <br>
10 < 3 = ${ big < small } 또는 ${ big lt small } <br>
10 >= 3 = ${ big >= small } 또는 ${ big ge small } <br>
10 <= 3 = ${ big <= small } 또는 ${ big le small } <br><br>
<h3>3. 동등 비교 연산</h3>
sOne과 sTwo이 일치합니까 : ${ sOne == sTwo } 또는 ${ sOne eq sTwo } <br>
<!-- el에서의 == 비교는 자바에서의 equals()와 같은 동작을 함 -->
sOne과 sTwo가 일치하지 않습니까 : ${ sOne != sTwo } 또는 ${ sOne ne sTwo } <br>
big에 담긴값이 10과 일치합니까 : ${ big == 10 } 또는 ${ big eq 10 } <br>
sOne에 담긴값이 "안녕"과 일치합니까 : ${sOne == "안녕" } 또는 ${ sOne eq "안녕" }
<!-- el안에서 문자열 제시시 홑따옴표던 쌍따옴표던 가리지 않음 -->
<h3>4. 객체가 null인지 또는 리스트가 비어있는지 체크</h3>
pTwo가 null입니까 : ${ pTwo == null } 또는 ${ empty pTwo } <br>
pOne이 null입니까 : ${ pOne == null } 또는 ${ empty pOne } <br>
pOne이 null이 아닙니까 : ${ pOne != null } 또는 ${ !empty pOne } <br>
lOne이 텅 비어있습니까 : ${ empty lOne } <br>
lTWo가 텅 비어있습니까 : ${ empty lTwo } <br>
<h3>5. 논리연산자</h3>
${ true && true } 또는 ${ true and true } <br>
${ true || true } 또는 ${ true or true } <br>
big이 small보다 크고 lOne이 텅 비어있습니까 : ${ big gt small and empty lOne }
JavaScript
복사
include
<h3>include</h3>
<p>또 다른 페이지를 포함하고자 할 때 쓰이는 방식</p>
<h4>1. 기존의 include지시어 이용한 방식 (정적 include방식 == 컴파일시 포함되는 형태)</h4>
<%--
<%@ include file="footer.jsp" %>
<br><br>
특징 : include하고 있는 페이지상에 선언되어있는 변수를 현재 이페이지에서도 사용 가능함 <br>
include한 페이지의 year 변수값 : <%= year %> <br><br>
단, 문제점 : 현재 이 페이지에서 동일한 이름의 변수를 선언할 수 없음 <br>
<% String year = "2022"; %>
--%>
<h4>2. JSP표준액션 태그를 이용한 방식 (동적 include방식 == 런타임시 포함되는 형태)</h4>
<jsp:include page="footer.jsp" /> <br><br>
특징1 : include하고 있는 페이지에 선언된 변수를 공유하지 않음! (동일한 이름의 변수로 재선언 가능) <br><br>
<% int year = 2022; %>
특징2 : 포함시 include하는 페이지로 값 전달할 수도 있음 <br>
<jsp:include page="footer.jsp">
<jsp:param name="test" value="Hello"/>
</jsp:include>
<br>
<jsp:include page="footer.jsp">
<jsp:param name="test" value="Bye"/>
</jsp:include>
JavaScript
복사
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.text.SimpleDateFormat, java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String year = new SimpleDateFormat("yyyy").format(new Date());
%>
Copyright © 1998-<%= year %> KH Information Educational Institute All Right Reserved <br>
test : ${ param.test } <br>
</body>
</html>
JavaScript
복사
footer.jsp


