[TIL] JSP : EL & JSTL

padd60·2021년 11월 1일
0

TIL

목록 보기
63/77
post-thumbnail

표현언어(EL)

Expression language 줄임말로 자바 문법을 줄이기 위해 고안된 문법이라고 보면 된다.

기본 형태

${...}

$와 {}를 사용해 내부 식을 나타낸다.

기본적으로 내부에 산술, 관계(크기비교), 조건(삼항조건식), 논리(&&, ||..) 등을 사용할 수 있고 empty라는 특이한 연산자가 있는데 해당 연산자는 적용대상의 값이 비어있으면 true를 반환한다.

사용예) ${empty 변수}

자바코드의 변수는 따로 JSTL에 담아서 사용해야한다.

예를 들어

<%
	String input = null;
%>

위와 같은 자바변수를 jsp파일에 선언하면

바로 하단코드에서

${empty input}

사용할 수 있는 것이 아니라

JSTL을 이용해

<c:set var="input" value="<%input%>"/>

로 한번 변수에 담아 표현식으로 사용이 가능하다.

표현식으로 request로 보내준 인자 받기

아주 간단하게 받아올 수 있다.

${param.인자}

또는

${param["인자"]}

위와 같이 받아와 해당 인자에 저장된 데이터를 가져올 수 있고

같은 인자의 이름으로 여러번 요청이 들어오면 배열로 받아

${paramValues.인자}

로 받아오고 보통 JSTL의 반복문 액션태그와 사용한다.

<c:forEach items="${paramValues.인자}" var="변수">
${변수}
</c:forEach>

자바 빈을 요청으로 넘겨줄때 정보 가져오기

request 인자를 받아올 때랑 같이

${자바빈즈를 담아준 속성 이름.프로퍼티이름(멤버변수이름)}

또는

${자바빈즈를 담아준 속성 이름["프로퍼티이름(멤버변수이름)"]}

으로 사용한다.

JSTL

기본적으로 액션태그는 사용자전용으로 설정해 개별적으로 만들어 사용할 수 있는데, 표준이 없으니 태그들이 너무 우후죽순으로 많이 생겨나 계파가 나눠지는 현상이 나타나자 jsp 개발자들이 표준이 되는 액션태그를 만들었다.

그것이 바로 JSTL이다.

JSTL 기능별 태그 분류

  1. 기본기능 = c
  2. 형식화 = fmt
  3. 데이터베이스 작업 = sql
  4. XML 처리 = x
  5. 함수 처리 = fn

JSTL 라이브러리 불러오기

우선 구글에 JSTL을 검색해 해당 압축파일을 받아 해체한 뒤 jar 파일을 프로젝트의 WEB-INF 안에 lib폴더에 넣어 적용시켜준다.

그리고 jsp파일에서 사용하기 위해 불러올때는

<%@ taglib uri="경로주소값" prefix="uri값에 맞는 태그값"%>

위 코드를 상단에 작성한 뒤 사용이 가능해진다.

편집기를 사용한다면 uri= 까지 입력하면 자동완성으로 주소값들이 목록형태로 보이므로 원하는 JSTL을 선택해 사용하면 된다.

JSTL c(core)태그의 액션태그 종류

<c:set> 태그

변수에 값을 저장하는 태그로

<c:set var="변수명" value="${표현식내용}">

위처럼 표현식으로 데이터를 바인딩하여 사용하는 편이다.

<c:remove> 태그

위와 반대로 선언된 변수를 제거하는 태그

<c:remove var="변수명">

<c:if> 태그

조건식을 생성할 수 있는 태그

<c:if test="${조건식}">
	조건이 참일때 실행값
</c:if>

<c:choose> 태그

자바의 switch문을 대체하는 태그

<c:choose>
    <c:when test="조건1"> 조건에 만족할때 값 </c:when>
    <c:when test="조건2"> 조건에 만족할때 값 </c:when>
    <c:otherwise> 위 조건에 아무것도 만족하지 않을때 값</c:otherwise>
