티스토리 뷰
1. EL ( Expression Language )
- EL은 데이터를 출력하기 위한 언어로써 문법이 직관적이고 사용하기 쉽게 구성되었다.
- EL의 기본 문법은 다음과 같이 $ { 표현식 }으로 구성되어 있다.
- 원래 JSP에서는 변수를 출력하기 위해서 변수 선언과 초기화가 필수였으나, EL에서는 그러한 과정 없이 바로 사용이 가능하다.
2. EL 내장 객체 (***)
- EL에서는 저장된 데이터를 참조하기 위한 내장 객체를 제공한다.
- 이러한 내장객체는 JSP 변수처럼 선언하지 않아도 바로 사용이 가능하다. (**)
- + EL에서의 변수는 우리가 사용하던 자바의 변수와 다르기에, <% %>에서 String name을 선언하고 ${ name }을 통해 출력하려고 해도 출력되지 않는다.
- + 자바의 변수의 경우에는 <%= %>를 통해 출력해야 한다.
- 내장 객체의 종류 :
- 1 ) pageScope : page 공유영역에 존재하는 변수 참조 시 사용
- 2 ) requestScope : request 공유영역에 존재하는 변수 참조 시 사용
- 3 ) sessionScope : session 공유영역에 존재하는 변수 참조 시 사용
- 4 ) applicationScope : application 공유영역에 존재하는 변수 참조 시 사용
- 5 ) param : 전송 파라미터 값을 참조 시 사용
- 6 ) paramValues : 전송 파라미터의 배열 값을 참조 시 사용
- 7 ) header : 헤더의 정보 값을 참조할 때 사용
- 8 ) headerValues : 헤더의 배열 정보 값을 참조할 때 사용
- 9 ) cookie : 쿠키 정보를 참조할 때 사용
- 10 ) initParam : context 초기화 파라미터를 참조 시에 사용
- 11 ) pageContext : pageContext 참조 시에 사용
- EL 연산자 :
- 1 ) . : 자바빈 또는 Map 객체에 접근할 때 사용한다.
- 2 ) [ ] : 배열 또는 List 객체에 접근할 때 사용한다.
- 3 ) ( ) : 우선순위 연산자
- 4 ) empty : 값이 null인지 아닌지 판단 ( empty면 true )
3. JSTL ( JSP Standard Tag Library )
- 사용자의 필요에 의해서 태그를 자체적으로 만들어 사용할 수 있다.
- 일반적으로 EL과 같이 사용된다.
[ 1. EL 연산자 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>operator.jsp</title>
</head>
<body>
<h1>/EL/operator.jsp</h1>
<hr>
<h1>EL 연산자 실습</h1>
<!-- 연산결과가 나온다. -->
${ 3 + 5 }<br>
${ 3 - 5 }<br>
${ 3 * 5 }<br>
${ 13 / 5 }<br>
${ 13 % 5 }<br>
<!-- true / flase로 나온다. -->
<h2>${ 3 == 5 }</h2>
<h2>${ 3 > 5 }</h2>
<h2>${ 3 < 5 }</h2>
<h2>${ !( 3 == 5 ) }</h2>
</body>
</html>
[ 2. EL - 자바빈의 property 출력하기 ] (****)
<%@ page import="org.zerock.myapp.domain.LoginBean" %>
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- id는 빈이름으로 자유롭게 작성해도 괜찮다. -->
<!-- class는 빈클래스의 FQCN이다. -->
<!-- scope는 공유데이터 영역이다. -->
<jsp:useBean id="myBean" class="org.zerock.myapp.domain.LoginBean" scope="page" />
<!-- property와 전송 파라미터의 이름이 같아야 *를 사용할 수 있다. -->
<jsp:setProperty name="myBean" property="*" />
<% System.out.println(myBean); %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>login.jsp</title>
</head>
<body>
<h1>/EL/login.jsp</h1>
<hr>
<h1>자바빈의 property 출력하기</h1>
<%
// 페이지 공유영역에서 myBean이라는 데이터 끄집어 내기
LoginBean loginBean = (LoginBean) pageContext.getAttribute("myBean");
session.setAttribute("__YOSEPH__", loginBean );
%>
<h2>1.JSP scripting element를 사용한 출력</h2>
<h3>1 - 1. userid : <%= loginBean.getUserid() %></h3>
<h3>1 - 2. passwd : <%= loginBean.getPasswd() %></h3>
<h2>2. JSP action tag를 사용한 출력</h2>
<h3>2 - 1. userid : <jsp:getProperty name="myBean" property="userid" /></h3>
<h3>2 - 2. passwd : <jsp:getProperty name="myBean" property="passwd" /></h3>
<h2>3. JSP EL을 사용한 방법</h2>
<h3>3 - 1. ${myBean} </h3>
<h2>4. useBean의 id값인 myBean이란 이름의 참조변수를 이용해서 출력</h2>
<h3>4 - 1. userid : <%= myBean.getUserid() %> </h3>
<h3>4 - 2. passwd : <%= myBean.getPasswd() %> </h3>
<h2>5. JSP EL 표현식을 이용한 자바빈즈 객체의 property를 출력</h2>
<!-- 이 경우 __YOSEPH__가 자바빈즈 객체이기 때문에 .뒤에 나오는 것은 속성이 나오게 된다. -->
<!-- 게터 메소드를 호출한 것과 같은 기능을 한다. -->
<h3>5 - 1. userid : ${__YOSEPH__.userid } </h3>
<h3>5 - 2. passwd : ${__YOSEPH__.passwd } </h3>
<%-- 만일 ${} 안에 자바빈즈객체가 온다면, .뒤에는 ${ 자바빈즈객체.프로퍼티명 }으로 작성해줘야 하며, 이는 게터 메서드와 동일하다. --%>
<h2>6. EL 표현식의 내장객체를 활용한 방법</h2>
<h3>6 - 1. session Scope __YOSEPH__ : ${ sessionScope.__YOSEPH__ }</h3>
<h3>6 - 2. session Scope __YOSEPH__.userid : ${ sessionScope.__YOSEPH__.userid }</h3>
<h3>6 - 3. session Scope __YOSEPH__.passwd : ${ sessionScope.__YOSEPH__.passwd }</h3>
</body>
</html>
[ 3. EL - param ] (******)
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Arrays" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>param.jsp</title>
</head>
<body>
<h1>/EL/param.jsp</h1>
<hr>
<h1>EL 실습</h1>
<!-- EL에서는 request 전송파라미터 값을 param으로 바로 얻어낼 수 있다. (**) -->
<h2>1. 사용자 아이디 : ${ param.userid }</h2>
<h2>2. 사용자 비밀번호 : ${ param.passwd }</h2>
<!-- hobby는 여러 값을 가지고 있기에, -->
<!-- paramValues로 배열 값을 가지고 온 후에 [인덱스 번호]를 통해 원소를 하나씩 출력해야 한다. -->
<h2>3. 사용자 취미1 : ${ paramValues.hobby[0] } </h2>
<h2>3. 사용자 취미2 : ${ paramValues.hobby[1] } </h2>
<!-- EL 안에서도 정적 메소드(Arrays)를 활용하여 배열의 원소를 출력해 줄 수도 있다. (***) -->
<h2>4. hobbies : ${ Arrays.toString( paramValues.hobby ) }</h2>
</body>
</html>
[ 4. EL - scope ] (*****)
[ 4 - 1. scope.jsp ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>scope.jsp</title>
</head>
<body>
<h1>/EL/scope.jsp</h1>
<hr>
<h1>EL 실습</h1>
<%
// 이는 JSP의 내장 객체이다.
pageContext.setAttribute("pageScope","page scope 값");
request.setAttribute("requestScope","request scope 값");
session.setAttribute("sessionScope", "session scope 값");
application.setAttribute("applicationScope", "application scope 값");
%>
<!-- 아래는 EL의 내장 객체이다. ( 내장객체의 이름이 JSP와 다르다. ) -->
<%-- EL에서는 ${ 각 SCOPE별내장객체명.공유속성명 }을 통해서 공유 객체를 출력해야 한다. --%>
<!-- 단 EL의 경우 값을 얻어낼 수는 있지만, 특정 scope에 값을 올려 놓을 수는 없다. -->
<!-- 왜냐하면, EL은 값을 출력하는데 목적이 있기 때문이다. -->
<h2>1. pageScope : ${ pageScope.pageScope } </h2>
<h2>2. requestScope : ${ requestScope.requestScope } </h2>
<h2>3. sessionScope : ${ sessionScope.sessionScope } </h2>
<h2>4. applicationScope : ${ applicationScope.applicationScope } </h2>
</body>
</html>
[ 4 - 2. scope.jsp에서 공유 데이터 가지고 오기 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>other.jsp</title>
</head>
<body>
<h1>/EL/other.jsp</h1>
<hr>
<h1>EL 실습 - scope.jsp에서 공유 데이터 가지고 오기</h1>
<!-- 아래는 EL의 내장 객체이다. ( 내장객체의 이름이 JSP와 다르다. ) -->
<%-- EL에서는 ${ 각 SCOPE별내장객체명.공유속성명 }을 통해서 공유 객체를 출력해야 한다. --%>
<!-- 단 EL의 경우 값을 얻어낼 수는 있지만, 특정 scope에 값을 올려 놓을 수는 없다. -->
<!-- 왜냐하면, EL은 값을 출력하는데 목적이 있기 때문이다. -->
<!-- ======================================================= -->
<!-- page와 request의 경우에는 출력되지 않는다. -->
<!-- 그 이유는 page는 scope.jsp가 다 읽어지는 순간 파괴되고 -->
<!-- request의 경우에는 응답을 주는 순간 파괴되기 때문이다. -->
<h2>1. pageScope : ${ pageScope.pageScope } </h2>
<h2>2. requestScope : ${ requestScope.requestScope } </h2>
<!-- ======================================================= -->
<!-- 브라우저와 WAS를 죽이지 않았다면, 정상 출력된다. -->
<h2>3. sessionScope : ${ sessionScope.sessionScope } </h2>
<h2>4. applicationScope : ${ applicationScope.applicationScope } </h2>
</body>
</html>
[ 5. EL - initParam : 초기화 파라미터 값 가지고 오기 ] (*)
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>initParam.jsp</title>
</head>
<body>
<h1>/EL/initParam.jsp</h1>
<hr>
<h1>EL 실습 - 초기화 파라미터 값 가지고 오기</h1>
<h2>1. context 파라미터 이름 값 : ${ initParam.jdbcDriver } </h2>
<h2>2. context 파라미터 주소 값 : ${ initParam.savePath } </h2>
</body>
</html>
[ 6. EL - List ] (*)
[ 6 - 1. 리스트 생성 및 공유데이터 영역에 올려 놓기 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page
import="org.zerock.myapp.domain.LoginBean"
import="java.util.List"
import="java.util.ArrayList" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>set.jsp</title>
</head>
<body>
<h1>/EL/set.jsp</h1>
<hr>
<h1>EL - List 실습</h1>
<%
LoginBean oneBean = new LoginBean();
oneBean.setUserid("aaa");
oneBean.setPasswd("12345");
LoginBean twoBean = new LoginBean();
twoBean.setUserid("bbbb");
twoBean.setPasswd("123456");
// LoginBean 타입을 원소로 가지는 리스트 객체를 만들고,
// 2개의 자바빈즈 객체( oneBean / twoBean )를 요소로 추가
List<LoginBean> list = new ArrayList<>();
list.add(oneBean);
list.add(twoBean);
// Request Scope에 리스트 객체를 속성으로 바인딩
request.setAttribute("__MODEL__", list);
%>
<jsp:forward page="get.jsp">
<jsp:param name="name" value="예이이이이" />
<jsp:param name="age" value="30" />
</jsp:forward>
</body>
</html>
[ 6 - 2. 공유데이터 영역에 가지고 오기 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>get.jsp</title>
</head>
<body>
<h1>/EL/get.jsp</h1>
<hr>
<h1>EL - List 실습</h1>
<!-- __MODEL__의 이름을 가지고 있는 데이터의 값은 list이며, -->
<!-- list를 반환하기에 이를 가지고 [0]번째 원소인 oneBean의 값 출력 -->
<h2>1. 1st LoginBean : ${ __MODEL__[0].userid }, ${ __MODEL__[0].passwd } </h2>
<!-- list의 [1]번째 원소인 twoBean의 값 출력 -->
<h2>2. 2nd LoginBean : ${ __MODEL__[1].userid }, ${ __MODEL__[1].passwd } </h2>
<h2>3. name : ${ param.name } </h2>
<h2>4. age : ${ param.age } </h2>
</body>
</html>
[ 7. EL - @ page isELIgnored - EL 비활성화 ] (**)
<%@ page isELIgnored="true" %>
<!-- 위와 같이 사용되면 EL이 무시가 되기에, 아래 적힌 EL이 기능하지 않고 단순히 문자로 사용된다. -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>get.jsp</title>
</head>
<body>
<h1>/EL/get.jsp</h1>
<hr>
<h1>EL - List 실습</h1>
<!-- __MODEL__의 이름을 가지고 있는 데이터의 값은 list이며, -->
<!-- list를 반환하기에 이를 가지고 [0]번째 원소인 oneBean의 값 출력 -->
<h2>1. 1st LoginBean : ${ __MODEL__[0].userid }, ${ __MODEL__[0].passwd } </h2>
<!-- list의 [1]번째 원소인 twoBean의 값 출력 -->
<h2>2. 2nd LoginBean : ${ __MODEL__[1].userid }, ${ __MODEL__[1].passwd } </h2>
<h2>3. name : ${ param.name } </h2>
<h2>4. age : ${ param.age } </h2>
</body>
</html>
[ 8. JSTL - 공유속성 ] (****)
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<jsp:useBean id="myBean" class="org.zerock.myapp.domain.LoginBean" scope="page" />
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>exam01.jsp</title>
</head>
<body>
<h1>/JSTL/exam01.jsp</h1>
<hr>
<!-- =============================================== -->
<h1>JSTL Core 라이브러리 실습1</h1>
<hr>
<!-- set 태그의 목적 : 공유 영역에 속성 바인딩 수행 -->
<!-- var 속성 : 바인딩되는 속성의 이름 지정 -->
<!-- value 속성 : 바인딩되는 속성의 값 -->
<!-- 중요 : 이 태그의 var 속성의 값이 EL 변수명이 된다! -->
<!-- setAttribute -->
<c:set var="__PAGE__" value="PAGE_1" scope="page" />
<c:set var="__REQUEST__" value="REQUEST_1" scope="request" />
<c:set var="__SESSION__" value="SESSION_1" scope="session" />
<c:set var="__APPLICATION__" value="APPLICATION_1" scope="application" />
<!-- out 태그의 value 속성의 값 : (1) 문자열 (2) EL 표기법 -->
1 - 1. <c:out value="Hello World!" /> <br>
1 - 2. <c:out value="${__PAGE__}" /> <br>
1 - 3. ${__PAGE__} <br>
<!-- =============================================== -->
<h1>JSTL Core 라이브러리 실습2</h1>
<hr>
<!-- 4개의 공유영역 한군데에 정한 이름으로 정한 값을 바인딩 수행 -->
<!-- 아래의 set 태그는 공유영역에 속성 바인딩을 수행하는 것이 아니라! -->
<!-- 이미 공유영역에 바인딩 되어있는 자바빈즈 객체의 특정 프로퍼티의 값을 -->
<!-- 설정(set)하는 태그역할을 수행 -->
<c:set target="${ myBean }" property="userid" value="inky123456" />
2 - 1. ${ myBean.userid }<br>
2 - 2. <c:out value="${ myBean.userid }" />
<%-- c:out과 EL의 출력 결과물은 같게 나오지만, --%>
<%-- c:out은 특수문자가 들어갔을 경우, EL에 비해 안전하게 출력해 준다. --%>
<!-- =============================================== -->
<h1>JSTL Core 라이브러리 실습3</h1>
<hr>
3 - 1. 삭제 전 : <c:out value="${__REQUEST__}" /> <br>
<c:remove var="__REQUEST__" />
3 - 2. 삭제 후 : <c:out value="${__REQUEST__}" /> <br>
</body>
</html>
[ 9. JSTL - EL 내장객체 출력해 보기 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>exam02.jsp</title>
</head>
<body>
<h1>/JSTL/exam02.jsp</h1>
<hr>
<h2>JSTL Core 라이브러리 실습1</h2>
<!-- EL로 작성해줘야 한다. -->
<c:out value="${ pageScope }" /><br>
<c:out value="${ requestScope }" /><br>
<c:out value="${ sessionScope }" /><br>
<c:out value="${ applicationScope }" /><br>
</body>
</html>
[ 10. JSTL - 공유속성 출력해 보기 - scope과 상관없이 다 확인해준다. ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>exam02.jsp</title>
</head>
<body>
<h1>/JSTL/exam02.jsp</h1>
<hr>
<h2>JSTL Core 라이브러리 실습1</h2>
<!-- EL로 작성해줘야 한다. -->
1. __PAGE__ : <c:out value="${ __PAGE__ }" /><br>
2. __REQUEST__ : <c:out value="${ __REQUEST__ }" /><br>
3. __SESSION__ : <c:out value="${ __SESSION__ }" /><br>
4. __APPLICATION__ : <c:out value="${ __APPLICATION__ }" /><br>
</body>
</html>
[ 11. JSTL - <c:if> ( if문 ) / <c:choose> + <c:when> + <c:otherwise> ( switch문 ) ] (****)
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- 위의 2개는 include.jsp로 인해 생략이 가능하다. -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>exam03</title>
</head>
<body>
<h1>/JSTL/exam03.jsp</h1>
<hr>
<!-- =============================================== -->
<h2>JSTL Core 라이브러리 실습 1 - if문 ( c:if test )</h2>
<hr>
<c:set var="myColor" value="빨강" scope="page" />
<c:if test="${ myColor == '빨강' }">
<p>색상은 빨강색이다.</p>
</c:if>
<!-- =============================================== -->
<h2>JSTL Core 라이브러리 실습 2 - choose + when ( switch문 )</h2>
<hr>
<c:set var="grade" value="70" scope="page" />
<c:choose>
<c:when test="${ grade >= 90 }">
<p>학점은 A이다.</p>
</c:when>
<c:when test="${ grade >= 80 }">
<p>학점은 B이다.</p>
</c:when>
<c:when test="${ grade >= 70 }">
<p>학점은 C이다.</p>
</c:when>
<c:otherwise>
<p>학점은 F이다.</p>
</c:otherwise>
</c:choose>
</body>
</html>
'KH 정보교육원 [ Java ]' 카테고리의 다른 글
KH 101일차 - mybatis ( 마이 바틱스 ) (*****) (0) | 2022.07.21 |
---|---|
KH 100일차 - JSTL (***) (0) | 2022.07.20 |
KH 98일차 - JSP ( 액션 태그 ) ( ***** ) (0) | 2022.07.18 |
KH 97일차 - JSP ( 내장 객체 ) ( ****** ) (0) | 2022.07.15 |
KH 96일차 - Servlet( 파일 다운로드 ) / JSP ( *****) (0) | 2022.07.14 |