[WEB] EL & JSTL

young-gue Park·2023년 9월 8일
0

Web-BackEnd

목록 보기
4/7
post-thumbnail

⚡ EL & JSTL


📌 EL(Expression Language)

🔷 표현 언어라고 하며 값(data)를 웹 페이지에 표시 하는데 사용되는 태그
🔷 JSP 스크립트의 표현식(<%= %>)을 대신하여 속성값을 쉽게 출력할 수 있도록 고안된 언어

${expr }
  • EL 표현식에서 Map 객체 또는 Java Bean 객체의 경우 도트(.)연산자를 사용하여 속성을 출력할 수 있다. 이 때 오른쪽의 값은 Map 객체의 경우, key, Java Bean의 경우 Bean property이다.

  • JSP 영역 기본 객체(page, request, session, application) 속성 사용가능

  • 수치, 관계, 논리연산 제공

  • 자바 클래스 메서드 호출 기능 제공

  • 표현언어 기본 객체 제공(param, paramValues)

📌 EL 문법

🔷 스크립트릿을

<%= ((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 값은 공백으로 표현된다.

🔷 내장 객체

분류객체타입설명
JSPpageContextJava Bean현재 페이지의 page context instance
scopepageScopeMappage 기본객체에 저장된 속성을 저장하는 객체
''requestScopeMaprequest 기본객체에 저장된 속성을 저장하는 객체
''sessionScopeMapsession 기본객체에 저장된 속성을 저장하는 객체
''applicationScopeMapapplication 기본객체에 저장된 속성을 저장하는 객체
요청파라미터paramMapJSP 내장 객체 request의 getParameter(name) 메서드와 동일한 역할을 한다. ${param.name} 또는 ${param["name"]의 형태로 사용
''paramValuesMapJSP 내장 객체 request의 getParameterValues(name) 메서드와 동일한 역할을 한다.
쿠키cookieMap현재 페이지의 page context instance
요청헤더headerMaprequest의 getHeader(name) 메서드와 동일한 역할을 한다.
''headerValuesMaprequest의 .getHeaders(name) 메서드와 동일한 역할을 한다.

💡 Scope의 속성에 객체 이름 없이 접근할 때 가장 가까운 scope부터 탐색하며 맨처음 등장하는 값을 출력하고 없으면 공백으로 출력한다. (page -> request -> session -> application)

🔷 EL 연산자(Operator)

종류사용 가능 연산자
산술+, -, *, /(div), %(mod)
관계==(eq), !=(nq), <(lt), >(gt), <=(le), >=(ge)
조건expr ? val1 : val2
논리&&(and), ||(or), !(not)
nullempty

💡 괄호 안은 동일한 의미의 연산자로, 마찬가지 방법으로 사용 가능하다.

  • EL 식은 연산자를 포함할 수 있으며, 산술 연산, 조건 연산, 논리 연산, 관계 연산을 수행할 수 있다.
  • 또한 일반적인 연산 이외에 null 연산을 수행할 수 있다. empty 연산자는 검사할 객체가 null인지 아닌지 검사하기 위해서 사용된다. (null, "", 요소가 없는 list, map, collection은 True)
${empty name}

🔷 EL로 기본 객체 속성 설정하기/ 요청 파라미터 처리하기

<!-- 기존의 방식 -->
<%= request.getParameter("id") %> <br>

<!-- EL -->
${param.id} <br>
  
<!-- equals()와 같다 -->  
== : ${param.id eq "Bzeromo" }

📌 JSTL(JSTL Standard Tag Library)

🔷 JavaEE 기반의 웹 어플리케이션 개발을 위한 컴포넌트 모음

  • JSP 스크립트와 html 코드가 섞여서 복잡한 구조를 만드는데, 이를 간결하게 작성하기 위해서 자바코드를 태그 형태로 작성해 놓은 것이다.
  • 유용한 커스텀 태그들을 모아서 표준화하였다.

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

🔷 JSTL 기능
1. 간단한 프로그램 로직 구현 기능(core)

  • 변수 선언, if 문장, for문 등
  1. 데이터 출력 포맷 설정(format)
  2. DB 입력, 수정, 삭제, 조회 기능(sql)
  3. 문자열 처리 함수(functions)
  4. XML 문서 처리(xml)

🔷 JSTP 사용하기

기능prefixURI
기본기능, 변수선언, 로직 구현chttp://java.sun.com/jsp/jstl/core
데이터 출력 포멧fmthttp://java.sun.com/jsp/jstl/fmt
데이터베이스 작업sqlhttp://java.sun.com/jsp/jstl/sql
XML 관련 기능xhttp://java.sun.com/jsp/jstl/sml
문자열 처리 함수fnhttp://java.sun.com/jsp/jstl/fn

오늘은 core만 알아본다.

태그설명
c:set변수에 값 설정
c:remove변수 제거
c:if조건에 따른 코드 실행
c:choosewhen, otherwise tag와 함께 쓰이며 if-else if- else와 동일하게 사용한다.
c:forEach배열, Collection의 각 요소에 접근하기 위해 사용
c:import외부 자원을 사용하기 위해서 사용
c:forTokens구분자를 이용하여 구분된 토큰을 처리
c:redirectredirect시 사용
c:urlURL 작성
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>

🖥 출력


다음은 스프링이다...
겁먹지 말자...

profile
Hodie mihi, Cras tibi

0개의 댓글