이번 예는 결과로 보는 편이 편하다.

Formatting Tags의 예

먼저 Body 부분


    <h1 align="center">JSTL Fmt Library Tag Test</h1>
   
    <h2>fmt:formatNumber 태그 : 숫자에 포맷 적용하는 태그</h2>
   
    <c:set var="number" value="123456789"></c:set>
   
    <fmt:formatNumber value="${ number }" groupingUsed="true"></fmt:formatNumber>
    <br>

    <fmt:formatNumber value="1.234567" pattern="#.###"></fmt:formatNumber>
    <br>

    <fmt:formatNumber value="1.2" pattern="#.##"></fmt:formatNumber>
    <br>

    <fmt:formatNumber value="1.2" pattern="#.00"></fmt:formatNumber>
    <br>

    <fmt:formatNumber value="0.12" type="percent"></fmt:formatNumber>
    <br>

    <fmt:formatNumber value="123456789" type="currency"></fmt:formatNumber>
    <br>

    <fmt:formatNumber value="123456789" type="currency" currencySymbol="$"></fmt:formatNumber>
   
   
   
    <hr>
   
   
   
    <h2>fmt:formatDate 태그 : 날짜와 시간에 포맷 적용하는 태그</h2>

    <c:set var="today" value="<%= new java.util.Date() %>"></c:set>

    오늘 날짜 : <fmt:formatDate value="${ today }" type="date"/>
    <br>

    현재 시간 : <fmt:formatDate value="${ today }" type="time"/>
    <br>

    현재 날짜와 시간 : <fmt:formatDate value="${ today }" type="both"/>
    <br>

   
    <h2>날짜와 시간에 제공되는 포맷을 적용한 경우</h2>
   
    [default] : <fmt:formatDate value="${ today }" type="both" dateStyle="default" timeStyle="default"/>
    <br>

    [short] : <fmt:formatDate value="${ today }" type="both" dateStyle="short" timeStyle="short"/>
    <br>

    [medium] : <fmt:formatDate value="${ today }" type="both" dateStyle="medium" timeStyle="medium"/>
    <br>

    [long] : <fmt:formatDate value="${ today }" type="both" dateStyle="long" timeStyle="long"/>
    <br>

    [full] : <fmt:formatDate value="${ today }" type="both" dateStyle="full" timeStyle="full"/>
    <br>

   
    <h3>원하는 포맷으로 pattern 적용한 경우</h3>

    현재 날짜 : <fmt:formatDate value="${ today }" type="date" pattern="yyyy/mm/dd (E)"/>
    <br>

    현재 시간 : <fmt:formatDate value="${ today }" type="time" pattern="(a) hh:mm:ss"/>
    <br>

    현재 날짜와 시간 : <fmt:formatDate value="${ today }" type="both" pattern="yyyy/mm/dd (E) (a) hh:mm:ss"/>
    <br>



결과 화면은 다음과 같다.
















Function Tags의 예




    <h1 align="center">JSTL Function Library Tag Test</h1>


    <h3>문자열 처리에 관련된 함수들이다.</h3>
    <h3>el 안에서 값 처리용으로 사용된다.</h3>
   
    <c:set var="str" value="How are you?"></c:set>
   
    str : ${ str }
    <br>


    you가 포함되어 있나 : ${ fn:contains(str, 'you') }
    <br>


    how가 포함되어 있나 : ${ fn:contains(str, 'how') }
    <br>


    대소문자 구분 없이 how 포함되는지 확인 : ${ fn:containsIgnoreCase(str, 'how') }
    <br>


    모두 대문자로 : ${ fn:toUpperCase(str) }
    <br>


    모두 소문자로 : ${ fn:toLowerCase(str) }
    <br>


    are의 위치는 : ${ fn:indexOf(str, "are") }
    <br>


    How를 Where로 바꿈 : ${ fn:replace(str, "How", "Where") }
    <br>


    are 분리 추출 : ${ fn:substring(str, 4, 7) }
    <br>
   
    <c:set var="arr" value="${ fn:split(str, ' ') }"></c:set>


    <c:forEach items="${ arr }" varStatus="st">
        <c:out value="${ st.count } : ${ arr[st.index] }"></c:out>
    </c:forEach>
   
    <br>
   
    하나로 합치기 : <c:out value="${ fn:join(arr, '-') }"></c:out>
















https://qdgbjsdnb.tistory.com/217



먼저 위 게시글에서 라이브러리, jar 파일 다운로드가 필요하다.







