Jsp(五)

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能...
    FTOLsXD阅读 343评论 1 2
  • JSP 基本结构JSP 页面组成:模板文本(HTML,XML,纯文本),JSP 元素;JSP 元素:脚本元素,指令...
    jslancer阅读 947评论 0 11
  • 表达式语言(Expression Language 简称EL) EL最初是定义在JSTL1.0规范中,在JSP2....
    清枫_小天阅读 878评论 0 4