自定义标签的详细使用讲解【上】
目录
一、前言
1.什么是自定义标签
2.自定义标签的两种类型
3.为什么要使用自定义标签
4.使用场景
二、自定义标签的使用
1自定义标签的生命周期
2.创建自定义标签
2.1.编写助手类
2.2.编写标签库的tld文件
2.3.jsp页面引用标签
2.4.总结
三、解析自定义标签
1.为什么要重写doStartTag方法?
2.自定义标签的工作流程
四、案例
1.模拟c标签中if标签
2.模拟c标签中的foreach标签
一、前言
1.什么是自定义标签
在了解什么是自定义标签之前,我们先了解什么是标签。
标签(Tag):是一种特殊的语言构造,通常用于在一些具有特定功能的语言中指定标记或元数据,从而实现一些特殊的效果或功能。很多与“ML”结尾的语言都是标记语言,比如:HTML,XML,XHTML,VML等等。标记语言与其他语言一样,也需要运行它们的环境,比如HTML的运行环境时浏览器,XML也要自己的解析和运行的环境。
自定义标签(Custom Tag):是指在JSP中,开发者自行定义的可扩展标记(Tag),用于扩展和增强JSP的功能。可以使用自定义标签可以实现一些自定义逻辑,如访问Web服务、执行数据库操作、生成HTML代码、进行数据处理等复杂操作;还可以实现基于标签的流程控制、数据模型、动态样式等功能。
2.自定义标签的两种类型
简单标签
指不包含主体内容的标签,简单标签的处理一般是基于标签的属性和参数,例如
、
标签体标签
是指包含主体内容的标签,标签体标签的处理需要对标签的主体内容进行解析和处理,例如
标签和 标签等。
3.为什么要使用自定义标签
1.易于维护和重用
自定义标签将复杂的逻辑封装在单一的标签中。这使得代码更易于维护和重用,可以将一些常用的逻辑封装在标签中,避免代码重复和冗余。
2.提高代码的可读性
通过使用自定义标签,可以将业务逻辑和代码标签化,从而提高代码的可读性和可维护性。标签化的代码更符合人类的思维模式,理解和调试也更为方便。
3.分离业务和呈现逻辑
使用自定义标签可以分离业务逻辑和呈现逻辑,帮助开发者更好地实现MVC(Model-View-Controller)设计模式,提高应用程序的可扩展性和重用性。
4.提高应用程序的性能
使用自定义标签可以将需要多次重复执行的代码封装在标签中,从而减少代码重复和冗余,提高应用程序的性能。
4.使用场景
我们在做Web项目的时候,肯定是多人开发,但是有很多的代码是相同的,为了减少代码冗余,我们就可以自定义标签,共大家使用,提高效率也方便维护。
二、自定义标签的使用
1自定义标签的生命周期
由图可知我们大致分为四个阶段
实例化阶段、初始化阶段、使用阶段和实例释放阶段
2.创建自定义标签
看图很难理解,所以我们接下来直接上代码。
模拟c标签中的out标签
2.1.编写助手类
package c;import java.io.IOException;import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;/*** 自定义标签继承BodyTagSupport 作用:用于在jsp页面输出内容* * @author Java方文山**/
public class OutTag extends BodyTagSupport {private String val;// out标签需要输出的属性值private String defaultVal;// out标签默认输出属性值public void setVal(String val) {this.val = val;}public void setDefaultVal(String defaultVal) {this.defaultVal = defaultVal;}// 重写doStartTag方法@Overridepublic int doStartTag() {// 因为要在页面输出内容,所以先获取out对象JspWriter out = this.pageContext.getOut();try {// 判断标签属性有无值if (this.val == null || "".equals(this.val)) {// 标签属性为空输出默认值out.print(this.defaultVal);} else {// 标签属性不为空输出标签属性值out.print(this.val);}} catch (IOException e) {e.printStackTrace();}// 跳过主体return SKIP_BODY;/** SKIP_BODY以后最后用这种写法来写(成员变量), 不然别的程序员看不懂你写的代码,利用成员变量更加理解以及维护代码。* */}}
2.2.编写标签库的tld文件
1.0 1.2 Simple Tags
/xw out c.OutTag empty val true true out标签val属性,用于输出val的值 defaultVal false false out标签,如val属性值为空,则输出该默认值
2.3.jsp页面引用标签
<%@page import="c.TestForeach"%>
<%@page import="c.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib prefix="xw" uri="/xw" %>
自定义标签
<%
request.setAttribute("name", "我是在作用域的文件,利用EL表达式获取");
%>
<%
request.setAttribute("x", null);
%>