본문 바로가기
카테고리 없음

[국비지원] KH 정보교육원 87일차

by 도전하는 개발자 2022. 7. 29.

kh day 087

09장 JSP 고급 이어서 나가자!

* EL 언어의 문법 : {EL변수}

* EL 변수는 뭔가요?
 1) 4개의 공유영역에 바인딩되어있는 공유속성명 (***)
 2) EL의 내장객체
 3) JSTL의 문법상 만들어지는 EL변수 (나중에 배우자)


* 만일 특정 공유영역에 바인딩 되어있는 공유속성이 아래 녀석들이라면
  어떻게 ${ } 문법으로 위 객체들을 출력할 수 있을까?
 1) 자바빈즈 객체  -> ${ 공유속성.프로퍼티명 } or ${ 공유속성명.getter메소드 }
 2) Map 객체       -> ${ 공유속성.KEY } or ${ 공유속성명.get(key) 메소드 }
 3) 배열 객체       -> ${ 공유속성[인덱스번호] } 
 4) List 컬렉션      -> ${ 공유속성[인덱스번호] } 
 5) 사용자 정의 객체 -> ${ 공유속성.값을반환하는메소드 }

---

5. EL 비활성화
JSP에서 EL 표기법은 기본적으로 사용이 가능하지만 필요에 의해서 비활성화도 가능하다. 다음과 같이 page 지시어에 설정하는 방법으로 구현한다.
<%@ page isELIgnored="true" %>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isELIgnored="true" %>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>get.jsp</title>
</head>
<body>
    <h1>/JSP/get.jsp</h1>
    <hr>

    <h1>EL 표현식의 비활성화</h1>
    <%
        request.setAttribute("__EL__", 100);        
    %>

    <p>${ __EL__ }</p>

</body>
</html>

get.jsp

---

*** JSTL (Jsp Standard Tag Library )

*

 JSP 스펙버전이 초기버전일 때, 커스텀 태그라는 기술이 소개되었다. 이 태그는 겉으로 볼 때는 일반적인 HTML의 사용자 정의 태그와 거의 같게 보이지만 실제 JSP가 Servlet으로 변환될 때는 자바코드로 변환되어 특정 기능을 수행하는 태그이다. 즉 JSP에서는 태그로, 변환된 소스에서는 자바코드가 되는 태그입니다. 하지만 이 커스텀 태그는 JSTL이 나온 이후로 잘 사용하지 않는다.

1. JSTL 개요
JSP에서 사용 가능한 태그로 앞서 배웠던 JSP 스크립팅 태그 및 액션 태그가 있지만, 사용자 필요에 의해서 태그를 자체적으로 만들어 사용할 수도 있다. 이런 태그를 커스텀 태그(Custom tag)라고 하며 많은 커스텀 태그들 중에서 자주 사용되는 태그들을 묶어서 아파치 그룹에서 제공하는데, 이것을 JSTL이라고 한다. 일반적으로 EL(Expression Language)과 같이 사용된다.

 

2. JSTL 환경설정

 우리는 메이븐 디펜던시가 잡아주니까 따로 설정해 줄 필요가 없다!

3. JSTL 라이브러리
JSP에서 JSTL 라이브러리를 사용하기 위해서는 반드시 다음과 같이 taglib 지정자를 이용하여 uri 속성값과 prefix 속성값을 설정해야 된다. ( Core 라이브러리 사용 예 )
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

1) JSTL Core 라이브러리
STL Core 라이브러리는 JSTL에서 기본적이고 핵심적인 기능들을 구현해 놓은 라이브러리이다. 예를 들어 문자열 출력, if문, for문과 같은 제어문과 같은 기능이 포함된다. JSP에서 사용하기 위해서는 반드시 다음과 같이 taglib 지시어를 사용해야 된다. 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<c:set> 태그
지정된 scope에 데이터를 바인딩하는 태그이다. 즉 JSP의 setAttribute(name,value) 메소드와 동일한 기능을 제공한다. 기본적인 구조는 다음과 같다. 
<c:set var="변수명" value="변수값" target="객체" property="객체의 프라퍼티" scope="scope값" />

var 속성에는 변수명을 지정하고 value 속성에는 변수값을 지정한다. 변수값은 문자열 또는 EL표기법 지정도 가능하다. target 속성에는 자바빈 또는 Map계열의 객체를 지정하고 property 속성에는 지정된 target의 프라퍼티를 설정한다. scope 속성에는 page,request,session,application 값중에서 하나를 지정할 수 있다. 기본은 page 이다.

<c:out> 태그
지정된 값을 웹 브라우저에 출력하는 태그이다. 기본적인 구조는 다음과 같다. 
<c:out value="출력값“ default="기본값” escapeXml="true|false“ />

value 속성은 출력값을 지정한다. 문자열 또는 EL 표기법을 사용할 수 있다. default 속성은 기본값이며 value 속성이 null인 경우에 기본값을 출력한다. escapeXml 속성은 <, >, &, ‘ , “ 같은 특수기호들을 escape문자 형태로 출력할지를 결정할 
수 있다. ( 예를 들어 > 값은 &gt; 형식으로 출력 )

<c:remove> 태그
지정된 scope에 설정한 변수값을 제거하는 태그이다. 기본적인 구조는 다음과 같다. 

<c:remove var="변수명“ scope="scope값” />
var 속성에는 제거할 변수명을 지정하고 scope에는 검색 영역을 설정한다. scope가 일치하지 않으면 제거되지 않는다

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ 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>
<head>
    <meta charset="UTF-8">
    <title>exam01.jsp</title>
</head>

<body>
    <h1>/JSTL/exam01.jsp</h1>
    <hr>

    <h1>JSTL Core 라이브러리 실습#1</h1>

    <hr>

    <!-- set 태그의 목적 -->
    <!-- var 속성 : 바인딩되는 속성의 이름지정 -->
    <!-- value 속성: 바인딩되는 속성의 값 -->
    <!-- 이 태그의 var 속성의 값이 EL 변수명이 됨! -->

    <c:set var="__PAGE__"           value="VALUE_1" scope="page" />
    <c:set var="__REQUEST__"        value="VALUE_2" scope="request" />
    <c:set var="__SESSION__"        value="VALUE_3" scope="session" />
    <c:set var="__APPLICATION__"    value="VALUE_4" scope="application" />

    <!-- out 태그의 value 속성의 값: (1) 문자열 or (2) EL 표기법 -->
    1. <c:out value="Helllo World"/> <br>
    2. <c:out value="${ __PAGE__ }"/> <br>
    3. ${ __PAGE__ } <br>

    <h1>JSTL Core 라이브러리 실습#2</h1>

    <hr>

    <!-- 4개의 공유영역에 한군데에 정한 이름으로 정한 값을 바인딩 수행  -->

    <!-- 아래의 set 태그는 공유영역에 속성 바인딩을 수행하는 것이 아니라
    이미 공유영역에 바인딩 되어있는 자바빈즈 객체의 특정 프로퍼티의 값을
    설정 (set) 하는 태그 역할을 수행 -->

    <c:set target="${ myBean }" property="userid" value="trinity" />

    4. ${ myBean.userid } <br>
    5. <c:out value="${ myBean.userid }" />
    
</body>
</html>

exam01.jsp