< JSTL (JSP Standard Tag Library) >


JSP View에서 사용할 수 있는 태그 라이브러리

https://www.javatpoint.com/jstl
JSTL 태그 기능 참고 사이트

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
JSTL 라이브러리 다운로드

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
jar파일 WEB-INF\lib 폴더에 추가 후 jsp 파일 상단에 위의 page지시자 추가



게시판 목록 생성

JSTL 사용 전)

1
2
3
4
5
6
7
8
9
10
11
12
13
<%
    List<Notice> list = (List<Notice>)request.getAttribute("list");
    for(Notice n : list){ 
    pageContext.setAttribute("n", n);
%>
<tr>
    <td>${n.id}</td>
    <td class="title indent text-align-left"><a href="detail?id=${n.id}">${n.title}</a></td>
    <td>${n.writerId}</td>
    <td>${n.regdate}</td>
    <td>${n.hit}</td>
</tr>
<%%>
cs


JSTL 사용 후)

1
2
3
4
5
6
7
8
9
<c:forEach var="n" items="${list}">
<tr>
<td>${n.id}</td>
<td class="title indent text-align-left"><a href="detail?id=${n.id}">${n.title}</a></td>
<td>${n.writerId}</td>
<td>${n.regdate}</td>
<td>${n.hit}</td>
</tr>
</c:forEach>
cs



 

JSTL 기능 범주


Core
Formating
Functions
SQL 
XML

(SQL, XML 기능은 MVC가 나오기 전 쓰던 방식으로 이제는 쓰지 않는 게 좋다)


유용한 JSTL 


<c:set>
<c:remove>
<c:if>
<c:choose>
<c:when>
<c:otherwise>
<c:forEach>
<c:forTokens>
<c:url>
<c:catch>

 

 

간단한 for 태그 라이브러리를 만들기 위한 코드


ForTag 클래스
TagSupport 상속
+doStartTag
+doEndTag
+doAfterBody
메소드 오버라이드


태그 Descriptor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>control</shortname>
    <uri>http://www.abcd.com/jsp/tags/control</uri>  // 고유식별자
    <info>제어구조 라이브러리</info>
 
    <tag>
    <name>for</name>
    <tagclass>
        com.abcd.web.taglib.ForTag
    </tagclass>
    <info>반복문</info>
    </tag>
</taglib>
cs


파일 path : WEB-INF\{파일명}.tld

 

JSP에서 JSTL 사용 시

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
uri = 고유식별자, prefix = 고유식별자가 너무 길기 때문에 fix
사용 - <c:for>


 

JSTL Core 기능

 

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

-page 지시자 추가

 


<c:forEach> 태그
var="n"                                  값을 담을 임시변수설정
items="${list}"                      저장소에서 꺼내올 배열
begin="0", end="9"              출력할 인덱스 범위 
varStatus="st"                      반복 중 현재 상태 값 확인                    

varStatus 속성 사용
%{st.current}                     현재 반복되는 아이템
%{st.index}                        현재 반복되는 인덱스
%{st.count}                        현재 반복 횟수
%{st.first}                          현재 아이템이 첫번째면 true
%{st.last}                           현재 아이템이 마지막이면 true
%{st.begin}                        begin 속성에 설정한 값
%{st.end}                           end 속성에 설정한 값
%{st.step}                         반복되는 인덱스의 증가치 (기본:1) (for문의 i++ 구간)

 


<c:set 태그>
-지역 변수를 만들 수 있다
<c:set var="page" value="${param.p}">


<c:if 태그>
-if 문, else 문은 없다
<c:if test="${조건식}">
실행 할 코드
</c:if>


JSTL 사용하여 pager 번호 생성해보기

 

1
2
3
4
5
6
7
8
<c:set var="page" value="${(empty param.p)?1:param.p}" />
<c:set var="startNum" value="${page-(page-1)%5}" />
 
<ul class="-list- center">
    <c:forEach var="i" begin="0" end="4">
        <li><a class="-text- orange bold" href="?p=${startNum+i}&t=&q=">${startNum+i}</a></li>
    </c:forEach>