JSTL은 JSP Standard Tag Library는 JSP에서 사용하는 커스텀 태그로 자주 사용하는 코드들의 집합을


사용하기 쉽게 태그형식으로 만들어 놓은 라이브러리다.


여태껏 써오던 <%%> 부분이 정말 간단하게 표현된다.


먼저 JSP 파일에 사용할 태그 라이브러리를 선언해야 한다.


라이브러리 종류는 다음과 같다.



Core Tags

 변수선언, url, 조건문, 반복문 등 포함

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

 Formatting Tags

 메시지 형식, 숫자, 날짜 등 포맷

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

 Function Tags

 trim, substring과 같은 유용한 문자열 처리함수

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

 XML Tags

 XML을 읽고 파싱처리 등에 필요한 라이브러리

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

 SQL Tags

 JSP에서 DB를 연동, 쿼리 실행

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



해당 taglib prefix 선언을 페이지 상단에 명시하고 사용하면 된다.


이 중 아래의 XML, SQL은 사용을 지양한다.


XML의 경우는 JSON을 사용하여 좀 더 효율적으로 사용하기 때문이고


SQL의 경우는 프로젝트 구조(MVC 패턴)상 JSP에 사용하지 않는다. 유지보수에도 영향을 끼치므로 MVC 패턴을 따르는걸 추천






예제를 통해 라이브러리의 태그들을 어떻게 쓰는지 보자.



Core Tags의 사용법




 - c:set 태그 : 변수선언


    <!-- Scope 생략 시 기본 pageScope가 된다. -->
    <c:set var="num1" value="100" scope="session"></c:set>
    <c:set var="num2" value="200" scope="session"></c:set>


 - c:set 태그 : 배열 또는 컬렉션으로 사용할 문자열 선언


    <c:set var="colors">red, yellow, green, orange, blue, magenta</c:set>




선언된 변수들은 ${ num1 }과 같이 EL 태그로 사용하면 된다.



 - c:remove 태그 : 변수 삭제
   
    <!-- 삭제 시 scope를 지정하지 않으면 모든 scope의 동일 이름의 변수를 제거한다. -->
    <c:remove var="num1" scope="session"/>
    <c:remove var="num2" scope="session"/>





※ 이스케이프 시퀀스 : <, >, &, 등의 특수문자를 &lt;와 &gt;과 &amp;로 바꿔서 인식한다.




 - c:out 태그 : 값 출력용


    <c:out value="core라이브러리의 <out> 태그는 값을 화면에 출력하는 태그이다."></c:out>
    <!-- escapeXml false로 지정하면, <, > 등을 태그로 인식하고, true로 지정하면 문자로 인식한다. 기본값은 true이다. -->



    <c:out value="<h2>데이터 출력</h2>" escapeXml="false"></c:out><br>
    <c:out value="<h2>데이터 출력</h2>" escapeXml="true"></c:out><br>
   
    <h2>c:out 태그의 default 속성</h2>
    <!-- el로 가져오는 값이 없는 경우 대체할 값에 대해 default 값으로 설정 가능 -->
    <c:out value="${ param.name }" default="아무개님"/>




 - c:if 태그 : 조건문, if의 경우는 else가 따로 없으므로 다시 if태그를 사용하면 된다.


    <c:set var="value1" value="9" scope="page"/>
    <c:set var="value2" value="3" scope="page"/>
   
    <c:if test="${ value1 >= value2 }">
        <h3>value1이 큽니다.</h3>
    </c:if>


    <c:if test="${ value1 < value2 }">
        <h3>value2가 큽니다.</h3>
    </c:if>




 - c:choose : switch문, c:when : case문, c:otherwise : default문



<c:choose>
        <c:when test="${ no == 1 }">
            <h3>안녕하세요</h3>
        </c:when>


        <c:when test="${ no eq 2 }">
            <h3>반갑습니다.</h3>
        </c:when>


        <c:otherwise>
            <h3>환영합니다.</h3>
        </c:otherwise>
