最近在深圳的某家知名企业上班,接触到支付的系统。系统中的框架都是公司自己架构的,所以包括jsp页面中用到的标签也是自定义的,对于不了解JSP自定义标签的同事来说,会觉得公司的技术太牛了,但是当你学习了JSP自定交标签之后,会不会这样认为,就看你自己了。下面笔者将讲解JSP的自定义标签,主要是讲JSP2的自定义标签。
1) 开发自定义标签处理类
2) 建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库可包含多个标签
3) 在JSP文件中使用自定义标签
1) 创建标签类HelloWorldTag.java.这个类要继承一个父类javax.servlet.jsp.tagext.SimpleTagSupport.,同时,标签的要求如下:
(a)如果标签类包含属性,每个属性都有对应的getter和setter方法
(b)重写doTag()方法,这个方法负责生成页面内容
public class HelloWorldTag extends SimpleTagSupport { // 重写doTag()方法,该方法为标签生成页面内容 public void doTag()throws JspException, IOException { // 获取页面输出流,并输出字符串 getJspContext().getOut().write("Hello World " + new java.util.Date()); } }
2) 建立TLD文件
TLD文件也就是标签库文件,所以标签库的根元素是taglib,它可是以包含有多个tag子元素。在T omcat8.0的webapps\examples\WEB-INF\jsp2下有jsp2-example-taglib.tld文件,这是个TLD文件的范例。下面是一个mytaglib.tld,将其放到web的WEB/路径下。
<?xml version="1.0" encoding="GBK"?> <taglib xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>mytaglib</short-name> <!-- 定义该标签库的URI --> <uri>http://www.linjw.taglib/mytaglib</uri> <!-- 定义第一个标签 --> <tag> <!-- 定义标签名 --> <name>helloWorld</name> <!-- 定义标签处理类 --> <tag-class>com.linjw..HelloWorldTag</tag-class> <!-- 定义标签体为空 --> <body-content>empty</body-content> </tag> </taglib>
3) 使用标签库
(a) 使用标签库主要是两个方面:
Ø 导入标签库:使用taglib编译指令导入标签库,就是将标签库和指定前缀关联起来。
Ø 使用标签:在JSP页面中使用自定义标签
(b) 使用taglib的语法格式如下:
<%@ taglib uri=”tagliburi” prefix=”tagPrefix”%>
(c)使用标签的语法格式如下:
<tagPrefix:tagname tagAttribute=”tagValue”…>
<tagBody/>
</tagPrefix:tagname>
(d)下面是helloWorldTag.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <!-- 导入标签库,指定mytag前缀的标签, 由URI为http://www.linjw.taglib/mytaglib的标签库处理 --> <%@ taglib uri="http:// /www.linjw.taglib/mytaglib " prefix="mytag"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>自定义标签示范</title> <meta name="website" content="http://www.crazyit.org" /> </head> <body bgcolor="#ffffc0"> <h2>下面显示的是自定义标签中的内容</h2> <!-- 使用标签 ,其中mytag是标签前缀,根据taglib的编译指令, mytag前缀将由URI为http:/ /www.linjw.taglib/mytaglib的标签库处理 --> <mytag:helloWorld/><br/> </body> </html>