Java Web Programming_5
Download
Report
Transcript Java Web Programming_5
Java Web Programming
5일차
Custom Tag란
•
•
•
사용자 정의 태그
useBean, param, setProperty 등의 미리 정의되어있는 태그를 액션 태그라
고 한다. 커스텀 태그는 액션 태그의 한계성을 극복하여 사용자가 특성에
맞게 스스로 태그를 설계
이렇게 필요한 태그의 특성, 태그 해석의 방식, 그리고 태그들을 모아 라이
브러리로 묶어 필요한 곳에 사용. 이를 Tag Library라고 한다.
자바 빈과 커스텀 태그
자바 빈
JSP 페이지의 내용을 조작할 수
없음
n 커스텀 태그에 비해 상대적으로
복잡한 처리과정
n 하나의 서블릿 클래스에
정의되어 다른 서블릿이나 JSP에
의해 사용됨
n JSP 1.0 스펙 이상에서 사용가능
n
커스텀 태그
n
n
n
n
JSP 페이지의 내용을 조작 가능
상대적으로 빈보다 다루기 쉬움
많은 자체 작업을 정의할 수 있음
JSP1.1 스펙 이상에서 사용가능
Custom Tag library의 구성
•
태그 핸들러 클래스(Tag Handler Class)
태그 핸들러 클래스(Tag Handler Class)는 태그의 의미와 행동을 정의하는
클래스로, JSP 페이지에서 커스텀 태그를 사용할 때 어떤 일을 할 것인지 정
의하고, 처리한다.
•
태그 라이브러리 서술파일(Tag Library Descriptor TLD)
TLD는 태그 라이브러리를 설명해주는 파일로, XML의 표준형식을 따르는
XML 문서로서, XML Element 이름과 태그의 구현을 연결시키는 역할을 한
다. 즉, JSP에서 태그가 호출되었을 때 그 태그를 처리하는 태그 핸들러로
연결시켜 주어 관련된 처리를 실행하게 한다.
•
태그를 사용하는 JSP 파일
커스텀 태그를 사용하는 JSP 파일로서, 태그를 사용하기 전에 taglib 지시자
로 태그의 위치와 접두어를 지정해야 한다.
태그 핸들러 클래스(Tag Handler Class)
•
Tag 인터페이스
Tag 인터페이스는 JSP 페이지와 태그 핸들러 사이를 연결하는 기본적인 프
로토콜과 메서드를 정의한다. 이것은 단순하고 기본적인 커스텀 태그를 구
현하기 위해 만들어졌으며, 커스텀 태그의 Body 부분은 건드리지 않는 것을
원칙으로 한다. 즉, Tag 인터페이스는 태그에 Body 부분이 없거나, Body 부
분을 그대로 나타내는 경우에 사용될 수 있다. Tag 인터페이스는 태그 핸들
러의 주기를 정의하며, 태그가 시작하고 끝날 때 호출되는 메서드들을 정의
하는데 사용한다.
•
BodyTag 인터페이스
BodyTag는 Tag 인터페이스를 상속한 인터페이스로 태그의 몸체를 다룰 수
있는 메서드를 제공한다. Tag 인터페이스가 제공하는 메서드 외에 부가적인
메서드를 제공합니다.
•
TagSupport 클래스
TagSupport는 Tag 인터페이스를 구현하는 클래스로, 새로운 태그 핸들러를
생성하는 기본이 되는 클래스입니다. Tag 인터페이스의 메서드 외에
setter,/getter 메서드 등, 태그를 다룰 때 유용하게 쓰일 수 있는 메서드들을
제공하고 있다.
•
BodyTagSupport 클래스
BodyTagSupport는 TagSupport 클래스를 상속 받고 BodyTag 인터페이스를
구현한 클래스. 이 클래스도 역시 상속 받고 구현된 것 이외에
getBodyContent 메서드등, 여러가지 유용한 메서드들을 가지고 있다. 많은
태그 핸들러들이 BodyTagSupport 클래스를 상속 받아서 몇 가지 소수의 메
서드만 재정의해 쓰는 방식으로 만들어 진다.
•
BodyContent 클래스
BodyContent는 JspWriter 클래스를 상속 받는 추상 클래스로서, 태그의 바
디부분을 처리한 것을 캡슐화하고 있는 클래스. 즉, BodyContent의 내용은
Body 부분 처리의 결과로, 그것을 핸들러가 이용할 수 있다. 따라서
BodyContent는 그 내용을 스트링으로 변환하거나, 읽거나, 지울 수 있는 메
서드를 가지고 있다.
<간단한 태그 핸들러>
HelloTag.java
package tags;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class HelloTag implements Tag {
PageContext pageContext;
Tag parent;
public int doStartTag() throws JspException{
try{
JspWriter out = pageContext.getOut();
out.write("Hello Tag!!!");
}catch(IOException e){}
return SKIP_BODY;
}
public int doEndTag() throws JspException{
return EVAL_PAGE;
}
public void release(){}
public void setPageContext(PageContext pg){
pageContext = pg;
}
public void setParent(Tag p){
parent = p;
}
public Tag getParent(){
return parent;
}
}
태그 라이브러리 서술파일(Tag Library Descriptor TLD)
noveltag.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>noveljsp</short-name>
<uri></uri>
<description>
novel jsp simple Hello Tag
</description>
<tag>
<name>hello</name>
<tag-class>tags.HelloTag</tag-class>
<description>say Hello~ </description>
</tag>
</taglib>
JSP에서 기본적인 태그의 사용
< 기본적인 커스텀 태그를 사용하는JSP>
hellotag.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ taglib uri ="noveltag.tld" prefix = "noveljsp" %>
<html><body>
<h1><noveljsp:hello /></h1>
</body></html>
속성을 가지는 태그
<속성 사용을 위한 태그 핸들러 >
WelcomeTag.java
package tags;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class WelcomeTag extends TagSupport {
private String name = "";
private String nation = "";
public int doStartTag() {
try{
JspWriter out = pageContext.getOut();
out.print(name + " from " + nation + "<br>");
out.print("welcome to Korea!!!");
}catch(IOException e){}
return SKIP_BODY;
}
public void setName(String name){
this.name = name;
}
public void setNation(String nation){
this.nation = nation;
}
}
noveltag.tld
<!—위에는 이미 정의된 부분 생략 -->
<tag>
<name>welcome</name>
<tag-class>tags.WelcomeTag</tag-class>
<description>say welcome~ </description>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
<attribute>
<name>nation</name>
<required>true</required>
</attribute>
</tag>
<!-- WelcomeTag를 위해 추가된 부분 -->
</taglib>
welcometag.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ taglib uri ="noveltag.tld" prefix = "noveljsp" %>
<html><body>
<h1><noveljsp:welcome name = "Alice" nation = "Wonderland"/></h1>
</body></html>
Body를 가지는 태그
<prefix:tagname>
body
<prefix:tagname>
doStartTag 메서드의 리턴 값
• SKIP_BODY : 바디의 내용 유무에 상관없이 무시
• EVAL_BODY_INCLUDE : 바디 내용을 포함 처리 가능하게 함
FontMagic.java
package tags;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class FontMagic extends TagSupport {
String color = "black";
String size = "3";
}
public int doStartTag() {
try{
JspWriter out = pageContext.getOut();
out.print("<font color="+color+" size = "+ size + ">");
}catch(IOException e){}
return EVAL_BODY_INCLUDE;
}
public int doEndTag(){
try{
JspWriter out = pageContext.getOut();
out.print("</font></br>");
}catch(IOException e){}
return EVAL_PAGE;
}
public void setColor(String color){
this.color = color;
}
public void setSize(String size){
this.size = size;
}
noveltag.tld
<! ... ... 앞부분 생략 -->
<tag>
<name>fontmagic</name>
<tag-class>tags.FontMagic</tag-class>
<description>adjust font color and font size </description>
<attribute>
<name>color</name>
<required>false</required>
</attribute>
<attribute>
<name>size</name>
<required>false</required>
</attribute>
</tag>
<!-- 여기까지 FontMagic을 위해 추가된 부분 -->
</taglib>
fontmagic.jsp
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ taglib uri ="noveltag.tld" prefix = "noveljsp" %>
<html><body>
<noveljsp:fontmagic>
디폴트 값이군요.
</noveljsp:fontmagic>
<noveljsp:fontmagic color="blue" size="5">
파란색에 5크기입니다.
</noveljsp:fontmagic>
<noveljsp:fontmagic color="red" size="7">
빨강색에 7크기입니다.
</noveljsp:fontmagic>
</body></html>
표현 언어란
표현 언어(Expression Language)는 값을 표현하는 데 사용되는 새로운
스크립트 언어로서 JSP의 기본 문법을 보완하는 역할을 한다
[표현 언어가 제공하는 기능]
JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
집합 객체에 대한 접근 방법 제공
수치 연산, 관계 연산, 논리 연산자 제공
자바 클래스 메소드 호출 기능 제공
표현언어만의 기본 객체 제공
JSP 2.0 Programming
19
Syntax
표현 언어의 표현 방법
${expr}
expr - 표현언어가 정의한 문법에 따라 값을 표현하는 식
Example
<jsp:include page="/module/${skin.id}/header.jsp" flush="true" />
<b>${sessionScope.member.id}</b>님 환영합니다.
표현언어는 JSP의 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외
한 나머지 부분에서 사용될 수 있으며, 표현식을 통해서
표현식보다 편리하게 값을 출력할 수 있다.
JSP 2.0 Programming
20
표현 언어의 기본 객체
기본 객체
설명
pageContext
JSP의 page 기본 객체와 동일하다.
pageScope
pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객
체.
requestScope
request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체.
sessionScope
session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체.
applicationScope
application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체.
param
요청 파라미터의 <파라미터이름, 값> 매핑을 저장한 Map 객체. 파라미터 값
의 타입은 String 으로서, request.getParameter(이름)의 결과와 동일하다.
paramValues
요청 파라미터의 <파라미터이름, 값배열> 매핑을 저장한 Map 객체. 값의 타
입은 String[] 으로서, request.getParameterValues(이름)의 결과와 동일하
다.
header
요청 정보의 <헤더이름, 값> 매핑을 저장한 Map 객체.
request.getHeader(이름)의 결과와 동일하다.
headerValues
요청 정보의 <헤더이름, 값 배열> 매핑을 저장한 Map 객체.
request.getHeaders(이름)의 결과와 동일하다.
cookie
<쿠키 이름, Cookie> 매핑을 저장한 Map 객체. request.getCookies()로 구
한 Cookie 배열로부터 매핑을 생성한다.
initParam
초기화 파라미터의 <이름, 값> 매핑을 저장한 Map 객체.
application.getInitParameter(이름)의 결과와 동일하다.
JSP 2.0 Programming
21
표현
언어의
기본
객체
사용
예
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<%
request.setAttribute("name", "최범균");
%>
<html>
<head><title>EL Object</title></head>
<body>
요청 URI: ${pageContext.request.requestURI} <br>
request의 name 속성: ${requestScope.name} <br>
code 파라미터: ${param.code}
pageContext.getRequest()
.getRequestURI()
reqeust.getAttribute("name")
request.getParameter("code")
</body>
</html>
JSP 2.0 Programming
22
자바 메소드 호출하기: 클래스
작성
※ 표현언어에서 호출할 메소드는 static 메소드이어야 한다.
Example
package madvirus.util;
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateUtil {
private static SimpleDateFormat formatter =
new SimpleDateFormat("yyyy-MM-dd");
}
public static String format(Date date) {
return formatter.format(date);
}
JSP 2.0 Programming
23
자바 메소드 호출하기: TLD 파일
Example
작성
<?xml version="1.0" encoding="euc-kr" ?>
<taglib ... version="2.0">
...
<function>
<description>Date 객체 포맷팅</description>
<name>dateFormat</name>
EL에서 사용할 이름
<function-class>
madvirus.util.DateUtil
메소드를 정의하고 있는 클래스의 이름
</function-class>
<function-signature>
java.lang.String format( java.util.Date )
함수의 시그너쳐
</function-signature>
</function>
</taglib>
JSP 2.0 Programming
24
자바 메소드 호출하기: web.xml
Example
에 TLD 내용 추가
<?xml version="1.0" encoding="euc-kr"?>
<web-app ... version="2.4">
...
<taglib>
<taglib-uri>
/WEB-INF/tlds/el-functions.tld
</taglib-uri>
<taglib-location>
/WEB-INF/tlds/el-functions.tld
</taglib-location>
</taglib>
</web-app>
JSP 2.0 Programming
25
자바 메소드 호출하기: EL에서
Example
메소드 호출
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page session="true" %>
<%@ taglib prefix="elfunc" uri="/WEB-INF/tlds/el-functions.tld" %>
web.xml의 <taglib-uri> 태그에 정의한 이름
<%
java.util.Date today = new java.util.Date();
request.setAttribute("today", today);
%>
<html>
<head><title>EL 함수 호출</title></head>
<body>
오늘은 <b>${elfunc:dateFormat(today) }</b> 입니다.
TLD의 <name> 태그에 정의한 이름
EL에서 메소드 호출
</body>
</html>
JSP 2.0 Programming
26
표현 언어의 주요 사용법
• 함수호출을 통한 값의 포매팅
– ${elfunc:dateFormat(date) }
• 액션 태그나 커스텀 태그의 값으로 사용
– <jsp:include page="/layout/${layout.moduleName}.jsp" />
• 기본 객체 영역에 저장된 값의 출력
– ${requestScope.name} vs
<%= request.getAttribute("name") %>
JSP 2.0 Programming
27
표현 언어 비활성화(1): web.xml
Code
에 비활성화 옵션
<?xml version="1.0" encoding="euc-kr"?>
<web-app ... version="2.4">
...
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
지정한 패턴에 속하는 JSP는
표현 언어가 비활성화된다.
</web-app>
JSP 2.0 Programming
28
JSTL이란?
JSTL(JSP Standard Tag Library)은 JSP 페이지에서 논리적인 판단,
반복문의 처리, 데이터베이스 등의 처리를 하는 코드를 깔끔하게 작성하기
위해서 작성한 표준화된 커스텀 태그이다.
<%
JSTL을 사용함으로써 스크립트를
if (list.size() > 0) {
사용할 때의 복잡한 코드를 깔끔하게
for (int i = 0 ; i < list.size() ; i++) {
작성할 수 있게 된다.
Data data = (Data) list.get(i);
%>
<%= data.getTitle() %>
...
<%
<c:if test="!empty ${list}">
}
<c:foreach varName="data" list="${list}">
} else {
%>
${data.title}
데이터가 없습니다.
</c:foreach>
<%
</c:if>
}
<c:if test="empty ${list}">
%>
데이터가 없습니다.
</c>
JSP 2.0 Programming
29
JSTL이 제공하는 태그의 종류
라이브러리
하위 기능
접두어
관련URI
코어
변수지원
흐름 제어
URL 처리
c
http://java.sun.com/jsp/jstl/core
XML
XML 코어
흐름 제어
XML 변환
x
http://java.sun.com/jsp/jstl/xml
국제화
지역
메시지 형식
숫자 및 날짜 형식
fmt
http://java.sun.com/jsp/jstl/fmt
데이터베이스
SQL
sql
http://java.sun.com/jsp/jstl/sql
함수
콜렉션 처리
String 처리
fn
http://java.sun.com/jsp/jstl/functions
JSP 2.0 Programming
30
코어 태그
기능분류
변수 지원
흐름 제어
URL 처리
기타 태그
태그
설명
set
JSP에서 사용될 변수를 설정한다.
remove
설정한 변수를 제거한다.
if
조건에 따라 내부 코드를 수행한다.
choose
다중 조건을 처리할 때 사용된다.
forEach
콜렉션이나 Map의 각 항목을 처리할 때 사용된다.
forTokens
구분자로 분리된 각각의 토큰을 처리할 때 사용된다.
import
URL을 사용하여 다른 자원의 결과를 삽입한다.
redirect
지정한 경로로 리다이렉트한다.
url
URL을 재작성한다.
catch
예외 처리에 사용된다.
out
JspWriter에 내용을 알맞게 처리한 후 출력한다.
JSP 2.0 Programming
31
코어태그: 변수 지원 태그 - set,
변수 설정: 지정한 영역에 변수를 생성한다.
remove
Syntax
<c:set var="varName" scope="session" value="someValue" />
<c:set var="varName" scope="request">
some Value
</c:set>
• var - EL에서 사용될 변수명
• scope - 변수값이 저장될 영역(page, request, session, application)
• value - 변수값
변수 제거
Syntax
<c:remove var="varName" scope="request" />
JSP 2.0 Programming
32
코어태그: 변수 지원 태그 - 프로퍼
Syntax
티, 맵의 처리
<c:set target="${some}" property="propertyName" value="anyValue" />
some 객체가 자바빈일 경우: some.setPropertyName(anyvalue)
some 객체가 맵(map)일 경우: some.put(propertyName, anyValue);
• target -<c:set>으로 지정한 변수 객체
• property - 프로퍼티 이름
• value - 새로 지정할 프로퍼티 값
JSP 2.0 Programming
33
코어
태그:
흐름제어
태그
if
Syntax
<c:if test="조건">
...
...
</c:if>
test의 조건이 true이면
몸체 내용을 처리한다.
Example
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="true">
무조건 수행<br>
</c:if>
<c:if test="${param.name == 'bk'}">
name 파라미터의 값이 ${param.name} 입니다.<br>
</c:if>
<c:if test="${18 < param.age}">
당신의 나이는 18세 이상입니다.
</c:if>
JSP 2.0 Programming
34
코어 태그: 흐름제어 태그 - choose
Syntax
<c:choose>
<c:when test="조건1" >
...
</c:when>
<c:when test="조건2" >
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>
조건1이 true일 때 실행
조건2가 true일 때 실행
앞의 <c:when>의 조건들이 모두
만족하지 않을 때에 실행된다.
JSP 2.0 Programming
35
코어 태그:
흐름제어
태그
forEach
배열 및 Collection에 저장된 요소를 차례대로 처리한다.
Syntax
<c:forEach var="변수" items="아이템" [begin="시작번호"] [end="끝번호"]>
...
${변수}
...
</c:forEach>
•
•
•
•
var - EL에서 사용될 변수명
items - 배열, List, Iterator, Enumeration, Map 등의 Collection
begin - items에 지정한 목록에서 값을 읽어올 인덱스의 시작값
end - item에 지정한 목록에서 값을 읽어올 인덱스의 끝값
item이 Map인 경우 변수에 저장되는 객체는 Map.Entry이다. 따라서, 변수값을 사용할 때는 ${변수.key}와
${변수.value}를 사용해서 맵에 저장된 항목의 <키, 값> 매핑에 접근할 수 있다.
JSP 2.0 Programming
36
코어 지정한
태그:
흐름제어
태그
import
URL에 연결하여 결과를 지정한 변수에 저장한다.
Syntax
<c:import url="URL" charEncoding="캐릭터인코딩" var="변수명" scope="범위" >
<c:param name="파라미터이름" value="파라미터값" />
</c:import>
•
•
•
•
•
url - 결과를 읽어올 URL
charEncoding - 읽어온 결과를 저장할 때 사용할 캐릭터 인코딩
var - 읽어온 결과를 저장할 변수명
scope - 변수를 저장할 영역
<c:param> 태그는 url 속성에 지정한 사이트에 연결할 때 전송할 파라미터를 입력한다.
Example
<c:import url="http://media.daum.net/"
charEncoding="euc-kr"
var="daumNews"
scope="request" >
<c:param name="_top_G" value="news" />
</c:import>
JSP 2.0 Programming
37
코어 태그:
흐름제어
태그
url
URL을 생성해서 변수에 저장한다.
Syntax
<c:url var="변수명" value="재작성할URL" scope="저장범위" >
<c:param name="파라미터이름" value="파라미터값" />
</c:url>
• var - 생성한 URL이 저장될 변수명
• value - 생성할 URL
• scope - 변수를 저장할 범위 지정.
Example
<c:url var="url1" value="../shopping.do" />
<c:url var="url2" value="/shopping.do" >
<c:param name="Add" value="isdn-001" />
</c:url>
<c:url var="url3" value="http://localhost:8080/jstl/setTag.jsp" />
JSP 2.0 Programming
38
코어
태그:
흐름제어
태그
redirect
지정한 페이지로 리다이렉트한다. response.sendRedirect()와 비슷
Syntax
<c:redirect url="리다이렉트할URL">
<c:param name="파라미터이름" value="파라미터값" />
</c:redirect>
• url - 리다이렉트 URL
• <c:param>은 리다이렉트할 페이지에 전달할 파라미터 지정
Example
<c:redirect url="/ifTag.jsp">
<c:param name="name" value="bk" />
</c:redirect>
JSP 2.0 Programming
39
코어 태그:
기타
태그
out
JspWriter에 데이터를 출력한다
Syntax
<c:out value="value" escapeXml="{true|false}" default="defaultValue" />
• value - JspWriter에 출력할 값을 나타낸다. 일반적으로 value 속성의 값은 String과 같은
문자열이다. 만약 value의 값이 java.io.Reader의 한 종류라면 out 태그는 Reader로부터 데
이터를 읽어와 JspWriter에 값을 출력한다.
• escapeXml - 이 속성의 값이 true일 경우 아래 표와 같이 문자를 변경한다. 생략할 수 있
으며, 생략할 경우 기본값은 true이다.
• default - value 속성에서 지정한 값이 존재하지 않을 때 사용될 값을 지정한다
[표] escapeXml 속성이 true일 경우 변환되는 문자
문자
변환된 형태
<
<
>
>
&
&
'
'
"
"
JSP 2.0 Programming
40
코어 태그
태그:
기타
태그
catch
몸체에서 발생한 예외를 변수에 저장한다.
Syntax
<c:catch var="exName">
...
예외가 발생할 수 있는 코드
...
</c:catch>
...
${exName} 사용
에러가 발생하면 에러가 exName 변수에 저장된다.
• var - 예외 객체를 저장할 변수명
JSP 2.0 Programming
41
국제화 태그
기능분류
로케일 지정
메시지 처리
숫자 및 날짜
포맷팅
태그
설명
setLocale
Locale을 지정한다.
requestEncoding
요청 파라미터의 캐릭터 인코딩을 지정한다.
bundle
사용할 번들을 지정한다.
message
지역에 알맞은 메시지를 출력한다.
setBundle
리소스 번들을 읽어와 특정 변수에 저장한다.
formatNumber
숫자를 포맷팅한다.
formatDate
Date 객체를 포맷팅한다.
parseDate
문자열로 표시된 날짜를 분석해서 Date 객체로 변환
parseNumber
문자열로 표시된 날짜를 분석해서 숫자로 변환
setTimeZone
시간대 정보를 특정 변수에 저장한다.
timeZone
시간대를 지정한다.
JSP 2.0 Programming
42
국제화 태그: 로케일 지정 -
setLocale,
setLocale: 국제화 태그에 적용될 로케일을
지정한다.
requestEncoding
Syntax
<fmt:setLocale value="로케일" scope="영향미치는범위" />
• value - Locale을 지정한다. 두 글자로 된 언어 코드를 반드시 지정해주어야 하며, 두 글
자로 된 국가 코드를 추가로 지정할 수 있다.
• scope - 지정한 Locale이 영향을 미치는 범위를 지정한다.
requestEncoding: 요청 파라미터의 인코딩을 지정
Syntax
<fmt:requestEncoding value="캐릭터인코딩" />
• value - 캐릭터 인코딩
JSP 2.0 Programming
43
국제화 태그: 메시지 태그 bundle이 지정한 리소스 번들로부터 메시지를 읽어와 출력한다.
bundle, message
Syntax
<fmt:bundle basename="리소스번들" prefix="기본키접두어">
...
• basename - 리소스 번들의 이름
<fmt:message key="키값1" />
• prefix - message 태그의 key 속성의 값
...
앞에 자동으로 붙게 될 문자열
<fmt:message key="키값2" />
• key - 리소스 번들에 저장된 메시지 키 값
...
</fmt:bundle>
* bundle 태그의 몸체에 중첩되어 사용된다.
JSP 2.0 Programming
44
국제화 태그: 메시지 태그 setBundle이 지정한 리소스 번들로부터 메시지를 읽어와 출력한다.
setBundle, message
Syntax
<fmt:setBundle var="변수명" basename="리소스번들" />
...
<fmt:message bundle="${변수명}" key="키값" />
•
•
•
•
var - 리로스 번들을 저장할 변수명
basename - 리소스 번들의 이름
bundler - 참조할 리소스 번들 변수명
key - 리소스 번들에 저장된 메시지 키 값
* bundler 속성을 사용하면, message 태그가 bundle 태그의 몸체에 중첩될 필요가 없다.
JSP 2.0 Programming
45
함수
JSTL은 EL에서 사용할 수 있는 함수를 제공한다
Syntax
${fn:함수명(인자 목록)}
[표] JSTL이 제공하는 주요 함수
함수
설명
length(obj)
obj가 List와 같은 Collection인 경우 저장된 항목의 개수를 리턴
하고, obj가 문자열일 경우 문자열의 길이를 리턴한다.
toUpperCase(str)
str을 대문자로 변환한다.
toLowerCase(str)
str을 소문자로 변환한다.
substring(str, idx1, idx2)
str.substring(idx1, idx2)의 결과를 리턴한다. idx2가 -1일 경우
str.substring(idx1)과 동일하다.
trim(str)
str 좌우의 공백문자를 제거한다.
replace(str, src, dest)
str에 있는 src를 dest로 변환한다.
split(str1, str2)
str2로 명시한 글자를 기준으로 str1을 분리해서 배열로 리턴한다.
escapeXml(str)
XML의 객체 참조에 해당하는 특수 문자를 처리한다. 예를 들어,
'&'는 '&'로 변환한다.
JSP 2.0 Programming
46