</ul>
cs


현재 get으로 전달되는 page parameter를 매개로 page의 첫번째 숫자를 구한다.
${(empty param.p)?1:param.p} null일시 기본값을 1페이지로 해서 기본 게시판 페이지의 NullException을 막고
전달되어온 parameter를 기반으로 ${page-(page-1)%5}를 계산해 요청된 parameter의 첫번째 페이지를 구한다
아래에서 forEach로 반복하며 요청 시의 parameter 값 정의와 페이지 번호를 출력하는 용도로 써먹는다


JSTL 사용하여 추가로 pager 버튼 만들어보기


1
<c:set var="LastNum" value="23" />
cs

-MAX 페이지 수 임시 값 등록

다음 버튼

1
2
3
4
5
6
7
8
<div>
    <c:if test="${startNum+5 < LastNum}">
        <a href="?p=${startNum+5}&t=&q=" class="btn btn-next">다음</a>
    </c:if>
    <c:if test="${startNum+5 >= LastNum}">
        <span class="btn btn-next" onclick="alert('다음 페이지가 없습니다.');">다음</span>
    </c:if>
</div>
cs


이전 버튼

1
2
3
4
5
6
7
8
<div>
    <c:if test="${startNum > 1}">
        <a href="?p=${startNum-1}&t=&q=" class="btn btn-prev">이전</a>
    </c:if>
    <c:if test="${startNum <= 1}">
        <span class="btn btn-prev" onclick="alert('이전 페이지가 없습니다.');">이전</span>
    </c:if>
</div>
cs




JSTL forTokens로 첨부파일 목록 출력하기


(현재 Db에 파일명1.확장자1,파일명2,확장자2,파일명3,확장자3 형태로 커밋 해둔 상태)

1
2
3
4
5
6
7
8
9
10
11
<tr>
    <th>첨부파일</th>
    <td colspan="3" style="text-align:left; text-indent:10px;">
    <c:forTokens var="fileName" items="${n.files}" delims="," varStatus="st">
    <a href="${fileName}">${fileName}</a>
    <c:if test="${!st.last}">
        /
    </c:if>
    </c:forTokens>
    </td>
</tr>
cs



 

JSTL Format 기능

 

1
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
cs


-page 지시자 추가


JSTL format 태그로 날짜 형식 변경하기

1
<td><fmt:formatDate pattern="yyyy-MM-dd hh:mm:ss" value="${n.regdate}" /></td>
cs


JSTL format 태그로 숫자 형식 변경하기

1
<td><fmt:formatNumber value="${n.hit}" /></td>
cs

-기본 형식은 세 자릿수 마다 , 로 끊음


https://www.javatpoint.com/jstl-fmt-formatnumber-tag
-참고 주소



JSTL functions 기능


https://www.javatpoint.com/jstl-function-tags
-참고 주소

사용예)

1
2
3
4
5
6
7
8
9
10
<c:forTokens var="fileName" items="${n.files}" delims="," varStatus="st">
    <c:set var="style" value="" />
    <c:if test="${fn:endsWith(fileName, '.zip')}">
        <c:set var="style" value="font-weight:bold; color:red;"/>
    </c:if>
    <a href="${fileName}" style="${style}">${fn:toUpperCase(fileName)}</a>
    <c:if test="${!st.last}">
    /
    </c:if>
</c:forTokens>
cs


${fn:endsWith()} 
-문자열 끝 찾아서 boolean 반환 (아이콘 등을 붙이는 데 사용할 수 있음)

${fn:toUpperCase()}
-대문자 변환

'Development > Java' 카테고리의 다른 글

Servlet / Jsp admin page #10  (0) 2022.08.22
JDBC 제어 oracleDB SQL 게시판용 몇개 #9  (0) 2022.08.21
JSP, EL 보충 #7  (0) 2022.08.15
JSP EL(Expression Language) #6  (0) 2022.08.14
JSP MVC model #5  (0) 2022.08.14

+ Recent posts