XML 标签
JSTL XML标签库提供了创建和操作XML文档的标签。
引用XML标签库的语法如下:
<%@ taglib prefix="x"
uri="http://java.sun.com/jsp/jstl/xml" %>
在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下:
XercesImpl.jar下载地址: http://www.apache.org/dist/xerces/j/
xalan.jar下载地址: http://xml.apache.org/xalan-j/index.html
|标签|描述|
|---|---|
|<x:out>
|与<%= ... >,类似,不过只用于XPath表达式
|
|<x:parse>
|解析 XML 数据
|
|<x:set>
|设置XPath表达式
|
|<x:if>
|判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
|
|<x:forEach>
|迭代XML文档中的节点
|
|<x:choose>
|<x:when>和<x:otherwise>的父标签
|
|<x:when>
|<x:choose>的子标签,用来进行条件判断
|
|<x:otherwise>
|<x:choose>的子标签,当<x:when>判断为false时被执行
|
|<x:transform>
|将XSL转换应用在XML文档中
|
|<x:param>
|与<x:transform>共同使用,用于设置XSL样式表
|
使用JSP格式化XML
这个是XSLT样式表style.xsl文件:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="books">
<table border="1" width="100%">
<xsl:for-each select="book">
<tr>
<td>
<i><xsl:value-of select="name"/></i>
</td>
<td>
<xsl:value-of select="author"/>
</td>
<td>
<xsl:value-of select="price"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
这个是main.jsp文件:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<html>
<head>
<title>JSTL x:transform Tags</title>
</head>
<body>
<h3>Books Info:</h3>
<c:set var="xmltext">
<books>
<book>
<name>Padam History</name>
<author>ZARA</author>
<price>100</price>
</book>
<book>
<name>Great Mistry</name>
<author>NUHA</author>
<price>2000</price>
</book>
</books>
</c:set>
<c:import url="http://localhost:8080/style.xsl" var="xslt"/>
<x:transform xml="${xmltext}" xslt="${xslt}"/>
</body>
</html>
运行结果如下:
运行结果
JSTL函数
JSTL包含一系列标准函数,大部分是通用的字符串处理函数。
引用JSTL函数库的语法如下:
<%@ taglib prefix="fn"
uri="http://java.sun.com/jsp/jstl/functions" %>
fn函数的语法如下:
${fn:XXX()}
|标签|描述|
|---|---|
|fn:contains()
|测试输入的字符串是否包含指定的子串
|
|fn:containsIngnoreCase()
|测试输入的字符串是否包含指定的子串,大小写不敏感
|
|fn:endsWith()
|测试输入的字符串是否以指定的后缀结尾
|
|fn:escapeXml()
|跳过可以作为XML标记的字符
|
|fn:indexOf()
|返回指定字符串在输入字符串中出现的位置
|
|fn:join()
|将数组中的元素合成一个字符串然后输出
|
|fn:length()
|返回字符串长度
|
|fn:replace()
|将输入字符串中指定的位置替换为指定的字符串然后返回
|
|fn:split()
|将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
|
|fn:startsWith()
|测试输入字符串是否以指定的前缀开始
|
|fn:substring()
|返回字符串的子集
|
|fn:substringAfter()
|返回字符串在指定子串之后的子集
|
|fn:substringBefer()
|返回字符串在指定子串之前的子集
|
|fn:toLowerCase()
|将字符串中的字符转为小写
|
|fn:toUpperCase()
|将字符串中的字符转为大写
|
|fn:trim()
|移除首位的空白符
|
JSP 自定义标签
自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。
JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。
你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。
创建"Hello"标签
接下来,我们想创建一个自定义标签叫作<ex:Hello>,标签格式为:
<ex:Hello />
要创建自定义的JSP标签,你首先必须创建处理标签的Java类。所以,让我们创建一个HelloTag类,如下所示:
//该类需要继承SimpleTagSupport,并重写doTag方法
public class HelloTag extends SimpleTagSupport{
@Override
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}
创建如下标签库:WEB-INF\custom.tld。
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<display-name>myTag</display-name>
<tlib-version>1.1</tlib-version>
<short-name>mt</short-name>
<!--该参数可以当作jsp页面标签引入时对应的uri参数,根据此参数找到该自定义标签.也可以是该文件的路径-->
<uri>http://com.hb/tld/myTag</uri>
<tag>
<name>Hello</name>
<tag-class>creatMyJspTag.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
接下来,我们就可以在JSP文件中使用Hello标签:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- <%@ taglib uri="http://com.hb/tld/myTag" prefix="m" %> --%>
<%@ taglib uri="/WEB-INF/custom.tld" prefix="m" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>main</title>
</head>
<body>
<m:Hello/>
</body>
</html>