본문으로 바로가기

JSTL

category 웹/JSP 2018. 11. 12. 19:27

JSTL은 JSP 표준 태그 라이브러리입니다.

라이브러리는 많이 들어보셨을 텐데 여러 프로그램이 공동으로 사용하는 코드를 모아놓은 코드의 집합체 일종입니다.

 

JSTL의 용도는 무엇일까요 ??

첫 째, 간단한 프로그램 로직을 구사 할 수 있습니다.(if, 변수 선언, for문)

둘 째, 다른 JSP페이지 호출할 수 있습니다.(<c:redirect>)

셋 째, 날짜, 시간, 숫자 포맷

넷 째, JSP 페이지 하나로 여러 언어 웹페이지를 생성 할 수 있다.

다섯 째, 데이터베이스로의 연산(입력/출력/수정/삭제/조회)

여섯 째, xml 문서를 처리 할 수 있습니다.

일곱 째, 문자열 처리하는 함수(다르게 쓰임)

 

일곱 째에 다르게 쓰인 다는 말은 나머지 6개의 용도(기능)은 커스텀 액션 형태로 제공 된다는 말입니다.

간단히 맛보기로 몇개를 보겠습니다.

첫 째 기능인JSTL의 for문 역할을 하는 <c:forEach> 커스텀 액션이 있습니다.

<c:forEach begin="1" end="10">

     코드 구현

</c:forEach>

이 위에 코드는 1부터 10까지 총 10번의 for문을 돕니다.

 

셋 째 기능인 포맷은 <fmt:formatNumber> 커스텀 액션을 사용합니다.

<fmt:formatNumber value="3.14159" pattern="#.00"/>

위 코드는 소숫점 이하 2자리 까지 끊어서 출력해주게 하는 기능입니다.

 

일 곱째 기능은 문자열 처리 함수로

${fn:toUpperCase("Hello")}

즉 대문자로 바꿔줍니다. 즉 EL식으로 표현되죠 ???

 

이해를 돕고자 간단한 표로 보겠습니다.

 

이를 사용하기 위해서는???

 

taglib지시자를 이용하여 라이브러리의 URI식별자와 접두어를 연결해야 합니다. 위의 표를 참고

 

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

이렇게 선언해주고 사용가능하겠습니다.

 

또한 jstl.jar와 standard.jar를 받아서 WEB-INF에 lib 디렉토리에 넣어주어야 합니다.

 

이렇게 되면 준비할 부분은 끝났습니다.

이제 사용하면됩니다.

 

코어라이브러리에 대해 설명드리겠습니다.

<c:set> 커스텀 액션

<c:set>은 변수 선언과 초기화를 하는 커스텀 액션입니다.

원래 int num=100으로 초기화 선언을 하지만 이를 이용하면

<c:set var="num" value="100"/>으로 표현 할 수 있죠

 

간단한 예제를 보도록 하죠.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<
%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="num1" value="7"/>
<c:set var="num2" value="9"/>
<c:set var="result" value="${num1*num2 }"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
${num1 }과 ${num2 }의 곱은? ${result }
</body>
</html>

위 빨간 글씨는 선언부 파란 글씨는 이를 이용한 코드입니다.

 

여기서 c:set 태그에 scope="request"를 지정해주면 forward를 통해 다른 jsp페이지로 값을 넘길 수 있습니다.

 

<c:remove> 커스텀 액션은 데이터영역의 에트리뷰트로 저장되기 때문에 삭제해야 할 필요가 있습니다.

<c:remove var="num"/>를 하게 되면 page request session application 영역에 모든 것이  제거가 되고 <c:remove var="num"  scope="request"/> 를 해주면 request 영역의 데이터만 삭제가 됩니다.

 

c언어에서 if문을 사용하듯이 커스텀 액션에서도 사용 가능합니다,

<c:if> 커스텀 액션인데요.

꼭 test라는 애트리뷰트 값으로 조건을 지정해줘야합니다.

<c:if test="${num1>num2}"/>

num1이 더크다.

</c:if>

 

<c:choose>커스텀 액션은 switch 구문과 비슷합니다.

case를 <c:when> default를 <c:otherwise>로 지정해줍니다.

<c:choose>

<c:when test="${num==0}">

~~~~

</c:when>

<c:otherwise>

~~~

</c:otherwise>

</c:choose>

 

c언어에서 for문을 마찬가지로 쓸 수 있는데요

<c:forEach> 커스텀 액션을 사용합니다.

즉 지정  횟수만큼 HTML코드를 반복하여 출력 가능합니다.

<c:forEach begin="1" end="10">

야호<br>

</c:forEach>

야호가 10번 출력되겠죠 ??

 

또한 증가값을 카운터 변수에 저장 할수도 있어서 이를 이용하여 응용 할 수 있습니다.

<c:forEach var="cnt" begin="1" end="10">

${cnt}<br>

</c:forEach>

1부터 10까지 찍힐 겁니다.

step 애트리뷰트를 지정 안하면 디폴트로 1씩 증가하고 지정해주게 될 경우 지정해준 수만큼 증가하게 됩니다.

 

또한 items 애트리뷰트를 이용하면 여러 개의 항목으로 구성된 데이터를 순서대로 출력합니다.

<c:forEach var="str" items="${arr}">

${str}<br>

</c:forEach>

즉 items를 이용하여 처리 할 수 있는 데이터는

1)Collection 객체

2)Iterator 객체

3)Enumeration 객체

4)Map 객체

5)콤마로 구성 된 항목 포함하는 문자열

이렇게 5개가 있습니다.

예제를 보자면

 

<c:forTokens> 커스텀 액션은 for문과 StringTokenizer클래스 기능을 합쳤습니다.

items/delims/var 3개의 에트리뷰트를 사용해야합니다.

items에는 분리할 문자열

delims는 구분자

var는 분리 토큰을 대입할 변수 입니다.

 

guests라는 것에 값을 토끼^^거북이~사슴으로 넣고

구분자를 ^~로 하여 animal에 분리된 토끼 거북이 사슴을 넣고 출력하게 됩니다.

 

커스텀 액션으로 예외처리가 가능합니다.

<c:catch>를 이용합니다.

이 태그 안에는 에러가 발생할 위험 코드를 넣습니다. try~catch와는 다르다는 것을 꼭 명심하세요.

<c:catch var="e">

예외발생가능성 코드

</c:catch>

<c:if test="${e!=null}">

에러메시지:${e.message}

</c:if>

e를 통해 에러가 발생하면 메시지를 출력해줍니다.

즉 e는 익셉션 객체가 들어있습니다. getMessage를 호출 하게 되는거죠

 

다른 웹 자원을 호출 하기 위해서는 ??

<c:redirect url=""/>

<c:import url=""/>

<c:url var="" value="">=><c:redirect url=""/>

 

예를 보겠습니다

 

<c:out> 액션은 흔히 데이터 출력 할 때 특수문자도 편리하게 출력하기 위해 사용합니다.

<c:out value=""> 여기서 값을 지정 안해 줄때 디폴트 값도 지정 가능합니다.

<c:out value="${str}" defaut="guest"/>

 

 

' > JSP' 카테고리의 다른 글

ToyProject (쇼핑몰 게시판)  (0) 2020.03.09
표준 액션  (0) 2018.11.07
Tld EL함수  (0) 2018.11.05
익스프레션 언어(2)  (0) 2018.10.31
익스프레션 언어  (0) 2018.10.29