</c:choose>

<c:forEach> 태그

반복적으로 실행되는 태그로 배열처리에 주로 사용됨

<c:forEach var="변수" items="${배열변수명}">
    ${변수}
    //배열의 크기만큼 반복적 수행하며 원소 한개 출력
</c:forEach>

varStatus 속성

forEach 액션태그에서 사용할 수 있는 속성으로 배열의 인덱스 값이나 반복횟수를 알 수 있다.

<c:forEach var="movie" items="${movieList}" varStatus="status">
	<tr>
		<td> ${status.index }</td>
		<td> ${status.count }</td>
		<td> ${movie }</td>
	</tr>
</c:forEach>

예시와 같이 속성을 varStatus="status"로 설정하고

${status.index}로 배열의 인덱스 값을 가져오고

${status.count}로 배열의 반복 횟수를 가져온다.

first, last 속성

varStatus에서 사용할 수 있는 속성으로 이름 그대로
first는 배열의 첫번째를 선택,
last는 배열의 마지막을 선택한다.

주로 첫번째나 마지막 반복문에서 조건을 주고 싶을 때 사용한다.

<c:forEach var="movie" items="${movieList}" varStatus="status">
	<c:if test="${status.first}">시작</c:if>
	${movie}
	<c:if test="${not status.last}">, </c:if>
</c:forEach>

begin, end 속성

varStatus에서 사용할 수 있는 속성으로
반복횟수를 지정할 수 있다.

<c:forEach var="movie" begin="1" end="10" items="${movieList}" varStatus="status">
	${movie}<c:if test="${not status.last}">, </c:if>
</c:forEach>

begin은 반복에 사용될 것 중 첫번째 항목의 index
end은 반복에 사용될 것 중 마지막 항목의 index
으로 begin의 index부터 end의 index까지만 반복된다.

step 속성

begin, end 속성와 같이 사용하는 속성으로 증가량을 지정할 수 있다.

<c:forEach var="movie" begin="1" end="10" step="2" items="${movieList}" varStatus="status">
	${movie}<c:if test="${not status.last}">, </c:if>
</c:forEach>

step을 주게 되면 준 값만큼 시작 인덱스에서 더한 인덱스 번호로 건너뛰며 반복이 실행된다.

<c:forTokens> 태그

구분값으로 문자열을 나누어 배열로 반환하는 액션태그

<c:forTokens var="토큰을 저장할 변수" items="토큰으로 나눌 문자열" delims="구분자">
	실행내용
</c:forTokens>

<c:import> 태그

jsp의 include 태그처럼 다른 페이지의 내용을 포함시키기위해서 사용한다. 다만 import태그는 해당 페이지를 변수에 담을 수 있다.

[]는 생략가능 속성
<c:import url="주소값" [var="변수이름"] [scope="영역"] [charEncoding="charEncoding"]>
</c:import>

<c:url> 태그

반복적으로 사용되는 url값을 변수에 저장하기 위한 태그

[]는 생략가능 속성
<c:url value="주소값" [var="변수이름"] [scope="영역"]>
</c:url>

<c:redirect> 태그

response.sendRedirect() 메서드와 같은 기능을 하는 태그로
지정한 페이지로 이동시키 위해 사용함

[]는 생략가능 속성
<c:redirect url="주소값" [context="경로명"]>

<c:out> 태그

출력해주는 액션태그

[]는 생략가능 속성
<c:out value="" [default="기본값"]>

<c:catch> 태그

예외처리 태그

<c:catch var="변수명">
	예외가 발생할 수 있는 코드
</c:catch>

JSTL fmt(format)태그의 액션태그 종류

여러 종류의 태그가 있지만 가장 유용하게 사용하는 것은 fotmateDate이다.

<fmt:formatDate>

<c:set var="now" value="<%= new java.util.Date()%>">
<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일 hh시 mm분 ss초"/>

현재시간이 패턴에 지정된 형태로 출력되어 나온다.

profile
Keep Going to Web Developer

0개의 댓글