BackEnd 4일차

진창호·2023년 3월 23일
0

BackEnd

목록 보기
4/4

EL을 이용해 JSP의 출력을 쉽게할 수 있다.

EL의 대표적인 형태는 ${--.--} 이다. EL의 특징은 아래와 같다.

  1. JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력할 수 있도록 고안된 언어이다.
    따라서 표현식(<%= %>)을 대체할 수 있다.
  2. 왼쪽 --은 반드시 java.util.Map 객체 또는 Java Bean 객체여야 한다.
  3. 오른쪽 --은 반드시 Map의 키이거나 Bean 프로퍼티여야 한다.

EL 문법의 예시는 아래와 같다.

<%= ((model.MemberDto) request.getAttribute("userinfo")).getZipDto().getAddress() %>
=> ${ userinfo.zipDto.address } 

EL에는 . 대신 [] 로도 객체의 값에 접근할 수 있다.
따라서 위 예시는 ${ userinfo[zipDto[address]] } 로도 표현 가능하다.

리스트나 배열 요소에는 인덱스로 접근 가능하다. 아래 예시를 살펴보자.

// Servlet
String[] names = {"홍길동", "이순신", "임꺽정"};
request.setAttribute("userNames", names);

// JSP
${ userNames[0] } // 홍길동 출력
${ userNames["1"] } // 이순신 출력

문자로 된 인덱스 값은 알아서 숫자로 변경된다.

EL의 내장 객체는 아래와 같다.

EL에서 객체에 접근하는 방법은 아래와 같다.

request.setAttribute("userinfo", "안효인");

${ requestScope.userinfo }, ${ userinfo } 
${ pageContext.request.userinfo }

url?name=안효인$fruit=사과$fruit=바나나

${ param.name }
${ paramValues.fruit[0] }

만약 ${ userinfo }처럼 property 이름만 사용할 경우
pageScope -> requestScope -> sessionScope -> applicationScope 순으로 객체를 찾는다.

EL에서 객체 멤버 변수에 접근하는 방법은 아래와 같다.

// Servlet
request.setAttribute("samsung.user", memberDto); // 객체 할당

// JSP
${ samsung.user.name } <%-- 오류 발생 --%>
${ requestScope["samsung.user"].name } <%-- 객체의 name 멤버변수 값 출력 --%>

EL에서 쿠기에 접근하는 방법은 아래와 같다.

${ cookie.userId.value } <%-- 쿠키 값 출력 --%>

cookie가 null이거나, userId가 null이거나, value가 null이면 빈 문자열이 출력된다.

EL 연산자는 아래와 같다.

{ empty var } 에서 true를 반환하는 경우는 아래와 같다.

  1. var이 null일 때
  2. var이 값이 빈 문자열일 때
  3. var이 길이가 0인 배열일 때
  4. var이 빈 Map 객체일 때
  5. var이 빈 Collection 객체일 때

EL에서 객체 메서드를 호출하는 방법은 아래와 같다.

<%
	List<MemberDto> list = dao.getMembers();
    request.setAttribute("users", list);
%>

${ requestScope.users.size() } <%-- 객체 메서드 결과 출력 --%>

이 때, ${ users.size } 를 출력하면 <%= request.getAttribute("users").getSize() %> 로 해석된다.


JSTL을 이용해 JSP의 로직을 쉽게 구현할 수 있다.

JSTL은 JSP 페이지 내에서 자바 코드를 바로 사용하지 않고 로직을 내장하기 위한 수단이다.
선언 형식은 <%@ taglib prefix="prefix" uri="uri" %> 이다. 예시는 아래와 같다.

가장 많이 쓰이는 core 태그의 선언 방법은
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>이다.
예시는 아래와 같다.

변수나 특정 객체의 프로퍼티에 값을 할당할 때는 <c:set>을 사용한다.
예시는 아래와 같다.

객체의 속성값에 값을 할당할 때는 target에 객체를 설저하고 property에 속성명을 설정한다.

예외 처리를 수행할 때는 <c:catch>를 사용한다.
try-catch 처럼 예외 처리를 한 예시는 아래와 같다.

<%@ page contentType="text/html" pageEncoding="UTF-8" errorPage="error.jsp" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:catch var="ex>
<%
	String str = null;
    out.println("Length of string : " + str.length());
%>
</c:catch>

<c:if test="${ex != null}">
	예외가 발생했습니다. {$ex.message}
</c:if>

예외가 발생하면 ex에 값이 할당되고, 예외 처리된다.

조건을 줄 때는 <c:if>를 사용한다. 예시는 아래와 같다.

<c:if test="${userType eq 'admin'}">
	<jsp:include page="admin.jsp" /> <%-- 동적으로 페이지 할당 --%>
</c:if>

다중 조건을 줄 때는 <c:choose><c:when><c:otherwise>를 사용한다. 예시는 아래와 같다.

<c:choose>
	<c:when test="${userType == 'admin'}"> <%-- if --%>
    	관리자 화면...
    </c:when>
    
    <c:when test="${userType == 'member'}"> <%-- else if --%>
    	회원 사용자 화면...
    </c:when>
    
    <c:otherwise> <%-- else --%>
    	일반 사용자 화면...
    </c:otherwise>
</c:choose>

반복문을 줄 때는 <c:forEach>를 사용한다. 예시는 아래와 같다.

실행 결과는 아래와 같다.

profile
백엔드 개발자

0개의 댓글