본문 바로가기
FRONT-END

[JSP] EL, 액션 태그, JSTL

by 로햐 2022. 2. 16.

Ⅰ. EL(Expression Language)

JSP는 스크립트 요소(Script Element)로 작동하는데(스크립틀릿, 표현식, 선언문 등)를 사용하여 Servlet에서 값을 뽑아내는데, 이를 좀 더 편하게 사용할 수 있도록 고안된 표현법.


EL 방식

기본적으로는 JSP 내장 객체를 구분하지 않고 모든 내장 객체의 키 값을 검색하여 값을 찾아낸다. 같은 키가 있다면 작은 범위의 값이 출력된다.

${ 키 값 }

원하는 내장 객체에서 검색하고 싶은 경우, 참조할 수 있도록 'JSP내장객체명Scope.'으로 표현한다.

<!--${ JSP내장객체명Scope.키 }-->
${ requestScope.title }

내장객체명을 붙이지 않고 모든 범위에서 검색하는 경우, 속도가 느려질 수 있으므로 되도록 객체명을 명시하는 버릇을 들이자!


JSP 내장 객체의 범위(Scope)

pageScope : 가장 좁은 단위의 객체 범위.

requestScope : 요청과 응답에서 사용하는 객체 범위.

sessionScope : 사용자가 접속을 종료하는 행위 전까지 사용되는 객체 범위.

applicationScope : 가장 넓은 단위의 객체 범위. 프로그램 전역에서 사용하는 변수를 담을 수 있다.

 


EL 연산

<!--산술연산 : -->
${ 5 + 10 }<br>
${ 5 - 10 }<br>
${ 5 * 10 }<br>
${ 5 / 10 }<br>
${ 5 % 10 }<br>

<!--비교연산-->
${ 5 > 10 }, ${ 5 gt 10 }<br>
${ 5 < 10 }, ${ 5 lt 10 }<br><br>

${ 5 >= 10 }, ${ 5 ge 10 }<br>
${ 5 <= 10 }, ${ 5 le 10 }<br><br>

${ 5 == 10 }, ${ 5 eq 10 }<br>
${ 5 != 10 }, ${ 5 ne 10 }<br>

<!--논리연산-->
${ 5 && 10 }, ${ 5 and 10 }<br>
${ 5 || 10 }, ${ 5 or 10 }<br>

<!--null-->
<!--객체(member)가 null인지 아닌지-->
${ empty member }, ${ member == null }, ${ member eq null }<br>
${ !empty member }, ${ member != null }, ${ member ne null }<br>

<!--리스트(list)가 비어있는지 아닌지-->
${ empty list }<br>
${ !empty list }<br>

Ⅱ. 액션 태그

표준 액션 태그와 커스텀 액션 태그로 나뉜다.

표준 액션 태그는 별다른 taglib 설정 없이 사용 가능하다.

주석의 경우 액션태그 중간에 들어가면 오류가 날 수 있으므로 주의할것.

 


표준 액션 태그

JSP에서 별도의 taglib 지시어를 사용하지 않고도 기술 가능한 액션 태그.

include

표준 액션 태그를 이용하여 동적 include 방식으로, 런타임시 포함.

선언된 변수를 공유하지 않으므로, 같은 이름의 변수를 선언할 수 있다.

값을 전달 가능 : param

<c:include page="navi.jsp">
	<c:param name="keyword" value="nextLevel" />
    <c:param name="page" value="1" />
</c:include>
<!--포함하는 주소 : navi.jsp?keyword=nextLevel&page=1-->

forward

해당 주소로 포워딩하는 태그

<c:forward page="main.jsp" />

커스텀 액션 태그-JSTL

별도의 라이브러리 설치가 필요한 액션 태그. 배포되는 폴더(ex. lib) 안에 jar파일을 포함시켜줘야한다.

taglib 지시어는 보통 page 지시어의 다음 줄에 작성한다.

 

사용할 Library는 JSTL Cord Library로, uri 속성은 "http://java.sun.com/jsp/jstl/core", 접두어는 c를 자주 사용한다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!--
	prefix 속성과 uri 속성이 존재.
	prefix는 접두어로, <XXX:YYY ... > 형태에서 XXX의 자리에 들어오는 형태.
-->

JSTL - 변수(Attribute) 관련

변수 선언

<c:set var="i" value="10" scope="request" />
<!--scope 속성은 생략 가능. 생략 시 pageScope에 담김-->

※변수는 선언과 동시에 초기화를 해야한다.

※<c:set ...>으로 선언된 변수는 EL로만 접근 가능하다. 스크립팅 요소로는 접근 불가능.

 

변수 출력

<c:out var="i" default="기본값" escapeXml="true"/>
<!---
	default: 기본값. value 속성이 비어있는 경우 출력되는 값(생략가능)
	escapeXml : 태그를 출력하는지 선택(생략가능. 생략 시 true가 기본값. true시 <b></b>처럼 보임)
-->

변수 삭제

<!--특정 Scope 삭제-->
<c:remove var="i" scope="request" />

<!-- scope 속성을 지정해주지 않으면 모든 Scope에서 해당 키를 찾아서 모두 삭제-->

JSTL - 조건문

if

단순하게 한번 조건문 사용하는 방법

<c:if test="${ empty member }">
	<!--test의 값이 true일 때 실행할 코드-->
</c:if>

choose/when/otherwise

선택지를 주고 모든 경우가 아닌 경우 실행할 부분을 설정

<c:choose>
    <c:when test="${member.name eq '박하늘'}">
        회원의 이름은 박하늘입니다.
    </c:when>
    <c:when test="${member.name eq '박한별'}">
    	회원의 이름은 박한별입니다.
    </c:when>
    <c:otherwise>
    	회원의 이름은 박하늘, 박한별이 아닙니다.
    </c:otherwise>
</c:choose>

JSTL - 반복문

forEach

일반적으로 초기값과 공차 값을 제시하여 원하는만큼 반복하는 반복문,

향상된 for문으로 배열이나 컬렉션의 내용물을 하나씩 꺼내서 적용하는 반복문

<c:forEach var="i" start="1" end="5" step="1">
	<h${i}>${i}번째</h${i}>
</c:forEach>
<!-- 
    1번째
    2번째
    ...
    5번째
-->

<c:forEach var="i" items="list">
	${i}<br>
</c:forEach>
<!--list의 내용이 한줄씩 출력됨-->

forTokens

StringTokenizer과 유사한 기능. 구분자를 설정하여 문자열을 분리시키고 분리된 내용물에 순차적으로 접근한다.

<c:forTokens var="i" items="${actorList}" delims=",./">
	<div>${i}</div>
</c:forTokens>

JSTL - 쿼리스트링

url

원하는 url 경로를 구성하는 기능. 쿼리스트링을 param으로 관리할 수 있다.

<c:url var="query" value="search.bo">
	<c:param name="currentPage" value="1"/>
	<c:param name="condition" value="title"/>
	<c:param name="keyword" value="봄"/>
</c:url>

<!--해당 주소를 사용하는 방법-->
<a href="${query}">이동</a>

 


 

'FRONT-END' 카테고리의 다른 글

[JQuery] 기초  (3) 2021.12.28
[JavaScript] 기초  (4) 2021.12.22
[HTML&CSS] 웹 문서 기본 제작  (0) 2021.12.13