Java

来源:互联网 发布:淘宝仓库宝贝删除 编辑:程序博客网 时间:2024/05/18 14:26

使用标签库的好处包括以下几个方面: 
- 分离JSP页面的内容和逻辑,简化了Web开发; 
- 开发者可以创建自定义标签来封装业务逻辑和显示逻辑; 
- 标签具有很好的可移植性、可维护性和可重用性; 
- 避免了对Scriptlet(小脚本)的使用(很多公司的项目开发都不允许在JSP中书写小脚本)

自定义JSP标签包括以下几个步骤: 
- 编写一个Java类实现实现Tag/BodyTag/IterationTag接口(开发中通常不直接实现这些接口而是继承TagSupport/BodyTagSupport/SimpleTagSupport类,这是对缺省适配模式的应用),重写doStartTag()、doEndTag()等方法,定义标签要完成的功能 
- 编写扩展名为tld的标签描述文件对自定义标签进行部署,tld文件通常放在WEB-INF文件夹下或其子目录中 
- 在JSP页面中使用taglib指令引用该标签库

下面是一个自定义标签库的例子。

步骤1 - 标签类源代码TimeTag.java:

package com.jackfrued.tags;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;public class TimeTag extends TagSupport {    private static final long serialVersionUID = 1L;    private String format = "yyyy-MM-dd hh:mm:ss";    private String foreColor = "black";    private String backColor = "white";    public int doStartTag() throws JspException {         SimpleDateFormat sdf = new SimpleDateFormat(format);         JspWriter writer = pageContext.getOut();         StringBuilder sb = new StringBuilder();         sb.append(String.format("<span style='color:%s;background-color:%s'>%s</span>",             foreColor, backColor, sdf.format(new Date())));         try {           writer.print(sb.toString());         } catch(IOException e) {           e.printStackTrace();         }         return SKIP_BODY;      }    public void setFormat(String format) {        this.format = format;    }    public void setForeColor(String foreColor) {        this.foreColor = foreColor;    }    public void setBackColor(String backColor) {        this.backColor = backColor;    }}
步骤2 - 编写标签库描述文件my.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"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    version="2.0">    <description>定义标签库</description>    <tlib-version>1.0</tlib-version>    <short-name>MyTag</short-name>    <tag>        <name>time</name>        <tag-class>com.jackfrued.tags.TimeTag</tag-class>        <body-content>empty</body-content>        <attribute>            <name>format</name>            <required>false</required>        </attribute>        <attribute>            <name>foreColor</name>        </attribute>        <attribute>            <name>backColor</name>        </attribute>    </tag></taglib>
步骤3 - 在JSP页面中使用自定义标签:

<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="my" uri="/WEB-INF/tld/my.tld" %><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE html><html>  <head>    <base href="<%=basePath%>">    <title>首页</title>    <style type="text/css">        * { font-family: "Arial"; font-size:72px; }    </style>  </head>  <body>    <my:time format="yyyy-MM-dd" backColor="blue" foreColor="yellow"/>  </body></html>

提示:如果要将自定义的标签库发布成JAR文件,需要将标签库描述文件(tld文件)放在JAR文件的META-INF目录下。

原创粉丝点击