home
자바
home
📀

EL (Expression Langauge)

데이터들을 담을 수 있는 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 &gt; 3 = ${ big > small } 또는 ${ big gt small } <br> 10 &lt; 3 = ${ big < small } 또는 ${ big lt small } <br> 10 &gt;= 3 = ${ big >= small } 또는 ${ big ge small } <br> 10 &lt;= 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