일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- tomcat
- Spring Boot
- tortoise SVN
- Next.js
- HTML Special Entity
- NextJs
- maven
- loadcomplete
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- Eclipse
- springboot
- Windows 10
- Spring Cloud
- JSP
- PG-Strom
- BRIN
- OGM
- graph database
- Spring
- 서브라임 텍스트
- Java
- HTML Code
- orioledb
- typeorm
- Maven Project
- MariaDB
- PostgreSQL
- exit code = -805306369
- STS
- NestJS
- Today
- Total
Undergoing
JSTL 본문
What is JSTL?
- JSTL(JavaServer Pages Standard Tag Library). Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트
- JSP 페이지 안에서 사용할 수 있는 커스텀 액션(XML 문법을 따르면서 특정한 동작을 수행하는 태그)과 함수 제공
- if나 for문 등 간단한 프로그램 로직 구사 가능
- 다른 JSP 페이지를 호출할 수 있음
- JSP 페이지 하나로 여러가지 언어의 웹페이지 생성
- DB로의 입력, 수정, 삭제, 조회
- XML 문서의 처리
- 문자열을 처리하는 함수 호출
JSTL Library
라이브러리 |
기능 | URI 식별자 |
접두어 |
코어 | 일반 프로그래밍 언어에서 제공하는 것과 유사한 변수 선언. 실행 흐름의 제어 기능을 제공, 다른 JSP 페이지로 제어를 이동하는 기능도 제공 |
http://java.sun.com/jsp/jstl/core |
c |
포매팅 |
숫자, 날짜, 시간을 포매팅하는 기능과 국제화, 다국어 지원 기능 제공 |
http://java.sun.com/jsp/jstl/fmt |
fmt |
데이터베이스 | DB data를 입력/수정/삭제/조회 |
http://java.sun.com/jsp/jstl/sql |
sql |
XML 처리 | XML 문서를 처리할 때 필요한 기능 제공 | http://java.sun.com/jsp/jstl/xml |
x |
함수 | 문자열을 처리하는 함수 제공 | http://java.sun.com/jsp/jstl/functions | fn |
* 라이브러리 사용 예 : <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
JSTL 설치
- JSTL은 웹 페이지에서 무료로 다운 받아 설치 가능
- http://jakarta.apache.org/ 의 좌측 Taglib 선택
- JSTL을 적용할 톰캣 내 프로젝트 폴더의 WEB-INF/lib에 설치
How to use Core Library
- <c:set> : 변수를 선언한 후 그 변수에 초기값을 대입함
. <c:set var ="변수 이름" value = "초기값">
ex) <c:set var = "sum" value = "${num1+num2}"/> 처럼 value attribute 값에는 EL식 사용 가능
ex) <c:set var = "PRICE" value = "!5000" scope ="request" /> 처럼 변수가 저장될 데이터 영역 지정 가능
- <c:remove> : 선언한 변수 삭제
. <c:remove var = "변수명" />
ex) <c:remove var = "code" scope ="request"/> : request 데이터 영역 안에 있는 "code" 변수 제거
- <c:if> : 커스텀 액션식 if문
ex) <c:if test="${num1 > num2}"> num1이 더 큽니다. </c:if>
. <c:if> 커스텀 액션의 attribute에 쓰는 조건식은 EL식 형태로 써야 하는 것이 기본이지만 true와 false라는 상수 값을 직접 기입할 수 있음
- <c:choose> : switch문과 하는 기능 유사. <c:when>과 <c:otherwise>를 같이 사용함. 각각 case와 default 역할을 함
ex)
<c:choose>
<c:when test = "${num == 0}">
하이요. <BR>
</c:when>
<c:when test = "${num == 1}">
방가 <BR>
</c:when>
<c:otherwise>
안녕요 <BR>
</c:otherwise>
<c:choose>
- <c:forEach> : for문에 해당하는 기능을 제공. 특정 HTML 코드를 일정 횟수만큼 반복해서 출력할 수 있음
. <c:forEach begin ="1" end ="10"> ~~~ </c:forEach> : 10번 반복해서 ~~~ 실행
ex) <c:forEach var = "cnt" begin = "1" end = "10" step = "2"> ${cnt} <BR> </c:forEach> : 1, 3, 5, 7, 9 출력. step 때문에 2씩 건너뛰어 출력됨
<c:forEach> 액션의 items attribute를 이용해서 처리할 수 있는 데이터 |
배열 java.util.Iterator 객체 java.util.Enumeration 객체 java.util.Map 객체 콤마로 구분된 항목들을 포함한 문자열 |
- <c:forTokens> : 문자열에 포함된 토큰을 분리해서 각각의 토큰에 대해 반복 처리를 수행하도록 만들어줌
. <c:forTokens var = "토큰을 대입할 변수" items = "토큰을 포함할 문자열" delims = " "> ${pet}<BR></c:forTokens> : " "는 구획문자
- <c:catch> : try 문과 같은 기능 수행
. <c:catch var = "익셉션 객체를 저장할 변수"> ~~~ </c:catch>
- <c:redirect> : 웹 자원과 다른 웹 서버에 있는 웹 자원을 호출할 수 있음
. <c:redirect url = "HTTP://~~~~~~" />
- <c:import> : 현재의 JSP 페이지에 다른 JSP 페이지의 결과를 포함시킴. JSP가 아닌 형식의 웹 페이지도 불러올 수 있는 메리트 존재
- <c:url> : URL을 저장하기 위한 변수의 선언에 사용
. <c:redirect url="http://~~~~"> <c:param name ="데이터 이름" value = "데이터 값" /> </c:redirect>
- <c:out> : 데이터를 출력할 때 사용
. <c:out value = "<h3>부두술사</h3>"/> -> 이렇게 하면 태그까지 그대로 표시되지만
. <c:out value = "<h3>부두술사</h3"> escapeXml = "false" /> -> 이렇게 하면 HTML태그로 인식됨
. <c:out value = "${str}" default = "No data"/> -> str값이 없으면 디폴트로 설정된 값 대신 출력
Formatting Library
- <fmt:formatDate> 날짜와 시각을 포맷함. 출력할 날짜와 시각을 java.util.Date 클래스 타입의 객체로 넘겨야 하기 때문에 먼저 이 클래스의 객체를 만들어야 함(Ex. Date date = new Date();)
Now.jsp |
<%@ page language="java" import="java.util.*" pageEncoding="EUC-KR"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %> <c:set var = "date" value = "<%= new Date()%>"/> <html> <head>
<title>현재 시각</title>
</head>
<body> [S] <fmt:formatDate value = "${date}" type = "both" dateStyle ="short" timeStyle = "short" /><br/> [M] <fmt:formatDate value = "${date}" type = "both" dateStyle ="medium" timeStyle = "medium" /><br/> [L] <fmt:formatDate value = "${date}" type = "both" dateStyle ="long" timeStyle = "long" /><br/> [F] <fmt:formatDate value = "${date}" type = "both" dateStyle ="full" timeStyle = "full" /><br/> [오늘의 날짜] <fmt:formatDate value = "${date}" type = "date" pattern = "yyyy/mm/dd (E)"/><br/> [현재의 시각] <fmt:formatDate value = "${date}" type = "time" pattern = "(a) hh:mm:ss" />
</body> </html> |
- <fmt:formatNumber> : 다양한 수치 표현 가능
NumberFormat.jsp |
<!--<%@ page language="java" import="java.util.*" pageEncoding="EUC-KR"%> --> <%@ page contentType = "text/html;charset = euc-kr" %> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %> <html> <head> <title>숫자 포맷</title></head> <body> 첫번째 수 : <fmt:formatNumber value = "1234500" groupingUsed = "true" /><br/> 두번째 수 : <fmt:formatNumber value = "3.14158" pattern = #.##" /><br/> 세번째 수 : <fmt:formatNumber value = "10.5" pattern = "#.00" /> <br/> 금액 : <fmt:formatNumber value = "1000000" type = "currency" currencySymbol = "\"/><br/> 퍼센트 : <fmt:formatNumber value = "0.99" type = "percent"/> </body></html> |
* 소스상으로는 문제가 되지 않는데 error 500이 출력됨. OS환경을 바꿔서 결과 봐야 할 듯.
- <fmt:setLocale> : 특정 지역에 맞게 데이터의 포맷을 설정
WorldFormat.jsp |
<%@ page language="java" import="java.util.*" pageEncoding="EUC-KR"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %> <c:set var ="date" value = "<%= new Date()%>"/> <html><head> <title>다른 나라의 포맷</title></head> <body> <h3>우리나라의 포맷</h3> <fmt:setLocale value = "ko_kr" /> 금액 : <fmt:formatNumber value = "100000" type = "currency"/><br/> 일시 : <fmt:formatDate value = "${date}" type = "both" dateStyle ="full" timeStyle = "full"/><br/>
<h3>미국의 포맷</h3> <fmt:setLocale value = "en_us" /> 금액 : <fmt:formatNumber value = "100000" type = "currency"/><br/> 일시 : <fmt:formatDate value = "${date}" type = "both" dateStyle ="full" timeStyle = "full"/><br/>
<h3>일본의 포맷</h3> <fmt:setLocale value = "ja_jp" /> 금액 : <fmt:formatNumber value = "100000" type = "currency"/><br/> 일시 : <fmt:formatDate value = "${date}" type = "both" dateStyle ="full" timeStyle = "full"/><br/>
<h3>중국의 포맷</h3> <fmt:setLocale value = "zh_HK" /> 금액 : <fmt:formatNumber value = "100000" type = "currency"/><br/> 일시 : <fmt:formatDate value = "${date}" type = "both" dateStyle ="full" timeStyle = "full"/><br/> </body> </html> |
* 중국 코드를 ch_cn으로 할 경우 이상하게 엔화로 출력됨. HK는 홍콩. TW는 타이완인 듯.
* 언어 코드는 ISO 639, 국가 코드는 ISO 3166을 따름.
* ISO 639 조회 : http://www.loc.gov/standards/iso639-2/php/English_list.php
* ISO 3166 조회 : http://www.iso.org/iso/country_codes/iso_3166_code_lists.htm
* [언어 코드_국가 코드] 의 조합(ex. ko_kr)
- <fmt:timeZone>, <fmt.setTimeZone> : 시간대마다 달라지는 날짜와 시각을 자동으로 계산하여 출력
. timeZone은 시작 태그와 끝 태그 사이에만 영향을 미침
. setTimeZone은 이 액션이 실행된 다음의 모든 코드에 영향을 미침
WorldTime.jsp |
<%@ page language="java" import="java.util.*" pageEncoding="EUC-KR"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %> <c:set var ="date" value = "<%= new Date()%>"/> <html><head> <title>세계시 프로그램</title></head> <body> 서울 : <fmt:formatDate value = "${date}" type = "both"/><br/> <fmt:timeZone value = "Asia/Hong_Kong"> 홍콩 : <fmt:formatDate value = "${date}" type = "both"/><br/> </fmt:timeZone> <fmt:timeZone value = "Europe/London"> 런던 : <fmt:formatDate value = "${date}" type = "both"/><br/> </fmt:timeZone> <fmt:timeZone value = "America/New_York"> 뉴욕 : <fmt:formatDate value = "${date}" type = "both"/><br/> </fmt:timeZone> </body> </html> |
NewWorldTime.jsp |
<%@ page language="java" import="java.util.*" pageEncoding="EUC-KR"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %> <c:set var ="date" value = "<%= new Date()%>"/> <html><head> <title>세계시 프로그램</title></head> <body> 서울 : <fmt:formatDate value = "${date}" type = "both"/><br/> <fmt:setTimeZone value = "Asia/Hong_Kong"/> 홍콩 : <fmt:formatDate value = "${date}" type = "both"/><br/> <fmt:setTimeZone value = "Europe/London"/> 런던 : <fmt:formatDate value = "${date}" type = "both"/><br/> <fmt:setTimeZone value = "America/New_York"/> 뉴욕 : <fmt:formatDate value = "${date}" type = "both"/><br/> </body> </html> |
* 이 소스로는 WorldTime이나 NewWorldTime이나 결과는 같음
'개발 > Web Development' 카테고리의 다른 글
web.xml 거치지 않고 Servlet 내에서 해결하기 (0) | 2012.08.28 |
---|---|
커스텀 액션 - 태그 파일 (0) | 2012.06.05 |
Standard Action (0) | 2012.05.31 |
Expression Language (0) | 2012.05.18 |
ServletContext (0) | 2012.05.15 |