jsp中自定义标签用法实例分析
网络编程 2021-07-05 11:23www.168986.cn编程入门
这篇文章主要介绍了jsp中自定义标签用法,以实例形式较为详细的分析了jsp自定义标签的功能、定义及具体实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了jsp中自定义标签用法。分享给大家供大家参考。具体如下
这里简单的写了一个自定义标签,自己定义标签的好处就是在jsp页面中可以使用自己定义的功能,完全与Java代码分离
1. tld文件如下
是要写×.tld文件,当项目随着服务器启动的时候,会检查项目中有没有tld文件。
写的tld文件
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun./xml/ns/javaee" xmlns:xsi="http://.w3./2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun./xml/ns/javaee http://java.sun./xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!-- 定义版本 --> <tlib-version>1.0</tlib-version> <!-- 定义名字 --> <short-name>apsliyuan</short-name> <!-- 定义uri --> <uri>http://my.oschina./aps</uri> <!-- 定义自己的类 --> <tag> <!-- name 就是在jsp中显示的标签名字,<aps:hellowTag/> --> <name>hellowTag</name> <!-- 自己写的标签类的完整路径 --> <tag-class>.itcast.apsliyuan.tag.HellowtTag</tag-class> <!-- jsp中主题中是不是要显示内容,有四个属性, 如果为empty的话。在jsp页面中标签就不能定义自己的内容了,否则会报 Servlet.service() for servlet jsp threw exception .apache.jasper.JasperException: /index.jsp(12,8) Aording to TLD, tag aps:hellowTag must be empty, but is not 异常 --> <body-content>JSP</body-content> </tag> <!-- 这里没有写属性,有时间补上 --> <tag> <name>ApsliyuanTag</name> <tag-class>.itcast.apsliyuan.tag.ApsliyuanTag</tag-class> <body-content>JSP</body-content> </tag> </taglib>
2. 自定义标签类java代码如下
//自定义标签的类 package .itcast.apsliyuan.tag; 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 HellowtTag extends TagSupport{ / / private static final long serialVersionUID = 1781703371130382609L; @Override public int doStartTag() throws JspException { // TODO Auto-generated method stub JspWriter out = pageContext.getOut(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { out.print(format.format(new Date())); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return EVAL_BODY_INCLUDE; } @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub JspWriter out = pageContext.getOut(); try { out.print("<br/> <hr/>标签执行完毕了"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return EVAL_PAGE; } }
3. jsp引入自己定义标签代码如下
//jsp中引入自己定义的标签 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://my.oschina./aps" prefix="aps" %> <%@taglib uri="http://java.sun./jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://.w3./TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>index.jsp</title> </head> <body> 现在的时间是<aps:hellowTag> </aps:hellowTag><br/> <hr/> 我爱的人是 <aps:ApsliyuanTag/> </body> </html>
4. TagSupport代码如下
//看看TagSupport中的源代码, 这个是适配器模式 public class TagSupport implements IterationTag, Serializable { public static final Tag findAncestorWithClass(Tag from, // TCK signature test fails with generics @SuppressWarnings("unchecked") Class klass) { boolean isInterface = false; if (from == null || klass == null || (!Tag.class.isAssignableFrom(klass) && !(isInterface = klass.isInterface()))) { return null; } for (;;) { Tag tag = from.getParent(); if (tag == null) { return null; } if ((isInterface && klass.isInstance(tag)) || klass.isAssignableFrom(tag.getClass())) return tag; else from = tag; } } / Default constructor, all subclasses are required to define only a public constructor with the same signature, and to call the superclass constructor. This constructor is called by the code generated by the JSP translator. / public TagSupport() { } / Default processing of the start tag, returning SKIP_BODY. @return SKIP_BODY @throws JspException if an error ours while processing this tag @see Tag#doStartTag() / public int doStartTag() throws JspException { return SKIP_BODY; } / Default processing of the end tag returning EVAL_PAGE. @return EVAL_PAGE @throws JspException if an error ours while processing this tag @see Tag#doEndTag() / public int doEndTag() throws JspException { return EVAL_PAGE; } / Default processing for a body. @return SKIP_BODY @throws JspException if an error ours while processing this tag @see IterationTag#doAfterBody() / public int doAfterBody() throws JspException { return SKIP_BODY; } // Actions related to body evaluation / Release state. @see Tag#release() / public void release() { parent = null; id = null; if( values != null ) { values.clear(); } values = null; } / Set the nesting tag of this tag. @param t The parent Tag. @see Tag#setParent(Tag) / public void setParent(Tag t) { parent = t; } / The Tag instance most closely enclosing this tag instance. @see Tag#getParent() @return the parent tag instance or null / public Tag getParent() { return parent; } / Set the id attribute for this tag. @param id The String for the id. / public void setId(String id) { this.id = id; } / The value of the id attribute of this tag; or null. @return the value of the id attribute, or null / public String getId() { return id; } / Set the page context. @param pageContext The PageContext. @see Tag#setPageContext / public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; } / Associate a value with a String key. @param k The key String. @param o The value to associate. / public void setValue(String k, Object o) { if (values == null) { values = new Hashtable<String, Object>(); } values.put(k, o); } / Get a the value associated with a key. @param k The string key. @return The value associated with the key, or null. / public Object getValue(String k) { if (values == null) { return null; } else { return values.get(k); } } / Remove a value associated with a key. @param k The string key. / public void removeValue(String k) { if (values != null) { values.remove(k); } } / Enumerate the keys for the values kept by this tag handler. @return An enumeration of all the keys for the values set, or null or an empty Enumeration if no values have been set. / public Enumeration<String> getValues() { if (values == null) { return null; } return values.keys(); } // private fields private Tag parent; private Hashtable<String, Object> values; / The value of the id attribute of this tag; or null. / protected String id; // protected fields / The PageContext. / protected PageContext pageContext; }
doStartTag的返回值
在doStartTag返回的值决定的body部分的数据如何显示。
两个返回值
0 – SKIP_BODY – 常量。不显示body。
1-EVAN_BODY_INCLUDE ;包含body部分的数据,正常显示。
3在doEndTag也有两个返回值
决定后面的页面部分是否显示
SKIP_PAGE : 不再显示后面的页面部分。
EVAL_PAGE : 显示后面的page部分。
希望本文所述对大家的JSP程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程