Chillax in dev

[JSP&Servlet] JSP의 JSTL(표준 태그 라이브러리) 사용법 정리 본문

Java 공부/Java

[JSP&Servlet] JSP의 JSTL(표준 태그 라이브러리) 사용법 정리

Seong Story 2020. 9. 4. 14:31
728x90

[JSP&Servlet] JSP의 JSTL(표준 태그 라이브러리) 사용법 정리

 

-JSTL의 이해

JSTL(JSP Standard Tag Library)는 표준 태그 라이브러리로 jsp 페이지에서 일반적인 핵심 기능을 캡슐화하여 제공하는 jsp 태그 컬렉션입니다. jsp 입문 단계를 공부하며 어렵게 느껴졌지만 이는 프레임워크(Framework) 개발을 할 때는 JSTL의 사용이 많기 때문에 자바 고급 개발자가 되기 위해 반드시 알아야 할 분야로 뽑습니다.

JSTL은 일반적인 반복,조건의 로직이나 포매팅 작업, XML 문서, SQL 태그의 조작을 위한 태그를 사용할 때 사용됩니다.

 

- 사용 준비

이클립스로 개발할때 JSTL을 사용하기 위한. jar파일을 준비해야 합니다.

jstl.jar , standard.jar 파일입니다. jstl을 사용하기 위해 해당 컴포넌트 WEB-INF/lib 폴더에 넣고 저장합니다.

아래 url을 통해 다운로드할 수 있습니다.

http://tomcat.apache.org/taglibs/standard/

 

Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations

- JSTL에서 제공되는 태그의 종류는 크게 5가지입니다.

태그 기능
Core 가장 자주 사용되는 jstl 태그입니다. 일반적인 프로그램의 기능을 제공합니다.
Formatting 날짜,시간, 숫자 텍스트를 포멧하고 표시하는 fomatter 기능을 제공합니다.
SQL RDBMS와 상호 작용하는 태그를 제공합니다.
XML XML문서를 생성하고 조작하는 방법을 제공합니다.
Functions 일반적인 문자열을 가공하고 조작하는 표준함수를 제공합니다.

 

- 태그를 사용하기 위한 taglib 지시자(directive)의 선언

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> // core 태그 임포트
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> // formatting 태그 임포트

잘 작성된 JSTL문법을 보고 한참 왜 실행이 안되지 오류를 찾다 찾다 보면 결국  해당 taglib를 선언하지 않아서 사용 못하는 실수를 많이 발견하곤 합니다. 내가 jstl을 사용한다면 해당  taglib를 반드시 선언해주세요.

 

- Core 태그 예제로 배우기

* c:out으로 단순 출력.

<c:out value="Hello World" />  //단순히 Hello World문자열을 jsp 파일에서 실행시 웹 화면에 출력

* c:set으로 변수 생성 후 값 저장 ${}로 변수에 저장한 값 출력  변수의 삭제는 c:remove로 한다.

(참고로 이때 변수엔 기본형부터 객체 까지도 넣을 수 있다!)

<h2>변수 생성 및 초기화 1</h2>
<c:set var="msg" value="Hello"></c:set>
<!--세팅 변수는 msg 값은 hello 넣음.  -->
\${msg} = ${msg}<br>

<h2>변수 생성 및 초기화 2</h2>
<c:set var="age">30</c:set><br>
<!--이렇게도 넣을수 있다 벨류로안주고  -->
<h2>EL에 의한 출력</h2>
\${age} = ${age}<hr><br>

<c:remove var="msg">
<c:remove var="age">

ex01) jstl 조건 예시  <c:if>, <c:when>, <c:otherwise>, <c:choose> 사용법을 배워보자

아래 간단한 예시로도 많은 것을 공부할 수 있다 아래 두 코드는 각각 정보를 입력하는 html 페이지와 전달 값을 받아 처리하는 jsp 페이지로 첨부되어있다.

주의 깊게 볼 것은 form 태그의 사용이다. select와 option을 이용해서 드롭다운 박스에서 원하는 색을 선택한다. 그리고 submit버튼을 통해 action에 해당 jsp 페이지로 값들을 보낸다.

jsp페이지로 이동한 후 perfix=c로 core라이브러리의  jstl을 사용할 수 있게 임포트 문을 작성하고 ,  값을 얻어오는 방식을 확인하면 ${param.name값}로 전송된 파라미터를 얻어 오지만 <c:if test=${param.id 조건문}  > 의형태로 작성함을  확인할 수 있다. <c:when>, <c:otherwise>, <c:choose> 은 자바의 switch case default 구문처럼 선택의 로직을 구성할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR" />
</head>
<body>
<h2>Core Tags</h2>
<form method="get" action="coreTags2.jsp">
 id : <input  name="id"><br/>
 color : <select name="color">
            <option selected value="yellow">옐로우</option>
            <option value="blue">블루</option>
            <option value="orange">오렌지</option>
            <option value="pink">핑크</option>
        </select><br/>
<input type="submit" value="보내기">
</form>
</body>
</html>
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%@ page contentType="text/html; charset=EUC-KR" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL</title>
</head>
<body >
<h2>Core Tags2</h2>
<c:if test="${param.id != null}">
    <b>${param.id}</b>
</c:if>
<c:if test="${param.id == null}">
    <b>Guest</b>
