ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP/Servlet] 포매팅 라이브러리
    IT/Spring-JSP&Servlet 2020. 11. 21. 17:24

    출처 : unsplash

     

    ■ 들어가기

    - 뇌를 자극하는 JSP&Servlet (김윤명/한빛미디어). 을 공부하며 정리하는 블로그


    ■ 목차

    1. <fmt:formatDate>

    2. <fmt:formatNumber>

    3. <fmt:setLocale>

    4. <fmt:timeZone>, <fmt:setTimeZone>

    5. <fmt:bundle>, <fmt:setBundle>

    5-1. <fmt:bundle> 커스텀 액션과 프로퍼티 파일 내 변수 처리

    6. POST 메서드로 전송된 한글 입력 데이터 처리

     

     

    1. <fmt:formatDate> 커스텀 액션

    - 날짜와 시각을 포매팅하는 커스텀 액션

    - 출력할 날짜와 시각을 java.util.Date 클래스 타입의 객체로 넘겨줘야 하기 때문에 먼저 이 클래스의 객체를 만들어야 함!

    1) Date 클래스 객체 생성 - using Java code!

    Date date = new Date() ;

    실제 jsp 코드 내에서는 <c:set> 커스텀 액션으로 변수 선언
    ex. <c:set var="date" value="<%= new Date() %>" /> 

    2) <fmt:formatDate> 커스텀 액션을 이용해 Date 객체가 담고 있는 날짜와 시각을 출력!

         - value 애트리뷰트 값으로 Date 객체를 넘겨주며, 이때 EL 식을 이용해서 전달!

    <fmt:formatDate value="${date}" />

    3) 시각을 출력하기 위해서는 type 애트리뷰트를 추가하고 그 값으로 "time"을 지정! (기본값: date)

          - type 애트리뷰트 값으로 "both" 가능하며 날짜와 시각 모두 출력!

    <fmt:formatDate value="${date}" type="time" />

    - 기본 포맷팅

    날짜: YYYY.MM.DD

    시각: 오전|오후 HH:MI:SS

    - 만일 날짜 포맷팅을 변경하고 싶다면 dateStyle 애트리뷰트를 추가 후 full, long, medium, short 중 한 값을 지정

    - 만일 시각 포맷팅을 변경하고 싶다면 timeStyle 애트리뷰트를 추가 후 full, long, medium, short 중 한 값을 지정

    - 날짜/시각 short/medium/long/full 예시

    [S] 20. 11. 21 오후 5:16
    [M] 2020. 11. 21 오후 5:16:53
    [L] 2020년 11월 21일 (토) 오후 5시 16분 53초
    [F] 2020년 11월 21일 토요일 오후 5시 16분 53초 KST

    - 위의 포맷팅 외에 직접 패턴을 지정할 때는 pattern 애트리뷰트에 패턴 지정

    ex. <fmt:formatDate value="${date}" type="date" pattern="YYYY/MM/DD (E)" />     <!-- 2020/11/21 (토) -->

    ex. <fmt:formatDate vaelu="${date}" type="time" pattern="(a) hh:mm:ss" />             <!-- (오후) 05:23:49 -->

     

    2. <fmt:formatNumber> 커스텀 액션

    - 수치 표기하기 위한 커스텀 액션

    - 표현하고자 하는 포맷팅에 따라 애트리뷰트를 추가하면 된다.

    - 기본적인 표기법 :

    <fmt:formatNumber value="10000" />

    - 숫자 천단위 표기

    <fmt:formatNumber value="1234500" groupingUsed="true" />     <!-- 1,234,500 -->

    - 소수점 표기 (#: 유효숫자 있는 경우 채우며 없으면 미표시, 0: 유효숫자있으면 채우고 없으면 0으로 표시)

    <fmt:formatNumber value="3.14158" pattern="#.##" />                  <!-- 3.14 -->

    <fmt:formatNumber value="10.5" pattern="#.00" />                        <!-- 10.50 -->

    - 퍼센트 단위 표기

    <fmt:formatNumber value="0.5" type="percent" />                                                          <!-- 50% -->

    - 금액(통화) 단위 표기

    <fmt:formatNumber value="2500000" type="currency" />

    <fmt:formatNumber value="2500000" type="currency" currencySymbol="$" />        <!-- $2,500,000 -->

     

    3. <fmt:setLocale> 커스텀 액션

    - 특정 지역에 맞게 데이터 포맷을 설정하고자 할 때 사용하는 액션

    - <fmt:setLocale> 커스텀 액션 이후 <fmt:formatDate> 커스텀 액션을 사용하면 해당 지역에 맞게 날짜 및 시각이 설정됨

    - 사용법 :

    <fmt:setLocale value="언어코드" />

    <fmt:setLocale value="언어코드_국가코드" />

    ※ 참고: 국가코드 ( www.loc.gov/marc/unimarctomarc21_tables.pdf )

    ※ 참고: 언어코드 ( www.loc.gov/standards/iso639-2/php/code_list.php )

     

     

    4. <fmt:timeZone>, <fmt:setTimeZone> 커스텀 액션

    - <fmt:timeZone> 커스텀 액션은 value 애트리뷰트에 "특정 지역"이름을 지정하면 날짜와 시각이 해당 지역 시간대에 맞게 표기됨 (날짜와 시각은 <fmt:formatDate> 커스텀 액션 사용!)

    - 사용 예시 :

    <fmt:timeZone value="America/New_York" >

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

          시각: <fmt:formatDate value="${date}" type="time" />

    </fmt:timeZone>

    ※ 지역(도시) 이름은 java.util.TimeZone 클래스의 getAvaliableIDs 메서드 리턴값 중 하나를 사용해야 함

        String arr[] = TimeZone.getAvailableIDs() ;

    - <fmt:setTimeZone> 커스텀 액션은 이 액션이 실행된 이후 모든 코드에 영향을 미침

    ( <fmt:timeZone> 커스텀 액션의 경우 시작/종료 태그 내에서만 영향 미침 )

     

    5. <fmt:bundle>, <fmt:setBundle> 커스텀 액션

    - 일반 텍스트를 여러 가지 언어로 표현하기 위해 사용하는 커스텀 액션

    - 하나의 JSP 페이지로 여러 가지 언어의 웹 페이지 생성 기능 지원

    1) 사전에 언어별 프로퍼티 파일(.properties)을 생성하고 "키=값" 형태로 내용 작성

      ( .properties 파일은 웹 애플리케이션 디렉토리 내 /WEB-INF/classes 서브디렉토리에 저장 )

      - 보통 네이밍 규칙은 "대표파일명_언어코드.properties" 형식으로 작성함

      - 영어 이외의 파일은 해당 파일이 작성된 디렉토리에서 native2ascii.exe 프로그램을 통해 ASCII 파일로 변환 필요함

        ex. native2ascii Intro_ko.properties.org Intro_ko.properties

    2) <fmt:setBundle> 또는 <fmt:bundle>, <fmt:message> 커스텀 액션으로 파일을 읽어옴

      - <fmt:setBundle> 커스텀 액션은 사용할 프로퍼티 파일을 지정 (대상 언어는 웹 브라우저 언어 설정에 따름)

        ex. <fmt:setBundle basename="Intro" />

      - <fmt:setBundle> 커스텀 액션으로 사용할 프로퍼티 파일 지정한 후 <fmt:message> 커스텀 액션으로 데이터 읽어옴

        ex. <fmt:message key="TITLE" />

    앗! 그런데 한글이 깨져서 나오네... ㅠㅠ 왜그런거지...;; 일단 영어는 제대로 나옴

     

    5-1. <fmt:bundle> 커스텀 액션과 프로퍼티 파일 내 변수 처리

    1) <fmt:bundle> 액션은 <fmt:setBundle>과 비슷한 일을 하지만 시작~끝 태그 사이의 코드에만 영향을 미침

    2) 프로퍼티 파일 내 변수 처리

      - 프로퍼티 파일에서는 변수를 이름이 아닌 인덱스 값으로 표시

      - 인덱스 값은 중괄호에 쌓여 0부터 순서대로 표시하여 사용

        ex. GREETING=안녕하세요, {0}님. {1}번째 방문하셨군요.

      - 위의 변수에 값을 대입하는 것은 JSP 페이지에서 <fmt:message> 커스텀 액션을 사용해서 처리!

        ( <fmt:param> 액션을 인덱스 수 만큼 순서대로 작성 )

        ex. <fmt:message var="greeting" key="GREETING">

                   <fmt:param>Spiderman</fmt:param>

                   <fmt:param>3</fmt:param>

             </fmt:message>

     

    6. POST 메서드로 전송된 한글 입력 데이터 처리

    한글 데이터 입력 (HTML) 데이터 출력 (JSP)

    - 위와 같이 <form> 앨리먼트에 post 메서드로 한글 데이터 전달 받을 때 JSP 페이지에서는 인코딩 처리를 위한 스크립틀릿을 추가해야 함

      ex. <% request.setCharacterEncoding("utf-8") ; %>

    - 스크립틀릿 대신에 <fmt:requestEncoding> 커스텀 액션으로 대체 가능!

      ex. <fmt:requestEncoding value="utf-8" />

    한글 데이터 입력 (HTML) 데이터 출력 (JSP) 데이터 출력 (JSP) - 인코딩 설정

     

    댓글

Designed by Tistory.