반응형
01. EL의 내장객체 개념
EL 내장객체는 언제사용?
- JSP 내장객체의 속성값이 동일할 때 EL 표현식에서는 EL 내장객체를 사용하여 스코프 속성값을 구분하여 출력 가능
🖤 implicit_scope.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//JSP 내장객체에 따라 속성값을 저장하여 사용할 수 있는 범위가 다르게 구분
//속성값 사용범위(Scope) :Page Scope, Request Scope, Session Scope, Application Scope
pageContext.setAttribute("pageName", "홍길동"); //Page Scope : 나 자신만 (혼자)
request.setAttribute("requestName", "임꺽정"); //Request Scope : 스레드가 이동된 현재 웹프로그램에서만 (형제)
session.setAttribute("sessionName", "전우치"); //Session Scope : 같은 클라이언트 브라우저에서 요청해 실행되는 모든 웹프로그램에서 (친척)
application.setAttribute("applicationName", "일지매"); //Application Scope : 같은 서버를 사용하는 모든 웹프로그램에서 (모두다)
//JSP 내장객체가 다른 경우 속성명을 동일하게 설정하여 속성값 저장 가능
//=> JSP 내장객체가 같은 경우 속성명을 동일하게 설정하면 기존 속성값 대신 새로운 속성값 저장 - 변경 처리
pageContext.setAttribute("name", "홍길동"); //Page Scope
request.setAttribute("name", "임꺽정"); //Request Scope
session.setAttribute("name", "전우치"); //Session Scope
application.setAttribute("name", "일지매"); //Application Scope
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - Scope Attribute</h1>
<hr>
<h3>스코프 속성명이 서로 다른 경우</h3>
<ul>
<li>pageName 속성값(Page Scope) = ${pageName }</li>
<li>requestName 속성값(Request Scope) = ${requestName }</li>
<li>sessionName 속성값(Session Scope) = ${sessionName }</li>
<li>applicationName 속성값(Application Scope) = ${applicationName }</li>
</ul>
<h3>스코프 속성명이 서로 같은 경우</h3>
//<%-- EL 표현식의 속성명으로 속성값을 검색하여 제공하는 순서 존재 --%>
//<%-- Page Scope >> Request Scope >> Session Scope >> Application Scope >> 미출력 --%>
//<%-- => JSP 내장객체에 동일한 이름의 속성명이 존재할 경우 먼저 검색된 속성값을 제공받아 출력 --%>
//<%-- => JSP 내장객체에 속성명을 다르게 설정하는 것을 권장 --%>
<ul>
<li>pageName 속성값(Page Scope) = ${name }</li>
<li>requestName 속성값(Request Scope) = ${name }</li>
<li>sessionName 속성값(Session Scope) = ${name }</li>
<li>applicationName 속성값(Application Scope) = ${name }</li>
</ul>
//<%-- JSP 내장객체의 속성값이 동일한 경우 EL 표현식에서 EL 내장객체를 사용하여 스코프 속성값을 구분하여 출력 가능 --%>
//<%-- EL 내장객체 : pageScope, requestScope, sessionScope, applicationScope 내장객체 이용 --%>
<ul>
<li>pageName 속성값(Page Scope) = ${pageScope.name }</li>
<li>requestName 속성값(Request Scope) = ${requestScope.name }</li>
<li>sessionName 속성값(Session Scope) = ${sessionScope.name }</li>
<li>applicationName 속성값(Application Scope) = ${applicationScope.name }</li>
</ul>
</body>
</html>
02. EL의 내장객체 종류
1) EL 내장객체 - Request Parameter
implicit_param_form.jsp - 요청페이지
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - Request Parameter</h1>
<hr>
<form action="implicit_param_action.jsp" method="post">
<div><b>개인정보</b></div>
<div>이름 : <input type="text" name="name"></div>
<div>주소 : <input type="text" name="address"></div>
<br>
<div><b>좋아하는 음식</b></div>
<div>음식-1 : <input type="text" name="food"></div>
<div>음식-2 : <input type="text" name="food"></div>
<br>
<button type="submit">전송</button>
</form>
</body>
</html>
implicit_param_action.jsp - 응답페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 사용자 입력값을 전달받아 클라이언트에게 전달하는 JSP 문서 --%>
//<%-- POST 방식으로 요청하여 리퀘스트 메세지의 몸체부에 저장되어 전달하는 값에 대한 캐릭터셋 변경 --%>
//<%-- => 인코딩 필터를 이용할 경우 필터에 의해 웹프로그램 실행 전 캐릭터셋 변경 가능 --%>
//<%-- 인코딩 필터 기능을 제공해주는 필터 클래스 만들어 사용할 것 --%>
//<%--<%request.setCharacterEncoding("utf-8");%>--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - Request Parameter</h1>
<h3>EL 미사용</h3>
<ul>
<li>이름 = <%=request.getParameter("name") %></li>
<li>주소 = <%=request.getParameter("address") %></li>
//<%-- 같은 이름으로 전달되는 값이 여러개 있는 경우 첫번째 전달값만 반환받아 사용 --%>
//<%--
//<li>음식-1 = <%=request.getParameter("food") %></li>
//<li>음식-2 = <%=request.getParameter("food") %></li>
//--%>
//<%-- 같은 이름으로 전달되는 값이 여러개 있는 경우 getParameterValues() 메소드로
//모든 전달값을 문자열 배열로 반환받아 사용 가능 --%>
<li>음식-1 = <%=request.getParameterValues("food")[0] %></li>
<li>음식-2 = <%=request.getParameterValues("food")[1] %></li>
</ul>
<h3>EL 사용</h3>
<ul>
//<%--EL 표현식에서 param 내장객체 또는 paramValues 내장객체의 맵키로
//사용하여 전달값을 구분하여 출력 --%>
<li>이름 = ${param.name }</li>
<li>주소 = ${param.address }</li>
<li>음식-1 = ${paramValues.food[0] }</li>
<li>음식-2 = ${paramValues.food[1] }</li>
</ul>
</body>
</html>
2) EL 내장객체 - Request Header
[EL 내장객체 - Request Header] implicit_heder.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - Request Header</h1>
<h3>EL 미사용</h3>
<ul>
//<%-- request.getHeader(String name) : 리퀘스트 메세지의 머릿부에 저장된 값에서 원하는 값을
//이름을 이용하여 반환하는 메소드 --%>
//<%-- 스마트기기에서 요청했는지, 일반PC에서 요청했는지 등의 정보 알 수 있음 --%>
<li>현재 접속 서버 = <%=request.getHeader("host") %></li>
<li>브라우저 종료 = <%=request.getHeader("user-Agent") %></li>
<li>전달 가능한 문서 종류 = <%=request.getHeaders("accept").nextElement() %></li>
</ul>
<h3>EL 사용</h3>
<ul>
//<%-- EL 표현식에서 header 내장객체 또는 headerValues 내장객체를 이용하여 리퀘스트
//메세지의 머릿부에 저장된 값들 중 원하는 값을 이름(맵키)으로 제공받아 출력 가능 --%>
<li>현재 접속 서버 = ${header.host }</li>
<li>브라우저 종료 = ${header["user-Agent"]}</li>
<li>전달 가능한 문서 종류 = ${headerValues.accept[0]}</li>
</ul>
</body>
</html>
3) EL 내장객체 - Cookie
- 아파치 톰캣이 제공해주는 서블릿 라이브러리에 있음
implicit_cookie_save.jsp - 쿠키값 전달페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//클라이언트에 쿠키가 저장되도록 Cookies 객체를 생성하여 클라이언트에게 전달
// => Cookie 객체에 저장되는 쿠키명과 쿠키값은 한글 사용 불가능
//Cookie cookie = new Cookie("userName","홍길동");
// => 쿠키값으로 한글을 저장하고자 할 경우 부호화 처리하여 저장 가능 : 부호화처리하는 encodeURI()함수 호출하기
Cookie cookie = new Cookie("userName","HongGilDong");
cookie.setMaxAge(60*60); //쿠키 지속시간을 1시간으로 변경
response.addCookie(cookie); //클라이언트에게 쿠키 전달 >> 클라이언트에 쿠키 저장
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - Cookie</h1>
<hr />
<p>클라이언트에 쿠키가 저장되도록 전달 하였습니다.</p>
<p><a href="implicit_cookie_load.jsp">쿠키값 출력</a></p>
</body>
</html>
implicit_cookie_load.jsp - 쿠키값 출력페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - Cookie</h1>
<h3>EL 미사용</h3>
<%
//클라이언트에서 전달된 모든 쿠키를 Cookie 객체 배열로 반환받아 저장
Cookie[] cookies = request.getCookies();
String userName ="";
//Cookie 객체 배열의 요소값(Cookie 객체)를 하나씩 제공받아 반복 처리
// => Cookie 객체의 쿠키명을 반환받아 비교하여 쿠키값 저장
for(Cookie cookie:cookies){
if(cookie.getName().equals("userName")){
userName=cookie.getValue();
}
}
%>
<p>쿠키에 저장된 사용자 이름 = <%=userName %></p>
<h3>EL 사용</h3>
//<%--EL 표현식에서 cookie 내장객체를 이용하여 쿠키명으로 쿠키값을 제공받아 출력 가능 --%>
<p>쿠키에 저장된 사용자 이름 = ${ cookie}</p>
//<%--userName이라는 Cookie객체가 반환됨 --%>
<p>쿠키에 저장된 사용자 이름 = ${ cookie.userName }</p>
//<%-- => 쿠키명으로 제공되는 값은 Cookie 객체이므로 반드시 쿠키값을 제공받기 위해 value 표현 --%>
<p>쿠키에 저장된 사용자 이름 = ${ cookie.userName.value}</p>
</body>
</html>
4) EL 내장객체 - Context Init Parameter
- listener클래스 할 때 initParam객체 이용할 예정..
implicit_init.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - Context Init Parameter</h1>
<h3>EL 미사용</h3>
<%
//ServletContext.getInitParameter(String name) :
//[web.xml] 파일의 context-param 엘리먼트로 제공되는 값을 얻어와 반환하는 메소드
String name=config.getServletContext().getInitParameter("name");
%>
<p>[web.xml] 파일에서 제공되는 이름 = <%=name %></p>
//<%-- 혹은 아래처럼 바로 출력 --%>
<p>[web.xml] 파일에서 제공되는 이름 = <%=config.getServletContext().getInitParameter("name")%></p>
<h3>EL 사용</h3>
//<%--EL 표현식에서 initParam 내장객체를 이용하여 [web.xml] 파일의 context-param 엘리먼트로
//제공되는 값을 얻어와 출력 가능 --%>
<p>[web.xml] 파일에서 제공되는 이름 = ${initParam.name }</p>
</body>
</html>
5) EL 내장객체 - PageContext 객체(자바객체)
- request 내장객체나 response 내장객체가 없을 때 pagecontext 내장객체에게 달라고 하기
implicit_page.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 내장객체 - PageContext 객체(자바객체)</h1>
<h3>EL 미사용 시 pageContext객체 사용법</h3>
//<%-- request 내장객체 = HttpServletRequest객체와 동일--%>
//<%-- JSP에는 request 내장객체가 있기 때문에 내장객체를 이용하여 HttpServletRequest객체의
//다음과 같은 메소드 호출이 가능한 것임 --%>
<p>컨텍스트 경로 = <%=request.getContextPath() %></p>
<p>요청자원의 URI 주소 = <%=request.getRequestURI() %></p>
//<%-- pageContext.getRequest()
// : 웹프로그램의 ServletRequest객체(부모)를 반환하는 메소드 : 사용가능한 메소드 적음 --%>
//<%-- => ServletRequest객체(부모)를 HttpServletRequest객체(자식)로 형변환하면
//HttpServletRequest 객체(자식)의 메소드 호출 가능 --%>
<p>컨텍스트 경로 = <%=((HttpServletRequest)pageContext.getRequest()).getContextPath() %></p>
<p>요청자원의 URI 주소 = <%=((HttpServletRequest)pageContext.getRequest()).getRequestURI() %></p>
<h3>EL 사용 시 pageContext객체 사용법</h3>
//<%-- EL 표현식에서 pageContext 내장객체(자바객체)를 사용하여 PageContext 객체의 메소드 호출 가능 --%>
//<%--<p>컨텍스트 경로 = ${pageContext.getRequest().getContextPath() }</p>--%>
//<%-- => Getter 메소드는 EL 표현식에서 이름만 사용하면 자동 호출 --%>
<p>컨텍스트 경로 = ${pageContext.request.contextPath }</p>
<p>요청자원의 URI 주소 = ${pageContext.request.requestURI}</p>
//그렇다면 pageContext객체는 언제사용할까??
// => 웹자원의 경로는 절대경로로 표현하는 것을 권장하는데,
//컨텍스트경로는 바뀔 수 있으므로 requset에게 반환받아 사용해야함
//model1에서는 JSP에 자바코드로 <%=request.getContextPath()%> 로 표현했었음.
//마찬가지로 model2에서도 view역할을 하는 JSP에 자바코드가 아닌 표현식언어를 이용해
//${pageContext.request.ContextPath}로 변경해서 사용할 것임
//또한, EL언어의 커스텀태그에는 request내장객체, response내장객체가 없음
//그러므로 pageContext내장객체에게 ServletRequest or ServletResponse 달라고 요청 후
//HttpServletRequest or HttpServletResponse로 형변환하여 사용함
</body>
</html>
03. EL 연산자
- EL 표현식에서 사용하는 연산자 - 산술연산자, 관계연산자, 논리연산자 등
el_operator.jsp
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL Operator</h1>
- 산술연산자
<% request.setAttribute("first", 20); %>
<% request.setAttribute("second", 10); %>
<div>first = ${first }</div>
<div>second = ${second }</div>
<div>first * second = ${first * second }</div>
<div>first / second = ${first / second }</div>
<div>first div second = ${first div second }</div> //<%-- div 연산자 존재 --%>
//<%-- 주의) 정수 % 정수 = 정수가 아닌 무조건 실수 --%>
<div>first % second = ${first % second }</div>
<div>first mod second = ${first mod second }</div> //<%-- mod 연산자 존재 --%>
<div>first + second = ${first + second }</div>
<div>first - second = ${first - second }</div>
- 관계연산자
<div>first > second = ${first > second}</div>
<div>first gt second = ${first gt second}</div>
<div>first < second = ${first < second}</div>
<div>first lt second = ${first lt second}</div>
<div>first >= second = ${first >= second}</div>
<div>first ge second = ${first ge second}</div>
<div>first <= second = ${first <= second}</div>
<div>first le second = ${first le second}</div>
<div>first == second = ${first == second}</div>
<div>first eq second = ${first eq second}</div>
<div>first != second = ${first != second}</div>
<div>first ne second = ${first ne second}</div>
- 논리연산자
<%request.setAttribute("num", 15); %>
<div> first = ${first }</div>
<div> second = ${second }</div>
<div> num = ${num }</div>
<div>first > num && second < num = ${first > num && second < num }</div>
<div>first gt num and second lt num = ${first gt num and second lt num }</div>
<div>first < num || second > num = ${first < num || second > num }</div>
<div>first lt num or second gt num = ${first lt num or second gt num }</div>
- Empty 연산자
<%
Object object = null;
request.setAttribute("object", object);
String string = "";
request.setAttribute("string", string);
String[] array = {};
request.setAttribute("array", array);
List<String> list = new ArrayList<String>();
request.setAttribute("list", list);
%>
//<%-- object 연산자 : EL 표현식으로 제공되는 속성값이 없거나 속성값이 Java객체나 Map 객체인
//경우 저장값이 없으면 [true]를 제공하고, 속성값이 있거나 Java객체 또는 Map 객체에 저장값이
//있는 경우 [false]를 제공하는 연산자 --%>
<div>object Empty = ${empty(object) }</div>
<div>string Empty = ${empty(string) }</div>
<div>array Empty = ${empty(array) }</div>
<div>list Empty = ${empty(list) }</div>
</body>
</html>
반응형
'jsp' 카테고리의 다른 글
[jsp] 27. EL 커스텀태그 @taglib (0) | 2024.07.17 |
---|---|
[jsp] 26. filter클래스 만드는법 (context-param VS init-param) (0) | 2024.07.16 |
[jsp] 24. EL(Expression Language)의 개념 (0) | 2024.07.15 |
[jsp] 23. 웹사이트 제작법9_ 회원 관리 페이지 제작 (feat. JSP) (0) | 2024.07.15 |
[jsp] 22. 웹사이트 제작법8_ 다중 답변형 게시판 페이지 제작 (feat. JSP) (1) | 2024.07.14 |