</c:if>
<c:choose>
    <c:when test="${param.color=='yellow'}">
        <c:set var="c" value="노란색"/>
    </c:when>
    <c:when test="${param.color=='blue'}">
        <c:set var="c" value="파란색"/>
    </c:when>
    <c:when test="${param.color=='orange'}">
        <c:set var="c" value="오렌지색"/>
    </c:when>
    <c:when test="${param.color=='pink'}">
        <c:set var="c" value="핑크색"/>
    </c:when>
    <c:otherwise>
        <c:set var="c" value="블랙"/>
    </c:otherwise>
</c:choose>
님이 좋아하는 색상은 <font color="${param.color}">${c}</font> 입니다.
</body>
</html>
cs
 

html 입력 페이지
이동한 jsp페이지


- ex02) jstl 반복 예제 

이번엔 대표적인 반복문을 어떻게 사용하는지 살펴볼 것이다.

일단 상단 스크립릿 <% %>에 선언된 배열과 문자열을 확인하자. 배열은 그렇다 치고 문자열은 , ; + 와같은 여러 기호가 같이 있어 난잡해 보인다. 

<c:set>으로 스크립릿에서 선언된 배열 srt1을 page 저장소에 'arr' 란 변수명으로 저장했다. 그 후 반복문을 통해 배열을 출력한다. 아래의 <for:Tokens> 역시 크게 다르지 않다 특징은 delims를 지정하여 StringTokeniger와 같은 기능으로 문자열을 분해할 수 있다는 사실이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page contentType="text/html; charset=EUC-KR" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
      String str1[] = {"simba","rorod","tina","poli"};
      String str2 = "JAVA, JSP, Spring,k;; , Android+1";
 %>
<html>
<head>
<title>JSTL</title>
</head>
<body >
<h2>Core Tags3</h2>
<c:set var="arr" value="<%=str1%>"/>
<c:forEach var="i" items="${arr}" begin="0" step="1" end="3">
    ${i}<br/>
</c:forEach>
<hr align="left" width="220"/>
<c:set var="s" value="<%=str2%>"/>
<c:forTokens var="st" items="${s}" delims=", ;">
    <b>${st}&nbsp;</b>
</c:forTokens>
</body>
</html>
cs

실행화면

< core 정리 >

 표로 잘 정리되어있어 공부하기 위해 참조합니다. (출처:JSPStudy.co.kr)


- Formatting 태그 예제로 배우기

포메팅 태그 라이브러리는 날짜, 시간, 숫자 및 텍스트를 원하는 양식으로 포맷하고 통일되게 사용하도록 도움을 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 날자</title>
</head>
<body>
<c:set var="now" value="<%=new java.util.Date()%>"></c:set>
\${now } :${now}<br>
<fmt:formatDate value="${now }"></fmt:formatDate><br>
date : <fmt:formatDate value="${now }" type="date"></fmt:formatDate><br>
time : <fmt:formatDate value="${now }" type="time"></fmt:formatDate><br>
both : <fmt:formatDate value="${now }" type="both"></fmt:formatDate><br>
default : <fmt:formatDate value="${now }" type="both" dateStyle="default" timeStyle="default"></fmt:formatDate><br>
short : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"></fmt:formatDate><br>
medium:<fmt:formatDate value="${now }" type="both" dateStyle="medium" timeStyle="medium"></fmt:formatDate>
long:<fmt:formatDate value="${now }" type="both" dateStyle="long" timeStyle="long"></fmt:formatDate><br>
full:<fmt:formatDate value="${now }" type="both" dateStyle="long" timeStyle="long"></fmt:formatDate><br>
pattern="yyyy년MM월dd일 hh시 mm분 ss초":<fmt:formatDate value="${now }" 
pattern="yyyy년MM월dd일 hh시 mm분 ss초"></fmt:formatDate><br>
<!--참고로 <><>사이에 엔터 가있으면 안된다.잘 이어 붙혀주자.  -->
</body>
</html>
cs

실행 화면

 

< Formatting 정리 >

 표로 잘 정리되어있어 공부하기 위해 참조합니다. (출처 : JSPStudy.co.kr)

- JSTL 함수 (functions)

jstl함수 라이브러리는 일반적인 문자열 조작 함수를 제공합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@ page contentType="text/html; charset=EUC-KR" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<h2>Functions Tags</h2>
<c:set var="str" value="the show must go on!"/>
<hr width="430" align="left" color="red"/>
str : <b>${str}</b><br/>
length : <b>${fn:length(str)}</b><br/>
substring : <b>${fn:substring(str,0,8)}</b><br/>
substringAfter : <b>${fn:substringAfter(str,"you know")}</b><br/>
substringBefore : <b>${fn:substringBefore(str,"the")}</b><br/>
toUpperCase : <b>${fn:toUpperCase(str)}</b><br/>
toLowerCase  : <b>${fn:toLowerCase(str)}</b><br/>
replace  : <b>${fn:replace(str,"show","stage")}</b><br/>
indexOf  : <b>${fn:indexOf(str,"the")}</b><br/>
startsWith  : <b>${fn:startsWith(str,"hello")}</b><br/>
endsWith  : <b>${fn:endsWith(str,"hello")}</b><br/>
contains  : <b>${fn:contains(str,"hello")}</b><br/>
containsIgnoreCase  : <b>${fn:containsIgnoreCase(str,"hello")}</b><br/>
<c:set var="arr" value="${fn:split(str,' ')}"/>
join : <b>${fn:join(arr,"&&")}</b><br/>
<hr width="430" align="left" color="blue"/>
</body>
</html>
cs

실행 화면

 

 

- 그 이외에도 다양한 기능들을 제공합니다. 필요한 기능이 생길 때마다 내 것으로 만들 수 있도록 공부하는 것이 좋겠습니다.

728x90
LIST
Comments