Servlet-JSP

JSTL

voider 2020. 9. 11. 22:40

JSTL(JSP Standard Tag Library)

EL이나 액션 태그를 이용해도 여전히 자바 코드를 사용할 수밖에 없는 상황이 있다. 이를테면 반복문이나 조건문 같은 것을 쓸 때. 이것을 제거하기 위해 커스텀 태그가 등장했다. 커스텀 태그는 자바 코드를 대체하기 위해 만든 태그다. JSTL은 커스텀 태그의 한 종류다.

JSTL 라이브러리 설정

우선 사용하기 위해서 라이브러리를 설치해야 한다. 링크

초록색 테두리 안에 네 개의 라이브러리를 받는다.

WebContent - WEB-INF - lib 안에 다운 받은 라이브러리를 넣는다.
<%page 밑에 taglib추가

<!--이 안에 함께 쓸 수 없음 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!--이 태그를 써주지 않으면 JSTL 쓸 수 없음 -->
<%@ taglib prefix="c" 
uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
해당 태그는 어떤 라이브러리(core, fmt, fn을 쓰느냐에 따라 달라진다.
만약 국제화 라이브러리를 쓴다면
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
라고 고쳐써야 한다.

JSTL의 태그 종류

라이브러리 세부 기능 접두어 관련 URL
코어 변수지원, 흐름제어, 반복문, URL처리 c http://java.sun.com/jsp/jstl/core
국제화 지역, 메세지 형식, 숫자 및 날짜형식 fmt http://java.sun.com/jsp/jstl/fmt
XML XML코어, 흐름제어, XML변환 x http://java.sun.com/jsp/jstl/xml
데이터베이스 SQL sql http://java.sun.com/jsp/jstl/sql
함수 컬렉션 처리, 문자열 처리 fn http://java.sun.com/jsp/jstl/functions

core 태그 예제

변수를 만드는 태그

<c:set ... />

<%
  String id = "hong";
  ...
%>

이렇게 써야만 했던 것을 JSTL로 대체한다.

<c:set var="id" value="hong" />
<c:set var="pwd" value="1234" />
<c:set var="name" value="hongcoco" />
<c:set var="age" value="22" />

JSTL로 이렇게 대체할 수 있다.

<h1>${id }</h1>
<h1>${pwd }</h1>
<h1>${name }</h1>
<h1>${age }</h1>
    <jsp:useBean id="memberList" class="java.util.ArrayList" />
    <jsp:useBean id="memberMap" class="java.util.HashMap" />

<%
    MemberBean m1 = new MemberBean("jojo", "1234","조조킴", "jojo@naver.com");
    MemberBean m2 = new MemberBean("kal", "1234","김갈량","kal@daum.com");

       //리스트에 담는다.
    memberList.add(m1);
    memberList.add(m2);

    //리스트를 맵에 담는다.
    memberMap.put("memberList", memberList);
%>

<!-- HashMap에 저장된 List객체를 list라는 변수를 선언하고 그 안에 담는다. -->
<c:set var="list" value="${memberMap.memberList }" />

  .....
  ....
  <!-- 읽기 -->
  ${list[0].id}
  <!-- 결과 : jojo -->

<c:remove .../>

지정한 변수를 제거하는 태그

<!-- 설정 -->
<c:set var="id" value="hong" />
<c:set var="pwd" value="1234" />
<c:set var="name" value="hongcoco" />
<c:set var="age" value="22" />

<!-- 삭제 -->
<c:remove var="pwd"/>
<c:remove var="name"/>

<c:if test=.... />

조건문을 사용하는 태그

<!--바인딩-->
<c:set var="id" value="admin" />
<c:set var="pwd" value="1234" />
<c:set var="name" value="hongcoco" />
<c:set var="age" value="22" />
..
..
..
<body>
    <c:if test='${true }'>
        <h1>늘 참이다.</h1>
    </c:if>

    <c:if test='${id == "admin"}'>
        <h1>ID가 ADMIN일 때만 참이다.</h1>
    </c:if>

    <c:if test="${(id eq 'admin') || (id eq 'hong') }">
        <h1>아이디가 admin일 때도 참이고 hong일 때도 참이다.</h1>
    </c:if>
    ..
    ..
    ...

<c:choose ... >

switch문을 JSTL로 구현할 수 있는 태그

<c:set var="name" value="dodo" />

<c:choose>
    <c:when test="${empty name }">
        <h1>이름을 입력하세요</h1>
    </c:when>
    <c:otherwise>
        <h1>${name }</h1>
    </c:otherwise>
</c:choose>

when속성을 여러 개 추가할 수 있다.

<c:forEach .../>

반복문을 다루는 태그

<c:forEach var='변수이름' items='반복할 객체 이름' begin='시작값' end='마지막 값'
step='증가값' varStatus='반복상태변수이름'>
  ...
  ...
</c:forEach>

varStatus의 속성

  • index (int)

    • items에서 정의한 항목을 가리키는 index의 번호.
    • 0부터 시작
  • count (int)

    • 몇 번째 반복인지 나타낸다.
    • 1부터 시작
  • first (boolean)

    • 첫 번째 반복인가?
  • last (boolean)

    • 마지막 반복인가?

접근 방법 : ${varStatus이름.index} / ${vs.index}

...
<%
    MemberBean m1 = new MemberBean("coco","1234","꼬낌", "no@no.com");    
    MemberBean m2 = new MemberBean("dodo","1234","낌또", "ddo@no.com");    

    List<MemberBean> list = new ArrayList<>();

    list.add(m1);
    list.add(m2);

%>

<!-- 위에서 만든 list를 가져와서 바인딩한다. -->
<c:set var="list" value="<%=list %>" />
...
    <c:forEach var="i" begin="1" end="5" step="1" varStatus="loop">    
        i = ${i}
        반복 횟수 : ${loop.count }
    </c:forEach>
    <hr>
    <c:forEach var="i" begin="0" end="${list.size()}">
        <h1>${list[i].id }</h1>
    </c:forEach>
    <hr>
    <c:set var="fruits" value="사과, 망고, 참외, 수박, 귤" />
    <!--구분자로 문자열을 쪼갠다. -->
    <c:forTokens var='token' items="${fruits }" delims=",">
        <p>${token }</p>
    </c:forTokens>
    <br>
...

<c:url ...>

URL정보를 저장하는 역할을 한다.

...
<!-- 이동할 페이지 설정 -->
<c:url var="url" value="/jstl/member1.jsp">
    <!-- 가지고 갈 데이터 -->
    <c:param name="id" value="coco" />
    <c:param name="name" value="코코리" />
</c:url>    
...
<h1><a href="${url }">이동</a></h1>

<c:redirect ...>

response.sendRedirect()이 하는 역할을 대신한다.
<c:url...과 유사하다. 데이터를 가지고 설정한 페이지로 보낸다.

<c:redirect url="/jstl/memeber1.jsp">
    <c:param name="id" value="${'hong' }" />
    <c:param name="name" value="${'김홍' }" />
</c:redirect>

<c:out...>

JspWriter에 내용을 처리한 후에 출력하는 태그.
그냥 EL로 출력할 수도 있지만 default값을 지정할 수 있음.

<c:out value="출력값" default="기본값" >

fmt 태그

반드시 설정
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

fmt 태그로 날짜 출력하기

원하는 형식으로 날짜를 출력할 수 있다.

...
<c:set var="now" value="<%=new Date()%>" />
..
..
<fmt:formatDate value='${now}' pattern='YYYY-MM-dd : hh:mm:ss' />

'Servlet-JSP' 카테고리의 다른 글

Model2 - MVC  (0) 2020.09.11
표현언어(EL, Expression Language)  (0) 2020.09.11
액션 태그  (0) 2020.09.11
JSP😇  (0) 2020.09.11
서블릿 리스너  (0) 2020.09.11