博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【自定义标签开发】01-标签简介和开发第一个标签
阅读量:5950 次
发布时间:2019-06-19

本文共 3179 字,大约阅读时间需要 10 分钟。

自定义标签简介
自定义标签主要用于移除Jsp页面中的java代码。
要使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤:
1.编写一个实现Tag接口的java类,把页面java代码移到这个java类中(标签处理器类)。
2.编写标签库描述(tld)文件,在tld文件中把标签处理器类描述成一个标签。
我们接下来写一个小例子来对自定义标签的开发做一个入门了解
快速入门:使用标签输出客户机IP
我们在MyEclipse中创建一个名为JspTest的Web project,然后改写它的index.jsp,来实现输出客户机IP。
如果我们不使用标签的话,我们免不了使用脚本代码来实现我们的功能:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>      My JSP 'index.jsp' starting page          您的ip为:    <%    	String ip = request.getRemoteAddr();    	out.print(ip);     %>  
将JspTest工程部署到tomcat运行之后效果:
但是这里直接写了java代码,不符合我们的mvc规范,所以我们要移除java代码,用简单的标签来替代它。
我们上面说了开发自定义标签库的步骤,我们按照那个步骤来开发一个显示用户ip的标签。
jsp技术中有一个tag接口,下面有如下的方法:

doEndTag()执行开始标签执行的方法(如<c:foreach>)

doStartTag()执行结束标签执行的方法(如</c:foreach>)

getParent()得到标签的父标签(包裹本标签的上一级标签)

release()释放资源的方法,标签结束时执行,会释放标签运行的时候所占用的资源。

setPageContext(PageContext pc)把页面的PageContext传递过来(最重要的方法,它会把页面的所有数据传递过来,包括Servlet的八大隐式对象,这样我们就可以做我们想处理的任何事)

setParent(Tag t)设置标签的父标签(包裹本标签的上一级标签)
以上就是整个tag接口的说明文档。
我们开发标签的主要逻辑就要写在doStartTag()和doEndTag()方法。
但是如果我们实现了tag接口,就不单单要实现doStartTag()和doEndTag()方法,其它的方法也要去实现,那么这个时候我们不想改变原有方法的内容,这个时候sun公司给我们提供了tag默认的实现类供我们使用,有以下方法:
BodtTagSupport/TagAdapter/TagSupport
我们下面常用的就是TagSupport
我们接下来做开发, 来移除我们刚刚写的获取用户ip的代码。
我们创建一个类,去集成实现了Tag接口的TagSupport类:
package org.zyg.web.tag;import javax.servlet.jsp.tagext.TagSupport;public class ViewIPTag extends TagSupport {}
然后我们实现其中的doStartTag()方法,然后将显示用户ip的逻辑写进去:
package org.zyg.web.tag;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;public class ViewIPTag extends TagSupport {	@Override	public int doStartTag() throws JspException {				//Tag接口的setPageContext方法已经将PageContext从页面拿过来		//我们在这里获取PageContext		HttpServletRequest request=(HttpServletRequest)this.pageContext.getRequest();		//获取JspWriter对象		JspWriter out=this.pageContext.getOut();						String ip = request.getRemoteAddr();    	try {			out.print(ip);		} catch (IOException e) {			throw new RuntimeException(e);		}				return super.doStartTag();	}}
现在我们就已经成功的页面的java代码成功的移到一个标签处理类中了,jsp类中就不需要出现这段java代码了。
接下来就是我们要为这个标签处理类定义一个标签名了。
我们要创建一个tld文件,我们在WEB-INF/lib下新建一个zyg.tld文件。
内容我们不知道怎么写?可以查看tomcat给我们的规范,在tomcat的apache-tomcat-6.0.24\webapps\examples\WEB-INF\jsp2文件夹下,有一个jsp2-example-taglib.tld文件,我们将它的头和尾抄过来:
接下来我们将我们的标签处理类包装成一个标签:
A tag library exercising SimpleTag handlers.
1.0
zyg
http://blog.csdn.net/acmman
viewIP
org.zyg.web.tag.ViewIPTag
empty

接下来我们在页面使用这个标签,在使用标签前,首先在jsp页面中导入标签:

<%@taglib uri="http://blog.csdn.net/acmman" prefix="zyg" %>

其中uri就是我们在tld文件中设置的绑定路径,prefix就是标签的前缀,代表我们使用了zyg.tld标签库的标签。
然后我们写一个“<zyg”,按一下Alt+/就可以看到自动提示,这个时候我们的标签成功引入了:
代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@taglib uri="http://blog.csdn.net/acmman" prefix="zyg" %>      My JSP 'index.jsp' starting page          您的ip为:    
我们重新发布一下web工程,在浏览器中访问:

我们虽然看到和以前一样的效果,但是内部的技术全都换了。至此我们阐述了一个简单的自定义标签的开发过程。

转载请注明出处:

你可能感兴趣的文章
显示字符串子程序
查看>>
JS prototype 属性
查看>>
javascript 操作DOM元素样式
查看>>
常用的Powershell命令
查看>>
单列的用法的网址:
查看>>
Unicode字符编码表
查看>>
C++ sqlite3解决中文排序问题
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
查看>>
[水]三个数学的小技巧题
查看>>
mysql中查看数据库的版本,什么版本
查看>>
[leetcode-342-Power of Four]
查看>>
MongoDB3.0 创建用户
查看>>
2017-2018-1 20155319 《信息安全系统设计基础》第3周学习总结
查看>>
express 3.0.x 中默认不支持flash() 的解决方法
查看>>
uva-111-dp
查看>>
算法学习1——矩阵转置
查看>>
Tcl与Design Compiler (九)——综合后的形式验证
查看>>
跨页数据传递
查看>>
Linux查看系统负载(CPU和MEM考虑)
查看>>