JSP定义标签

本文详细介绍了JSP自定义标签的开发和使用步骤,包括标签语言特点、自定义标签生命周期、开发助手类、创建TLD文件以及各种自定义数据标签的实例,旨在提高开发效率。
摘要由CSDN通过智能技术生成

JSP定义标签

一.jsp标签语言特点

<开始标签 属性=“属性值”>标签体</结束标签>
例如:

<b:set var="name" value="zs"></b:set>

空标签:

<br/> <hr/>

开始标签和结束标签:

<body></body>

还有我们的 “c”指令标签

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

要使用“C”指令标签的话要到jar包:(如下图)
在这里插入图片描述
自定义jsp标签的意义: 便捷自己的开发,能够根据自己的需求来调整标签的功能,动态的实现一些功能,提高开发效率。
了解一下jsp标签的生命周期:
在这里插入图片描述

1.1. doStartTag()方法的返回值:通常可以取两个值
1.2. EVAL_BODY_INCLUDE——包含标记体,本例中要编写自结束标记所以不使用该值;
1.3. SKIP_BODY——跳过标记体,即不处理标记体,开发自结束标记应该使用该值。
1.4. doEndTag()方法的返回值:通常可以取两个值:
1.5. SKIP_PAGE——返回这个值,则终止页面执行;
1.6. EVAL_PAGE——返回该值则处理完当前标记后,JSP 页面中止运行。

二. 自定义标签的开发及使用步骤

(1)首先我们先写一个助手类,
思路: 我们先建一个class 名字比如(domTag)然后继承BodyTagSupport
然后我们在这个类里面写属性、这个类只写了一个属性test, 标签属性必须和助手类的属性对应,然后我们在这个类还有调用get/set方法。然后我们要调用3个方法:
doStartTag() 开始标签
doAfterBody() 主体部分
doEndTag() 结束标签;

package com.bowen.jsp;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class DemoTag extends BodyTagSupport {
   

//序列号的作用是方便对象序列化(序列化实际上就是将对象按照特定的规则持续化到硬盘)
	private static final long serialVersionUID = 7418230126172807851L;
      private String test;
      
	
	public String getTest() {
   
		return test;
	}

	public void setTest(String test) {
   
		this.test = test;
	}

	 @Override
 public int doStartTag() throws JspException {
   
  // TODO Auto-generated method stub
  System.out.println("------------doStartTag-----------");
  return super.doStartTag();
 }

 @Override
 public int doAfterBody() throws JspException {
   
  // TODO Auto-generated method stub
    System.out.println("----------doAfterBody----------");
  return super.doAfterBody();
 }

 @Override
 public int doEndTag() throws JspException {
   
  // TODO Auto-generated method stub
  System.out.println("-----------doEndTag-------");
  return super.doEndTag();
 }

	
}

(2)创建标签库描述文件(tld),添加自定义标签的配置
注意: tld文件必须保存到WEB-INF目录或其子目录
接下来我们来看看我写的z.tld文件(自己命名):
这个z.tld文件里面有一个属性是助手类定义的:test属性。

<?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>bowen 1.1 core library</description>
  <display-name>bowen core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>c</short-name>
  <uri>/bowen</uri>

  

  <tag>
 <!-- 填写的是标签中的标签名 -->
    <name>demo</name>
    <!-- 标签对应后台助手 -->
    <tag-class>com.bowen.jsp.DemoTag</tag-class>
    <!-- 标签类别 -->
    <body-content>JSP</body-content>
    <attribute>
    <!-- 自定义标签中属性 -->
        <name>test</name>
        <!-- 属性是否必填 -->
        <required>true</required>
        <!-- 是否支持表达式 EL表达式、ognl表达式-->
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>

 

</taglib>

(3)我们开始写jsp页面
思路: 首先我们要导包,导入我们自己写的标签库 ,然后我们可以在里面写 <z:demo>了。这个是有方法体的,我们先执行一下这个。如果有方法体他会调用 doAfterBody() 主体部分。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="z" uri="/bowen" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jsp1</title>
</head>
<body>
 <z:demo test="xxx">标签类别</z:demo>   
 <select></select>
</body>
</html>

结果如下:
在这里插入图片描述
然后我们写一个没有标签体的

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="z" uri="/bowen" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jsp1</title>
</head>
<body>
 <z:demo test="xxx">标签类别</z:demo>   
 <select></select>
</body>
</html>

结果如下:
它不会调用doAfterBody() 主体部分
在这里插入图片描述

三.数据标签

(1)set 这个数据标签
(2)我们用一个setTag这个类来举例,当然这个类也称为助手类
1 创建一个标签助手类(继承BodyTagSupport)
标签属性必须助手类的属性对应、且要提供对应get/set方法

package com.bowen.jsp;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;public class SatTag extends BodyTagSupport {
    private static final long serialVersionUID = 1L; private String var;
private String value;

public String getVar() {
   
return var;
}
public void setVar(String var) {
   
this.var = var;
}
public String getValue() {
   
return value;
}
public void setValue(String value) {
   
this.value = value;
}


@Override
public int doStartTag() throws JspException {
   
//pageContext最小的域    当前页面传值
pageContext.setAttribute(var, value);
return SKIP_BODY;//没有标签体我们就返回一个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值