</c:choose>




 - c:forEach태그 : for문


    <c:forEach begin="1" end="10">
        반복실행<br>
    </c:forEach>


   
    <c:forEach var="size" begin="1" end="7" step="1">
        <font size="${ size }">글자크기 ${ size }</font>
    </c:forEach>




 - c:forEach 태그 : 배열 또는 컬렉션 연속 처리에 for~each문처럼 사용할 수 있기에 매우 편리하다.


    <c:forEach var="color" items="${ colors }" varStatus="st">
        <font color="${ color }">
            ${ st.count } : 글자색 ${ color }<br>
        </font>
    </c:forEach>






 - c:forTokens 태그 : 문자열을 토큰으로 분리 처리할 때 사용 (split과 같다)
    <ul>
        <c:forTokens var="color" items="yellow blue pink red green" delims=" ">
            <li>${ color }</li>
        </c:forTokens>
    </ul>



  - 여러개의 토큰 문자를 가지고 분리 처리할 수도 있음


    <c:forTokens var="color" items="yellow-blue*pink/red green" delims="/*- ">
        ${ color }<br>
    </c:forTokens>






- c:url 태그 : 링크 설정 정보 별도 지정시 사용하는 태그 , param을 이용하여 값을 넘길 수 있다.


    <c:url var="fmtlink" value="testJstlCoreResult.jsp">
        <c:param name="num" value="77"></c:param>
    </c:url>


    <a href="${ fmtlink }">결과화면 연결</a>











EL, Expression Language는 JSP 2.0에 추가되어


<%=%> 와 같은 jsp에 쓰는 java 코드를 간결하게 사용하는 방법





EL의 연산자 기호는 다음과 같이 있다.


사용하는데 일반 연산자를 써도 상관없긴 하다.




 일반 연산자

 EL 기호 연산자

+, -

 +, -

 *, /

*, div

 %

 mod

 &&

and

 ||

or

 !

not

 >

lt(less than)

 <

gt(greater than)

 >=

 le(less or eqaul)

 <=

 ge(greater or equal)

 ==

eq(equal)

 !=

 ne(not equal)

 value == null

 empty






EL 태그의 내장 객체


pageScope

 page영역의 객체에 접근

 requestScope

 request영역의 객체에 접근

 sessionScope

 session영역의 객체에 접근

 applicationScope

 application영역의 객체에 접근

 param

 전달된 파라미터값을 받아올 때

 paramValues

 전달된 파라미터값을 배열로

 header

 특정 헤더 정보를 받아올 때

 headerValues

 특정 헤더 정보를 배열로 받아올 때

 cookie

 ${cookie.key} 형식으로 쿠키값 조회

 initParam

 초기 파라미터를 조회

 pageContext

 pageContext 경로 조회










EL 태그의  간단한 예



전달된 request 객체에 저장된 정보 출력 예



name : ${ requestScope.name }
age : ${ requestScope.age }
phone : ${requestScope.phone }


name : ${ name }
age : ${ age }
phone : ${ phone }







ArrayList items = (ArrayList) request.getAttribute("items");


ArrayList와 같이 전달된 값을 출력하는 예



0 : ${ requestScope.items[0] }
1 : ${ requestScope.items[1] }
2 : ${ requestScope.items[2] }
   
0 : ${ items[0] }
1 : ${ items[1] }
2 : ${ items[2] }






전달된 객체의 필드 값들 출력 예, member라는 객체를 request 형식으로 받음



이름 : ${ member.name }
나이 : ${ member.age }
전화번호 : ${ member.phone }
이메일 : ${ member.email }






Parameter로 넘어온 값 출력



    <%
        String pName = request.getParameter("name");
        int price = Integer.parseInt(request.getParameter("price"));
        String[] pNo = request.getParameterValues("no");
        String option = request.getParameter("option");
    %>


이와 같이 받던 데이터를 아래와 같이 간단하게


    상품명 : ${ param.name }
    가격 : ${ param.price }
    제품번호 : ${ paramValues.no[0] }와 ${ paramValues.no["1"] }
    옵션 : ${ (empty param.option)?"옵션없음":param.option }






스코프를 이용하여 구분지어 출력



Request

    이름 : ${ requestScope.member.name }
    나이 : ${ requestScope.member.age }
    전화번호 : ${ requestScope.member.phone }
    이메일 : ${ requestScope.member.email }
   

      Session
    이름 : ${ sessionScope.member.name }
    나이 : ${ sessionScope.member.age }
    전화번호 : ${ sessionScope.member.phone }
    이메일 : ${ sessionScope.member.email }
   
    동일한 이름의 네이밍이 있다면 request가 우선되어 출력됨

    이름 : ${ member.name }
    나이 : ${ member.age }
    전화번호 : ${ member.phone }
    이메일 : ${ member.email }





간단한 예 이외에 내장 객체들은 다음 게시글에서 쭉 사용한다.




+ Recent posts