J2EE之自定义标签库的使用01(详情解答)

您所在的位置:网站首页 jsp页面导入java包 J2EE之自定义标签库的使用01(详情解答)

J2EE之自定义标签库的使用01(详情解答)

2023-06-27 23:49| 来源: 网络整理| 查看: 265

J2EE之jsp自定义标签01 前言

自定义标签可以轻松地为不同的应用程序应用于不同的JSP页面,从而提高JSP页面的可重用性和可维护性。所以今天由我来分享一些有关jsp自定义标签相关的知识,让我们根据下面的思维导图一起来了解吧。

在这里插入图片描述

1 了解jsp自定义标签 1.1 概念:

JSP自定义标签是一种自定义的JSP标签,它允许开发人员将Java代码片段封装成一个可复用的标签,从而在JSP页面上实现更复杂的逻辑和功能。JSP页面中的自定义标签可以和HTML标签或其他JavaServer Pages (JSP) 标签混合使用。

1.2 作用: 提高代码的可重用性和可维护性。通过JSP自定义标签,可以将页面分离为视图、控制器等模块,简化JSP页面的代码结构,减少代码重复,提高代码的可维护性。实现更复杂的逻辑和功能。JSP自定义标签可以封装Java代码,实现更复杂的逻辑和功能,同时提高JSP页面的灵活性和扩展性。简化JSP页面的开发和维护。使用JSP自定义标签可以把逻辑代码从JSP页面中移出,从而简化JSP页面的开发和维护,提高代码的可读性和可维护性。提高页面的可扩展性。通过自定义标签,可以方便地扩展页面的功能,为后续开发提供了更好的扩展的基础。降低了耦合度。通过自定义标签,不同的代码模块可以通过标签处理类之间进行数据传递和交互,从而降低了应用程序代码间的耦合度,使代码更具有可重用性和可维护性。 1.3 特点: 可扩展性:JSP自定义标签是一种可扩展标签,它允许开发人员将Java代码片段封装成一个可复用的标签,从而实现更复杂的逻辑和功能。可扩展性:JSP自定义标签是一种可扩展标签,它允许开发人员将Java代码片段封装成一个可复用的标签,从而实现更复杂的逻辑和功能。灵活性:JSP自定义标签的使用方式非常灵活,可以与HTML标签或其他JSP标签混合使用,且其标识符可以自定义。解耦合性:通过JSP自定义标签,不同的代码模块可以通过标签处理类之间进行数据传递和交互,从而降低了应用程序代码间的耦合度。可维护性:JSP自定义标签的使用,可以降低程序的复杂度和代码的冗余程度,便于开发人员进行程序的维护和修改。 1.4 jsp自定义标签分类 标签类实例空标签例如:br、hrui标签例如:input、table控制标签例如:if、foreach数据标签例如:out标签 1.5 标签的书写格式 标签体 2. jsp自定义标签的开发和使用步骤 2.1 jsp开发自定义标签的步骤: 创建Java包:在Servlet容器的 /WEB-INF/classes 目录中创建一个Java包。包名应该与你的标签描述文件的uri属性的值相匹配。创建标签处理类:在刚才创建的Java包中创建一个类,类名应该与标签描述文件中定义的标签名称相同。该类必须扩展TagSupport类并实现doStartTag()、doEndTag()和doAfterBody()方法之一或全部。创建标签描述符文件:在 WEB-INF 目录下创建一个 XML 文件,该文件应该包含完整的自定义标签描述符定义,包括标签名称、映射URI、属性和标签处理类等信息。在 JSP 页面中使用标签:在 JSP 页面中包含刚刚创建的标签描述符,并调用你自定义的标签名称并设置标签属性。当 JSP 页面被处理时,自定义标签处理类中的相应方法将被调用。安装自定义标签库:将标签描述符文件复制到 WEB-INF/tlds 目录下,并且在 JSP 页面中包含标签描述符文件。发布应用程序并测试:部署你的应用程序并运行它以确保标签库已经正确安装并在 JSP 页面中正常运行。 2.2 jsp自定义标签的使用:

1.导入标签库:在 JSP 页面中的 指令中导入标签库。指令的格式如下:

其中,prefixName 是前缀名,tagLibraryURI 是库的 URL。

2.使用自定义标签:在 JSP 页面中调用自定义标签,格式如下:

其中,prefixName 是前缀名,tagName 是自定义标签的名称,attribute1 和 attribute2 是自定义标签的属性名,value1 和 value2 是自定义标签的属性值。

3.关闭标签:在 JSP 页面中使用 语法来关闭标签。示例如下:

4.显示结果:自定义标签的结果将在 JSP 页面中显示。

总之,要使用自定义标签,你需要知道自定义标签库的前缀和 URL。然后,你可以使用标签名称和属性来调用标签,并在 JSP 页面中显示标签的结果。

