🔷 표현 언어라고 하며 값(data)를 웹 페이지에 표시 하는데 사용되는 태그
🔷 JSP 스크립트의 표현식(<%= %>
)을 대신하여 속성값을 쉽게 출력할 수 있도록 고안된 언어
${expr }
EL 표현식에서 Map
객체 또는 Java Bean
객체의 경우 도트(.
)연산자를 사용하여 속성을 출력할 수 있다. 이 때 오른쪽의 값은 Map
객체의 경우, key
, Java Bean
의 경우 Bean property
이다.
JSP 영역 기본 객체(page, request, session, application) 속성 사용가능
수치, 관계, 논리연산 제공
자바 클래스 메서드 호출 기능 제공
표현언어 기본 객체 제공(param, paramValues)
🔷 스크립트릿을
<%= ((com.Bzeromo.model.MemberDto)
request.getAttribute("userinfo")).getZipDto().getAddress() %>
EL로
${userinfo.zipDto.address}
💡
DTO
Data Transfer Object, 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체
// Map or Java Bean
${obj["key(property)"]}
// list or array
${obj[index]}
${obj["index"]}
💡 여기서 null 값은 공백으로 표현된다.
🔷 내장 객체
분류 | 객체 | 타입 | 설명 |
---|---|---|---|
JSP | pageContext | Java Bean | 현재 페이지의 page context instance |
scope | pageScope | Map | page 기본객체에 저장된 속성을 저장하는 객체 |
'' | requestScope | Map | request 기본객체에 저장된 속성을 저장하는 객체 |
'' | sessionScope | Map | session 기본객체에 저장된 속성을 저장하는 객체 |
'' | applicationScope | Map | application 기본객체에 저장된 속성을 저장하는 객체 |
요청파라미터 | param | Map | JSP 내장 객체 request의 getParameter(name) 메서드와 동일한 역할을 한다. ${param.name} 또는 ${param["name"]의 형태로 사용 |
'' | paramValues | Map | JSP 내장 객체 request의 getParameterValues(name) 메서드와 동일한 역할을 한다. |
쿠키 | cookie | Map | 현재 페이지의 page context instance |
요청헤더 | header | Map | request의 getHeader(name) 메서드와 동일한 역할을 한다. |
'' | headerValues | Map | request의 .getHeaders(name) 메서드와 동일한 역할을 한다. |
💡 Scope의 속성에 객체 이름 없이 접근할 때 가장 가까운 scope부터 탐색하며 맨처음 등장하는 값을 출력하고 없으면 공백으로 출력한다. (page -> request -> session -> application)
🔷 EL 연산자(Operator)
종류 | 사용 가능 연산자 |
---|---|
산술 | +, -, *, /(div), %(mod) |
관계 | ==(eq), !=(nq), <(lt), >(gt), <=(le), >=(ge) |
조건 | expr ? val1 : val2 |
논리 | &&(and), ||(or), !(not) |
null | empty |
💡 괄호 안은 동일한 의미의 연산자로, 마찬가지 방법으로 사용 가능하다.
${empty name}
🔷 EL로 기본 객체 속성 설정하기/ 요청 파라미터 처리하기
<!-- 기존의 방식 -->
<%= request.getParameter("id") %> <br>
<!-- EL -->
${param.id} <br>
<!-- equals()와 같다 -->
== : ${param.id eq "Bzeromo" }
🔷 JavaEE 기반의 웹 어플리케이션 개발을 위한 컴포넌트 모음
🔷 JSTL 기능
1. 간단한 프로그램 로직 구현 기능(core
)
format
)sql
)functions
)xml
)🔷 JSTP 사용하기
기능 | prefix | URI |
---|---|---|
기본기능, 변수선언, 로직 구현 | c | http://java.sun.com/jsp/jstl/core |
데이터 출력 포멧 | fmt | http://java.sun.com/jsp/jstl/fmt |
데이터베이스 작업 | sql | http://java.sun.com/jsp/jstl/sql |
XML 관련 기능 | x | http://java.sun.com/jsp/jstl/sml |
문자열 처리 함수 | fn | http://java.sun.com/jsp/jstl/fn |
오늘은 core만 알아본다.
태그 | 설명 |
---|---|
c:set | 변수에 값 설정 |
c:remove | 변수 제거 |
c:if | 조건에 따른 코드 실행 |
c:choose | when, otherwise tag와 함께 쓰이며 if-else if- else와 동일하게 사용한다. |
c:forEach | 배열, Collection의 각 요소에 접근하기 위해 사용 |
c:import | 외부 자원을 사용하기 위해서 사용 |
c:forTokens | 구분자를 이용하여 구분된 토큰을 처리 |
c:redirect | redirect시 사용 |
c:url | URL 작성 |
c:out | 출력 |
c:catch | 예외 처리 |
🖥 오늘도 실습 드가자
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 라이브러리에서 불러오기(모르겠으면 ctrl + space) --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
<!-- c:out -->
<c:out value="Hello Bzeromo!" /> <br>
<!--
c:set var="변수이름" value="변수 값"
scope="변수의 유효영역, default는 p age" target="java bean"
-->
<c:set var="msg" value="Hello"/>
${msg } <br>
<c:set var="msg2" >Hello2</c:set>
${msg2 } <br>
<c:set var="movie" value="<%= new com.bzeromo.dto.Movie() %>"/>
${movie } <br>
<c:set target="${movie }" property="title" value="어벤져스"/>
${movie } <br>
<hr>
<%
String[] songList = {"IAM", "Kistch", "After Like", "LOVE DIVE"};
pageContext.setAttribute("songList", songList);
%>
<!-- c:forEach -->
<c:forEach var = "song" items="${songList }">
${song } <br>
</c:forEach>
<c:forEach var = "song" items="${songList }" varStatus="status"
begin="0" end="2" step="2">
${status.index }:${song } index ---
${status.count }:${song } count<br>
</c:forEach>
<hr>
<!-- c:forTokens -->
<c:forTokens var="Idol" items="IVE,LeserraFim,New Jeans.StayC.(g)Idle" delims=",">
${Idol }<br>
</c:forTokens>
<hr>
<c:forTokens var="Idol" items="IVE,LeserraFim,New Jeans.StayC.(g)Idle" delims=",.">
${Idol }<br>
</c:forTokens>
<!-- c:if(출력 생략) -->
<c:if test="${param.fruit == 1}">
<div style="color: yellow">파인애플</div>
</c:if>
<c:if test="${param.fruit == 2}">
<div style="color: pink">망고스틴</div>
</c:if>
<c:if test="${param.fruit == 3}">
<div style="color: green">멜론</div>
</c:if>
<c:if test="${param.fruit == 4}">
<div style="color: red">사과</div>
</c:if>
<!-- c:choose, c:when, c:otherwise(출력 생략) -->
<c:choose>
<c:when test="${param.fruit == 3}">
<div style="color: green">멜론</div>
</c:when>
<c:otherwise>
<div>그외의 과일들이다.</div>
</c:otherwise>
</c:choose>
<!-- c:catch -->
<c:catch var="errmsg">
예외 발생전 <br>
<%= 2/0 %>
예외 발생후 <br>
</c:catch>
${errmsg }
</body>
</html>
🖥 출력
다음은 스프링이다...
겁먹지 말자...