【JavaWeb探究】自定义JSP标签(二)
来源:互联网 发布:dede直播源码网站 编辑:程序博客网 时间:2024/05/22 14:53
上篇博客我们已经介绍了自定义JSP标签的创建过程以及Servlet容器是如何处理自定义标签的,这篇博客我们从理论出发,从实践入手,继续介绍自定义JSP标签。
在开始之前,我要问一个问题,自己想过没有,为什么要使用自定义标签呢?我们现在所开发的系统中就运用到了自定义JSP标签,那么问一下自己,为什么要用自定义标签呢?自定义JSP标签是通过自定义标签实现类来实现复杂的、可重复利用的功能,它可以简化JSP页面,提高代码的复用性。比如,如果你的页面需要一个下拉框,但是这个下拉框是从字典表取值,正常的处理办法可能要每次都从字典表中去查询;如果采用自定义JSP标签的方式,就可以将这一系列的事统统放在JSP标签的实现类中来实现。
接下来,我们来手动创建一个自定义标签。这篇博客,我们先从简单的入手,创建一个简单的JSP标签,下篇博客我们再提高难度,创建一个下拉框的自定义标签。首先,按照我们上篇博客创建自定义标签的步骤,先创建一个处理自定义标签的处理类。
<span style="font-size:12px;">import javax.servlet.jsp.JspTagException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;public class MyTagTest extends TagSupport {private String tagShow;/** * <p>Description:构造函数</p> * @param tagShow */public MyTagTest(String tagShow) {super();this.tagShow = tagShow;}/** * 标签开始方法 */public int doStartTag() throws JspTagException{return super.EVAL_BODY_INCLUDE;}/** * 标签结束方法 */public int doEndTag() throws JspTagException{JspWriter printOut = pageContext.getOut();try{System.out.println(printOut);}catch (Exception e) {e.printStackTrace();}return super.SKIP_BODY;}/** * 释放资源 */public void release(){super.release();}/*********************get/set方法****************************/public String getTagShow() {return tagShow;}public void setTagShow(String tagShow) {this.tagShow = tagShow;}}</span>
我们可以看到实现类继承了TagSupport,TagSupport类的主要属性:
》》》1.parent属性:代表嵌套了当前标http://write.blog.csdn.net/postedit/48806519签的上层标签的处理类
》》》2.jsp容器在调用doStartTag或者doEndTag方法前,会先调用setPageContext和setParent方法,设置pageContext和parent。因此在标签处理类中可以直接访问pageContext变量。
》》》3.在TagSupport的构造方法中不能访问pageContext成员变量,此时的JSP容器还没有调用setPageContext方法对pageContext进行初始化。
额外再说一点TagSupport的内容。TagSupport类提供了两个处理标签的方法
public int doStartTag() throws JspExceptionpublic int doEndTag() throws JspException
当JSP容器遇到自定义标签的起始标志时就会调用doStartTag()方法,该方法返回一个整数值,用来决定程序的后续流程。
A.Tag.SKIP_BODY:表示?>…之间的内容被忽略;
B.Tag.EVAL_BODY_INCLUDE:表示标签之间的内容被正常执行。
但当JSP容器遇到自定义标签的结束标志时,就会调用doEndTag()方法,该方法也返回一个整数值,用来决定程序的后续流程。A.Tag.SKIP_PAGE:表示立刻停止执行网页,网页上未处理的静态内容和JSP程序均被忽略任何已有的输出内容立刻返回到客户的浏览器上。
B.Tag_EVAL_PAGE:表示按照正常的流程继续执行JSP网页。
说完了TagSupport,我想说一下上面处理类的成员变量。可能我们这个自定义标签的内容比较简单,不容易看出来,我不知道大家看出来没有,一般自定义标签有哪些自定义的属性,这些属性就作为成员变量出现在该标签的处理类中,并且跟上get/set方法。所以要创建一个自定义标签的处理类,要具备如下资源:
》》》1.必须要引入如下资源:
<span style="font-size:14px;">import javax.servlet.jsp.*; import javax.servlet.http.*; import java.util.*; import java.io.*;</span>
》》》2.要继承TagSupport类并覆盖doStartTag()和doEndTag()方法。
》》》3.从ServeltContext对象中获取java.util.Properties对象
》》》4.从Properties对象中获取key对应的属性值
》》》5.对获取的属性进行相应的处理并输出结果
接下来,继续创建一个xxx.tld文件。在WEB-INF下创建一个tlds文件夹,在该文件夹下创建一个myTagTest.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>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>hh</short-name> <uri>/myTagTest</uri> <info>自定义JSP标签</info><tag> <description> Display hello </description> <name>hello</name> <tag-class>com.wdl.taglib.MyTagTest</tag-class> <attribute> <name>tagShow</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute></tag></taglib>
然后在web.xml中配置taglib元素。
<taglib><taglib-uri>/MyTagTest</taglib-uri><taglib-location>/WEB-INF/tlds/myTagTest.tld</taglib-location></taglib>
最后,我们在页面中引用自定义标签。
<%@ taglib uri="/MyTagTest" prefix="hh"%><hh:hello showTag="Hello"/>
到最后,我们创建的自定义JSP标签就创建完成了,因为上篇文章对原理性的内容已经做过讲解,所以这里不再赘述。下篇博客我们继续创建一个自定义JSP标签,下篇博客见!
- 【JavaWeb探究】自定义JSP标签(二)
- 【JavaWeb探究】自定义JSP标签(一)
- 【JavaWeb探究】自定义JSP标签(三)
- javaweb jsp自定义标签
- JavaWeb总结二十三、jsp自定义标签开发入门
- jsp自定义标签(二)
- JavaWeb之JSP自定义标签
- JavaWeb之 JSP:自定义标签
- JSP自定义标签(二):JSP传统标签
- JSP自定义标签实例(二)
- JSP自定义标签(二)- 传递属性
- JavaWeb -- Jsp 自定义标签的使用
- JavaWeb学习心得之JSP自定义标签
- JavaWeb学习心得之自定义简单标签(二)
- javaweb学习总结(二十三)——jsp自定义标签开发入门
- javaweb学习总结(二十三)——jsp自定义标签开发入门
- javaweb学习总结(二十三)——jsp自定义标签开发入门
- javaweb学习总结(二十三)——jsp自定义标签开发入门
- 10 java.lang.ThreadLocal
- [IOS 开发] iOS 如何将日期字符串转成NSDate
- c# b/s 网站中截取网页图片
- python中的enumerate
- Spring Batch学习之路- 简介(一)
- 【JavaWeb探究】自定义JSP标签(二)
- hello world
- Oracle中单引号的使用
- 利用JDBC根据表结构生成ModelClass
- Simplify Path
- Objective-C---5---字典,集合
- CooradicatoarLayout 介绍
- B树、B+树、AVL树、红黑树
- Swift学习-属性(十)