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 |