티스토리 뷰

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인지 아닌지 판단 ( emptytrue )

 

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>

 

 

728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항