티스토리 뷰

1.    JSTL ( JSP Standard Tag Library )

-      사용자의 필요에 의해서 태그를 자체적으로 만들어 사용할 수 있다.

-      일반적으로 EL과 같이 사용된다.


[ 1. JSTL -

1 ) <c:if test="${ EL 표현식인 조건문}"> /

2 ) <c:choose> + <c:when test="${EL 표현식인 조건문}"> + <c:otherswise> ] (***)

 

<%@ page 
    language="java" 
    contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

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

<!-- 위의 2개는 include.jsp로 인해 생략이 가능하다. -->

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>exam03</title>
</head>

<body>
    
    <h1>/JSTL/exam03.jsp</h1>
    <hr>

    <!-- =============================================== -->

    <h2>JSTL Core 라이브러리 실습 1 - if문 ( c:if test )</h2>
    <hr>

    <!-- = pageContext.setAttribute("myColor", "빨강"); -->
    <c:set var="myColor" value="빨강" scope="page" />

    <!-- test에 작성하면 된다. -->
    <%-- 단, test에서 EL표현식에 맞게 ${} 안에 작성해야 한다. --%>
    <!-- EL변수에는 EL내장객체나 공유속성만이 올 수 있다. (***) -->
    <c:if test="${ myColor == '빨강' }">
        <p>색상은 빨강색이다.</p>
    </c:if>

    <!-- =============================================== -->

    <h2>JSTL Core 라이브러리 실습 2 - choose + when ( switch문 )</h2>
    <hr>

    <!-- pageContext.setAttribute("grade", "70") -->
    <!-- grade란 EL변수(= 공유속성 이름) 생성됨 -->
    <c:set var="grade" value="70" scope="page" />

    <!-- 자바의 switch문 또는 SQL의 CASE - WHEN 문장을 JSTL을 이용해 구현 -->
    <%-- 3개의 JSTL 태그를 이용해서 구현 : <c:choose /> <c:when /> <c:otherwise /> --%>
    <c:choose>

        <c:when test="${ grade >= 90 }">
            <p>학점은 A이다.</p>
        </c:when>

        <c:when test="${ grade >= 80 }">
            <p>학점은 B이다.</p>
        </c:when>

        <c:when test="${ grade >= 70 }">
            <p>학점은 C이다.</p>
        </c:when>

        <c:otherwise>
            <p>학점은 F이다.</p>
        </c:otherwise>

    </c:choose>

</body>

</html>

[ 2. JSTL -

1 ) <c:forEach var="배열 또는 리스트에서 원소를 하나씩 뺄 변수명" items="${배열 또는 리스트 객체}"> /

2 ) <c:forEach var="변수명" begin="시작할 인덱스" end="끝날 인덱스" step="증감수"  ] (****)

 

<%@ page 
    language="java" 
    contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

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

<!-- 위의 2개는 include.jsp로 인해 생략이 가능하다. -->

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>exam04 - forEach</title>
</head>

<body>
    
    <h1>/JSTL/exam04.jsp</h1>
    <hr>

    <!-- =============================================== -->

    <h2>JSTL Core 라이브러리 실습 1 - forEach문 - 배열 ( c:forEach )</h2>
    <hr>

    <%
    
        // scriptlet tag
        // 자바 배열 리터럴 생성
        int [] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        // request scope에 배열객체 바인딩
        // 공유속성의 이름인 myArr은 EL변수명이 된다.
        request.setAttribute("myArr", num);
    
    %>

    <!-- item 속성 : 배열 또는 리스트 지정 -> 반복횟수 지정 -->
    <!-- var 속성 : item 속성에 지정된 자료구조의 1개의 원소값을 가진다. -->
    <!-- 그리고 이 var 속성의 이름이 곧 EL 변수명이 된다. -->
    <c:forEach var="element" items="${myArr}">
        <c:out value="${element}" />
    </c:forEach>

    <!-- =============================================== -->

    <h2>JSTL Core 라이브러리 실습 2 - forEach문 - List ( c:forEach )</h2>
    <hr>

    <%
    
        // List 객체일 경우

        // page directive에 import 속성으로 List 타입명을 기재하지 않을 것이라면,
        // 아래와 같이 개발자가 직접 FQCN으로 객체를 생성해도 된다. ( since java 8 )
        java.util.List<String> list = new java.util.ArrayList<>();

        list.add("홍길동");
        list.add("이순신");
        list.add("유관순");

        // request scope에 공유객체로 list 객체를 바인딩한다.
        // 이때 공유속성의 이름은 EL변수가 된다.
        request.setAttribute("__NAME__", list);

    %>

    <c:forEach var="name" items="${__NAME__}">
        <c:out value="${name}" />
    </c:forEach>

    <!-- =============================================== -->

    <h2>JSTL Core 라이브러리 실습 3 - forEach문 - begin + end + step ( c:forEach )</h2>
    <hr>

    <ol>

        <!-- = for( int count = 0; count < 10; count ++ )와 같다. -->
        <c:forEach var="count" begin="0" end="10" step="1">
            <li>${count}</li>
        </c:forEach>

    </ol>

</body>

</html>

[ 3. JSTL -

1 ) <c:forTokens var="토큰의 변수명" items="${나누기 전의 문자열}" delims="구분자지정" > ] (****)

 

