上接JSP总结(二)
Ⅲ.XML标签库 <x:…>
1.XML(Extensible Markup Language)可扩展标记语言,与HTML(Hypertext Markup Language)的区别是:
<1>所有标签必须关闭,而HTML中如<hr>不关闭;
<2>大小写敏感;
<3>必须正确嵌套,否则不能解析;
<4>必须有一个根元素;
<5>属性值必须加引号.
如:book.xml文件
<?xml version="1.0"encoding="UTF-8"?>
<books>
<book isbn="23421">
<title>Java</title>
<author>z3</author>
<price>23</price>
</book>
<book isbn="23432">
<title>Javascript</title>
<author>w5</author>
<price>20</price>
</book>
</books>
2.Xpath:在XML文档中查找信息的语言。
3.在.jsp上xml文档,有以下几种方式:
<1>外部导入:
<!-- 外部导入xml文档 -->
<c:import url="books.xml"var="xmldoc"></c:import>
<!-- 解析xml -->
<x:parse doc="${xmldoc}"var="doc"></x:parse>
<!-- 返回结果集中的第一个元素的字符串 -->
<x:out select="$doc//book"/> <!-- 注意此处不能加大括号 -->
<2>直接写在解析标签内部:
<x:parse var="doc">
<%@ include file="books.xml"%>
</x:parse>
<!-- 返回结果集中的第一个元素的字符串 -->
<x:out select="$doc//book"/> <!--注意此处不能加大括号 -->
Ⅳ.Function标签库 <fn:…>
如:
${fn:toLowerCase("USA")}<br>
${fn:substring('I am astudent',2,4)}<br> <!--取从位置2开始到位置4之前的字符串 -->
${fn:substringAfter('Iam a student',"am")}<br> <!-- 取am后的字符串 -->
<%
String[] arr={"a","b","c"};
request.setAttribute("arr", arr);
%>
${fn:join(arr,":")} <br> <!-- 将字符数组内的字符之间用指定的符号连接起来-->
${fn:escapeXml('<a>fd</a>')}<br> <!-- 转义为实体 -->
Ⅴ.国际化<fmt:…>
1、国际化(internationalization,简称”i18n”):程序员要做的
本地化(localization,简称”l10n”):用户
2、要唯一标示一个文化区域:语言+国家(区域)
如:中国(内地) zh_CN
美国 en_US
英国 en_GB
3、国际化的步骤:
<1>新建相应国家(地区)的属性文件(.properties),建在src文件夹下,添加属性名(name)和属性值(value).
如:
新建msg_zh_CN.properties和msg_en_US.properties文件,
.jsp文件相应代码如下:
<%
request.setAttribute("now", new Date());
%>
<!-- 设置区域 -->
<fmt:setLocale value="en_US"/>
<!-- 设置基本名:包名+属性文件的前缀名 -->
<fmt:bundle basename="i18n.msg">
<!—读取相应的属性值-à
<fmt:message key="login.name">
</fmt:message><br>
<fmt:message key="login.time">
<fmt:param value="${now}"></fmt:param>
</fmt:message>
</fmt:bundle>
<h1>简化key的书写</h1>
<fmt:setLocale value="${fn:substringBefore(header['Accept-Language'],',')}"/>
<fmt:bundle basename="i18n.msg"prefix="login">
<fmt:message key=".name">
</fmt:message><br>
<fmt:message key=".time">
<fmt:param value="${now}"></fmt:param>
</fmt:message>
</fmt:bundle>
<h1>第二种设置资源文件的方法 setBundle</h1>
<fmt:setBundle var="bu" basename="i18n.msg"/>
<fmt:message key="login.name"bundle="${bu}">
</fmt:message><br>
<fmt:message key="login.time"bundle="${bu }">
<fmt:param value="${now}"></fmt:param>
</fmt:message>
4.国际化数字
<!-- 货币 -->
<fmt:setLocale value="zh_CN"/>
<fmt:formatNumber value="2000"type="currency"></fmt:formatNumber><br>
<fmt:setLocale value="en_GB"/>
<fmt:formatNumber value="2000"type="currency"></fmt:formatNumber><br>
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="2000"type="currency"></fmt:formatNumber><br>
</body>
<!-- 数字 -->
<fmt:setLocale value="zh_CN"/>
<fmt:formatNumber value="2000"type="number"></fmt:formatNumber><br>
<fmt:setLocale value="en_GB"/>
<fmt:formatNumber value="2000"type="number"></fmt:formatNumber><br>
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="2000"type="number"></fmt:formatNumber><br>
<!-- 百分比 -->
<fmt:setLocale value="zh_CN"/>
<fmt:formatNumber value="2000"type="percent"></fmt:formatNumber><br>
<fmt:setLocale value="en_GB"/>
<fmt:formatNumber value="2000"type="percent"></fmt:formatNumber><br>
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="2000" type="percent"></fmt:formatNumber><br>
5.国际化日期
<%
request.setAttribute("now", new Date());
%>
<fmt:setLocale value="zh_CN"/>
<fmt:formatDate value="${now}"type="both" pattern="yyyy年mm月dd日 hh:mm:ss"/><br>
<fmt:setLocale value="en_GB"/>
<fmt:formatDate value="${now}"type="both" /><br>
<fmt:setLocale value="en_US"/>
<fmt:formatDate value="${now}"type="both" /><br>