본문 바로가기
일하딩/Web

[JSP] JSTL, EL 이란 무엇인가?

by 별난형 2020. 11. 17.

1. JSTL

JSTL 은 JSP Standard Tag Library 의 약자이며, JSP 태그를 라이브러리 형태로 모든 프로그래머가 공통으로 사용하도록 모아 놓은 것이다. 좀 더 자세한 내용은 위키백과에서 확인할 수 있다.

 

ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%84%9C%EB%B2%84_%ED%8E%98%EC%9D%B4%EC%A7%80_%ED%91%9C%EC%A4%80_%ED%83%9C%EA%B7%B8_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC

 

자바서버 페이지 표준 태그 라이브러리 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

JSTL 을 사용하기 위해서는 JSP 파일에 다음과 같이 선언해 주어야한다.

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

  • c:out = 객체를 출력할때 사용한다.
<c:out value="${value}" default="Null or empty" escapeXml="false" />

default 와 escapeXml 은 사용하지 않아도 된다.

default 는 기본값 지정시 사용

escapeXml 은 태그를 사용할때 쓴다.

 

 

  • c:set = 객체를 저장하는 용도로 사용한다.
<c:set var="name" value="홍길동" />
<c:set scope="request" target="book" property="is" value="10" />
<c:set value="홍길동" target="UserModel" property="UserName" />

1. name 이라는 변수에 홍길동이라는 값을 저장한다.

2. request 라는 scope 에 book 객체의 is 라는 property 값으로 10을 저장한다.

   여기에서 scope 로 사용되는 것은 page, request, session, application 이 있다.

3. UserModel 이라는 객체의 UserName 이라는 property 값으로 홍길동을 저장한다.

 

 

  • c:remove = 객체를 삭제할 때 사용한다.
<c:remove var="name" scope="request" />

 

 

  • c:if = 조건문
<c:if test="${조건}" >
	조건 만족시 이영역 수행
</c:if>

조건 부분에는 eq, ne, == 등을 사용하여 조건문을 넣어줘야한다.

 

 

  • c:choose, c:when, c:otherwise = switch 문에 해당
<c:choose>
	<c:when test="${조건}" >
    	조건에 맞으면 이영역 수행
    </c:when>
    <c:otherwise>
    	조건에 맞지않으면 이영역 수행
    </c:otherwise>
</c:choose>

 

 

  • c:forEach = 반복문
<c:forEach items="${values}" var="list" varStatus="status">
	<c:out value="${list}" />
</c:forEach>

values 는 외부에서 넘겨 받은 리스토, 배열 형태의 값이고 이걸 forEach 내부에서 사용하기위해 list 라는 값으로 선언하여 사용한다.

var, items 는 필수로 작성해야한다.

varStatus 는 선택적으로 사용할 수 있다.

 - ${status.current} : 현재 아이템

 - ${status.index} : 0부터 순서

 - ${status.count} : 1부터 순서

 - ${status.first} : 현재가 첫번째인지 확인

 - ${status.last} : 현재가 마지막인지 확인

 - ${status.begin} : 시작값

 - ${status.end} : 끝값

 - ${status.step} : 증가값

 

begin, end, step 은 선택적으로 사용할 수 있다.

 - begin : 시작할 Index (default : 0)

 - end : 종료할 Index

 - step : index 의 이동량 (default : 1)

 

 

  • c:forToken = 구분자로 반복
<c:forToken var="alphabet" items="a,b,c,d,e,f" delims="," varStatus="status">
	<c:out value="${alphabet}" />
</c:forToken>

delims 를 구분자로 사용하여 items 의 값을 split 하는 개념이다.

 

 

  • c:import = JSP 파일을 include 한다.
<c:import url="./test.jsp" charEncoding="UTF-8" />

위와 같이 사용하고 charEncoding 은 인코딩이 문제가 있을때에 사용하면 된다.

 

 

  • c:url, c:param = URL 을 처리할 때 사용
<c:url value="/home.do">
	<c:param name="name" value="홍길동" />
	<c:param name="id" value="hong" />
</c:url>

 

 

  • c:redirect = Redirect 시에 사용한다.
<c:redirect url="http://www.url.com" />

 

 

  • c:catch = 예외 발생시 처리할때 사용한다.
<c:catch var="err">
	<%=1010%> <!-- 임의 에러 발생 -->
</c:catch>
<c:out value="err" />

임의로 에러를 발생시켜서 확인해 볼 수 있다.

 

 

 - fmt와 functions 

JSTL 을 사용할때 기본적 Core 외에도 fn과 fmt 등을 선언하여서 사용할 수 있다.

배열의 길이값을 구하거나 데이터의 형태를 변경할때 사용한다.

선언하는 방법은 아래와 같다.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

가장 많이 사용하는 예

<fmt:formatNumber value="${won }" pattern="#,###" />
<c:out value="${fn:length(list)}" />

 

 

2. EL

EL 은 Expression Language 의 약자로서 내장 객체의 데이터를 Java 를 이용하지 않고 출력하는 것이다. 주로 JSTL 과 함께 사용한다. '$' 와 '{}' 을 사용하여 값을 표현한다.

 

EL 기본객체(내장객체)

JSP/servlet 의 객체(pageContext 제외)의 속성값이나 파라미터 값등을 쉽게 표현하기 위해 기본 객체를 제공한다.

 

  • pageContext : JSP 페이지와 관련된 프로그램에서 다른 내장 객체를 얻어내거나 현재 페이지의 요청과 응답의 제어권을 다른 페이지로 넘겨주는데 사용. request, session, application 과 같은 내장 객체 참조.
  • pageScope : page 영역 참조
  • requestScope : request 영역 참조
  • sessionScope : session 영역 참조
  • applicationScope : application 영역 참조

예) ${requestScope.id} -> request.getParameter("id"); 

    ${sessionScope.id} -> session.getParameter("id"); 

 

※ scope 는 생략이 가능하다. ${sessionScope.id} 를 ${id} 라고 표현할 수 있다. 생략하면 작은 영역순으로 찾게 된다.

request > session > application 순

 

  • param : 요청 파라미터의 값을 String 으로, request.getParameter() 의 결과와 동일
  • paramValue : 요청 파라미터의 값을 String[] 으로, request.getParameterValues() 의 결과와 동일
  • header : 요청 header 정보 request.getHeader() 의 결과와 동일
  • headerValues : 요청 header 정보를 배열, request.getHeaders() 와 동일
  • cookie : 쿠키참조, request.getCookies()
  • initParam : 컨텍스트의 초기화파라미터. application.getInitParameter(이름)과 동일.

연산자

  • 수치연산자 : +, -, *, /, div, %, mod
  • 비교연산자 : ==, eq, !=, ne, <, lt, >, gt, <=, le, >=, ge
  • 논리연산자 : &&, and, ||, or, !, not
  • empty연산자 : 참조값이 null, 문자값이 "", 배열의 길이가 0, 비어있는 List/Set/Map 인 경우에는 true 반환.

예) ${1+2} -> 3

    ${2==2} -> true

    ${empty A} -> A 가 null 이면 true

 

댓글