[Back-End] JSTL / EL

unzinzanda·2023년 4월 1일
1

Back-end

목록 보기
4/4
post-thumbnail

EL(Expression Language)

EL

  • 표현을 위한 언어로 JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력하도록 고안된 언어.
  • 즉, JSP의 <%= %>를 대체.
  • EL 표현식에서 도트 연산자 왼쪽은 반드시 java.util.Map객체 또는 Java Beans 객체여야 함.
  • EL 표현식에서 도트 연산자 오른쪽은 반드시 맵의 키이거나 Bean 프로퍼티여야 함.
  • EL에서 제공하는 기능
    • JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용.
    • 자바 클래스 메소드 호출 가능.
    • 표현 언어만의 기본 객체 제공.
    • 수치, 관계, 논리 연산 제공.

EL 문법

[ ] 연산자

  • Dot 표기법 외에 [ ] 연산자를 사용하여 객체의 값에 접근할 수 있음.
  • [ ] 연산자 안의 값이 문자열인 경우, 이건 맵의 키가 될 수도 있고 Bean 프로퍼티나 리스트 및 배열의 인덱스가 될 수도 있음.
  • 배열과 리스트인 경우, 문자로 된 인덱스 값은 숫자로 변경하여 처리.

EL 내장 객체

  • JSP 페이지의 EL 표현식에서 사용할 수 있는 객체.
CategoryIdentifierTypeDescription
JSPpageContextJava Bean현재 페이지의 프로세싱과 상응하는 PageContext instance.
범위
(scope)
pageScopeMappage scope에 저장된 객체를 추출.
requestScopeMaprequest scope에 저장된 객체를 추출.
sessionScopeMapsession scope에 저장된 객체를 추출.
applicationScopeMapapplication scope에 저장된 객체를 추출.
요청 매개변수paramMapServletRequest.getParameter(String)을 통해 요청 정보를 추출.
paramValuesMapServletRequest.getParameterValues(String)을 통해 요청 정보를 추출.
요청 헤더headerMapHttpServletRequest.getHeader(String)을 통해 헤더 정보를 추출.
headerValuesMapHttpServletRequest.getHeaders(String)을 통해 헤더의 정보를 추출.
쿠키cookieMapHttpServletRequest.getCookies()를 통해 쿠키 정보를 추출.
초기화 매개변수initParamMapServletContext.getInitParameter(String)를 통해 초기화 파라미터를 추출.

EL 사용

  • pageContext를 제외한 모든 EL 내장 객체는 Map
  • 기본 문법
    • ${expression}

EL에서 객체 접근

  • request.setAttribute(”key”, “value”)
    • ${key} : 속성 이름만을 사용할 경우 자동으로 pageScope > requestScope > sessionScope > applicationScope 순으로 객체를 찾고 속성이 있으면 값을 넣음.
  • ${cookie.id.value}
    • Cookie가 null이라면 null 리턴
    • null이 아니라면 id 검사 후 null이면 null 리턴
    • null이 아니라면 value 검사
      • 값이 null이라도 null이 아닌 공백 출력

EL Operator

  • empty 연산자가 true를 return하는 경우(${empty var})
    - 값이 null
    - 값이 빈 문자열(””)
    - 길이가 0인 배열
    - 빈 Map 객체
    - 빈 Collection 객체


JSTL (Jsp Standard Tag Library)

  • JSP에서 최대한 java 코드를 줄이기 위해 사용
  • Jsp Standard Tag Library : 몇몇 자바 코드를 tag로 사용

JSTL

  • JSP 페이지 내에서 자바 코드를 바로 사용하지 않고 로직을 내장하는 효율적인 방법 제공.
    → 스크립트릿을 사용하지 않고 액션을 통해 간단하게 처리할 수 있는 방법 제공

JSTL Tag

  • directive 선언 형식 : <%@ taglib prefix=”prefix” uri=”uri” %>
libraryprefixfunctionURI
corec변수 지원, 흐름제어, URL처리http://java.sun.com/jsp/jstl/core
XMLxXML 코어, 흐름제어, XML 변환http://java.sun.com/jsp/jstl/xml
국제화fmt지역, 메시지 형식, 숫자 및 날짜 형식http://java.sun.com/jsp/jstl/fmt
databasesqlSQLhttp://java.sun.com/jsp/jstl/sql
함수Collection, String 처리http://java.sun.com/jsp/jstl/functions

JSTL - core tag

functiontagdescription
변수지원setjsp page에서 사용할 변수 설정.
remove설정한 변수를 제거.
흐름제어if조건에 따른 코드 실행.
choose, when, otherwise다중 조건을 처리할 때 사용.(if ~ else if ~ else)
forEacharray나 collection의 각 항목을 처리할 때 사용.
forTokens구분자로 분리된 각각의 토큰을 처리할 때 사용.(StringTokenizer)
URL처리importURL을 사용하여 다른 자원의 결과를 삽입.
redirect지정한 경로로 redirect.
urlURL 작성.
기타태그catchException 처리에 사용.
outJspWriter에 내용을 처리한 후 출력.

변수 선언 : <c:set>

  • 변수나 특정 객체의 프로퍼티에 값을 할당할 때 사용.
  • value 속성의 값이나 액션의 body content로 값을 설정.
  • var 속성은 변수를 나타내며, 변수의 생존 범위는 scope 속성으로 설정.(디폴트는 page)
  • 특정 객체의 프로퍼티에 값을 할당할 때는 target 속성에 객체를 설정하고 property에 프로퍼티명 설정.

실습

forEach

<c:forEach items="${ List }" var="ob">
	<tr>
		<td>${ ob.code }</td>
			<td>
				<form id="form-detail" action="${ root }/note/detail.jsp" method="POST">
					<input type="hidden" name="code" value="${ ob.code }">
					<input type="hidden" name="title" value="${ ob.title }">
					<input type="hidden" name="price" value="${ ob.price }">
					<input type="hidden" name="author" value="${ ob.author }">
					<a href="#" onclick="document.querySelector('#form-detail').submit()">${ ob.title }</a>
				</form>
			</td>
		<td>${ ob.price }</td>
		<td>${ ob.author }</td>
	</tr>
</c:forEach>
  • for( var : items )와 같은 느낌.
  • 이 때, ob는 객체이므로 원래라면 getter를 사용해야 하지만 $ { ob.title }을 하면 알아서 getter를 호출하여 값을 가져옴

c : set

<c:set var="root" value="${ pageContext.request.contextPath }" scope="session" />
  • var : 변수명 지정.

  • scope : 변수가 저장될 scope. 기본값은 page.


choose, when, otherwise

<c:choose>
	<c:when test="${ 조건 }">
		
	</c:when>
	<c:otherwise>
			
	</c:otherwise>
</c:choose>
  • when : if, case문, test="${ }" 내의 조건에 맞는다면 내부 실행.

  • otherwise : else, default문


fmt

<fmt:requestEncoding value=""/>
  • fmt : requestEncoding을 통해 한글처리를 하면 한글이 깨지지 않고 출력될 수 있음.
profile
안녕하세요 :)

0개의 댓글