2.3 案例展示(y:out标签) 2.3.1 创建一个标签助手类(OuutTag.java) package com.YX.JSP.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; /*** * 自定义标签助手类 继承BodyTagSupport类说明此类是jsp自定义标签的助手类 * * @author 86158 * */ public class OuutTag extends BodyTagSupport { private String val; private String defaultVal; // 分别获取两个属性的get和set的方法 public String getVal() { return val; } public void setVal(String val) { this.val = val; } public String getDefaultVal() { return defaultVal; } public void setDefaultVal(String defaultVal) { this.defaultVal = defaultVal; } @Override // 用于和对方法是否编写的和继承的父类一致 public int doStartTag() throws JspException {// 抛出异常处理 // 实例化回显工具类,将指定的数值输出到页面上 // pageContext是页面上下文对象,用户和jsp共享数据 JspWriter out = this.pageContext.getOut(); try { if (this.val == null || this.val.equals("")) {// 判断传输到页面的值是否为空,为空则输出默认值到页面上 // 利用JspWriter对象将默认值输出到页面上 out.println(this.defaultVal); } else { // 利用JspWriter对象将传输值输出到页面上 out.println(this.val); } } catch (IOException e) { // 如果异常,在控制台抛出异常提示 throw new JspException("out标签异常", e); } return SKIP_BODY;// 返回SKIP_BODY } } 2.3.2 编写 tld文件,(必须放在 WEB-INF同目录或WebContext目录下)(示例YXmvc.tld) DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> 1.0 1.2 Simple Tags /YX ouut com.YX.JSP.OuutTag empty val true true out标签val属性,用于输出val的值 defaultVal false false out标签,如val属性值为空,则输出该默认值 2.3.3 新建一个jsp文件引入所写的标签 自定义标签

页面显示结果

在这里插入图片描述

3. jsp自定义标签生命周期 3.1 图解:

在这里插入图片描述

3.2 阶段:

1.加载阶段(Loading Phase):当JSP页面被请求时,容器会读取该页面对应的标签库文件,检查其中所有的自定义标签,并将它们编译成Java类。这个过程只会在第一次请求时执行一次。

2.初始化阶段(Initialization Phase):在加载完所有的标签类后,容器会对这些类进行初始化,根据标签的不同实现类的初始化也会不同。

3.执行阶段(Execution Phase):当页面请求需要执行自定义标签时,容器会使用相应的标签处理器,通过调用标签处理器的相应方法来执行标签。

4.销毁阶段(Destroy Phase):当JSP页面的请求完成后,容器会销毁所有与该页面相关的资源,包括初始化过的标签类。在这个阶段,可以对自定义标签的属性和内部对象进行清理操作,以释放系统资源。

3.3 返回值 返回值返回值说明SKIP_BODY跳过主体EVAL_BODY_INCLUDE计算标签主体内容并输出EVAL_BODY_AGAIN再计算主题一次EVAL_PAGE计算页面的后续部分SKIP_PAGE跳过页面的后续部分 3.4 开发场景

如图示

在这里插入图片描述

doStartTag()----->doEndTag()场景一般用于像上面的out标签

doStartTag()------->doAfterBody()场景一般用于像if标签----------->doEndTag()

doStartTag()------->doAfterBody(循环)----------->doEndTag()场景一般用于像foreach的标签。

4. 自定义的if标签 4.1 编写if自定义标签助手类 package com.YX.JSP.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; /** * 标签助手类(if标签) * @author 86158 * */ public class IfTag extends BodyTagSupport{ private boolean test;//定义一个属性代表if标签判断的结果 // 获取set的方法 public void setTest(boolean test) { this.test = test; } // 编写doStartTag方法 @Override public int doStartTag() throws JspException { System.out.println("=========doStartTag======"); if (this.test) {//结果为true就执行计算后面的语句体 return EVAL_BODY_INCLUDE; } return SKIP_BODY; } //后面的方法方便看到if标签的一个生命周期 @Override public int doAfterBody() throws JspException { System.out.println("=========doAfterBody======"); return super.doAfterBody(); } @Override public int doEndTag() throws JspException { System.out.println("=========doAfterBody======"); return super.doEndTag(); } } 4.2 在.tld文件中添加if标签 DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> 1.0 1.2 Simple Tags /YX if com.YX.JSP.tag.IfTag JSP test true true 4.3 在jsp页面中引入if标签 ![if标签控制台输出](C:\Users\86158\Desktop\截图\jsp自定义标签01\if标签控制台输出.png) 自定义标签 测试text结果是为true 测试text结果是为true

页面输出结果

在这里插入图片描述

控制台输出结果

在这里插入图片描述

5. 自定义set标签和out标签

out标签2.3案例演示中包含了

5.1 新建一个set标签助手类和out标签助手类 set标签助手类 package com.YX.JSP.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; /** * Set标签助手类 * 数据标签,存储数据 * 作用:page.Context,request,session,application * * 要存储数据以键值对的形式存储,分析得来两个标签属性 * @author 君易--鑨 * */ public class SetTag extends BodyTagSupport{ private String var;//set标签要存入的属性名 private Object value;//set标签要存入的属性值 // 获取set、get方法 public String getVal() { return var; } public void setVal(String val) { this.var = val; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } @Override public int doStartTag() throws JspException { pageContext.setAttribute(var, value); return super.doStartTag(); } } out标签助手类 package com.YX.JSP.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; /** * out标签助手类 * @author 君易--鑨 * */ public class OutTag extends BodyTagSupport{ private Object value;//页面要输出的值 // 获取set和get方法 public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } // 编写doStartTag方法 @Override public int doStartTag() throws JspException { // 获取输出流对象 JspWriter out = pageContext.getOut(); try { // 向页面输出对象值 out.print(value); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return super.doStartTag(); } } 5.2 在后缀名.tld中添加set和out标签 set com.YX.JSP.tag.SetTag JSP var true false value true true out com.YX.JSP.tag.OutTag JSP value true true 5.3 在jsp页面中运用 自定义标签

页面输出结果

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3