<h2>JSTL Core 라이브러리 실습 4 - forTokens문 - ( c:forTokens )</h2>
    <hr>

    <%
    
        // CSV : Comma(,) Sperated Value
        // = 쉼표로 구분되어 있는 문자열 ( CSV 형식의 문자열 )
        String str = "A,B,C,D";

        // request Scope에 바인딩 : "data"란 이름이 EL변수명이 된다.
        request.setAttribute("data", str);
    
    %>

    <!-- String Tokenizer와 같은 기능을 한다. -->
    <!-- delims는 구분자를 의미한다. -->
    <c:forTokens var="token" items="${data}" delims=",">
        <c:out value="${token}" /><br>
    </c:forTokens>

[ 4. JSTL - JSTL formatting 라이브러리 ] (**)

 

[ 4 - 1. bundle.properties 파일 생성 ]

 

sendMessage=\uC548\uB155\uD558\uC138\uC694!

 

[ 4 - 2. JSTL formatting 라이브러리를 사용할 jsp 생성 ]

 

<%@ page 
    language="java" 
    contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

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

<!-- 위의 2개는 include.jsp로 인해 생략이 가능하다. -->

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>exam06 - JSTL formatting 라이브러리 2</title>
</head>

<body>
    
    <h1>/JSTL/exam06.jsp</h1>
    <hr>

    <!-- =============================================== -->

    <h2>JSTL formatting 라이브러리 1 - ( fmt:requestEncoding ) </h2>
    <hr>

    <!-- = request.setCharaterEncoding("UTF-8"); -->
    <!-- 아래의 코드는 반드시 전송파라미터의 값을 얻기 전에 해야 한다. -->
    <fmt:requestEncoding value="UTF-8" />

    <!-- 전송 파라미터에서 값을 얻어 출력한다. -->
    1. name : <%= request.getParameter("name") %> <br>
    2. age : <%= request.getParameter("age") %> <br>

    <p></p>

    <!-- EL 내장객체 활용 방법 -->
    3. name : ${param.name} <br>
    4. age : ${param.age} <br>

    <!-- =============================================== -->

    <h2>JSTL formatting 라이브러리 2 - ( fmt:setBundle + fmt:message ) </h2>
    <hr>

    <!-- .properties는 키와 값 쌍으로 들어가는 형태이며, 기본이 아스키 코드이기에 한글이 변환된다. -->
    <!-- basename에서는 확장자이름을 제외하고 작성해야 한다. -->
    <!-- 즉, bundle.properties에서 sendMessage라는 키의 값을 myBundle에 넣어 출력한 것이다. -->
    <fmt:setBundle basename="bundle" var="myBundle" />

    <!-- fmt:message에서 bundle은 출력할 값을 지정하는 것이다. -->
    <%-- 단, 이때의 bundle은 setBundle에서 var로 지정한 값만 ${}로 지정이 가능하다. --%>
    <h2>sendMessage : <fmt:message key="sendMessage" bundle="${myBundle}" /> </h2>

    <!-- =============================================== -->

    <h2>JSTL formatting 라이브러리 3 - ( fmt:formatDate ) </h2>
    <hr>

    <!-- 포메팅하기 전의 Date -->
    <!-- scope을 지정해주지 않으면, 기본적으로 pageScope가 선택된다. -->
    <c:set var="myDate" value="<%= new java.util.Date() %>" scope="request" />
    <h3>포멧팅하기 전</h3>
    <c:out value="${myDate}" /> <br>

    <!-- ======================= -->

    <!-- 포멧팅 -->
    <h3>포멧팅</h3>

    <!-- 1. 2022. 7. 20. -->
    1. <fmt:formatDate value="${myDate}" type="date" /> <br>

    <!-- 2. 오후 12:34:24 -->
    2. <fmt:formatDate value="${myDate}" type="time" /> <br>

    <!-- 3. 2022. 7. 20. 오후 12:34:24 -->
    3. <fmt:formatDate value="${myDate}" type="both" /> <br>

    <!-- 4. 22. 7. 20. 오후 12시 34분 24초 KST -->
    4. <fmt:formatDate value="${myDate}" type="both" dateStyle="short" timeStyle="long" /> <br>

    <!-- 5. 2022년 7월 20일 오후 12:34 -->
    5. <fmt:formatDate value="${myDate}" type="both" dateStyle="long" timeStyle="short" /> <br>

    <!-- ======================= -->

    <!-- 패턴 적용하기 -->

    <!-- 6. 2022-07-20 오후 12:43:25 -->
    6. <fmt:formatDate value="${myDate}" pattern="yyyy-MM-dd a HH:mm:ss" /> <br>

    <!-- + ss에서 ss.SSS로 작성해주면, 밀리세컨드까지 표시할 수 있다. -->
    <!-- + a는 오전 / 오후를 의미한다. -->
    <!-- + 그 외 추가하고 싶은 포멧팅이 있다면, 알아본 후 패턴에 추가해주면 된다. -->

    <!-- ======================= -->

    <!-- 숫자 포멧팅하기 -->

    <!-- 7. ₩100,000 -->
    7. <fmt:formatNumber value="100000" type="currency" /> <br>

    <!-- 8. 12% -->
    8. <fmt:formatNumber value="0.123" type="percent" /> <br>

    <!-- 9. 987,654,321.12 -->
    9. <fmt:formatNumber value="987654321.1234" pattern="###,###,###.00" /> <br>

    <!-- =============================================== -->

</body>

</html>

 

 

 

728x90
댓글
«   2024/11   »
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
최근에 올라온 글
Total
Today
Yesterday
공지사항