JSP自定义标签(上)

hello,家人们,今天我们来学习一下Jsp自定义标签

目录

一.JSP标签库是什么?

二.什么是标签?

三.处理流程图

四.自定义标签的作用

五.如何使用自定义标记?

六.如何自定义标签?

七.标签类型

八.自定义标签的使用


一.JSP标签库是什么?

是一个JSP标签集合,它封装了JSP应用的通用核心功能, 基于JSP标签我们可以理解为,是JSP应该通用功能的一种封装方式

二.什么是标签?

标记语言,是一种注释文本的语言,以便于计算机可以操作。很多与“ML”结尾的语言都是标记语言,比如:HTML,XML,XHTML,VML等等。
标记语言与其他语言一样,也需要运行它们的环境,比如HTML的运行环境时浏览器,XML也要自己的解析和运行的环境。

基本结构:
<开始标签>标签体</结束标签>

空标签:
<开始标签 属性名="属性值"/></结束标签>
<br/><br/>
<开始标签 属性名="属性值"/>

三.处理流程图

四.自定义标签的作用

使用自定义标记,能够使得JSP文件结构简练,减少冗余代码,能够在多个地方使用自定义标记,达到重复使用的目的,同时也使得动态功能更容易管理、维护

五.如何使用自定义标记?

(1)将自定义标记相关的tld文件引入到工程中,可以存放到WEB-INF目录下。

(2)将自定义标记相关的jar文件引入到工程中,可以存放到WEB-INF\lib目录下。

(3)在JSP文件中,使用taglib指令指定标记库的uri,并指定使用该标记库的前缀。

(4)在JSP中需要使用标记的地方,利用前缀引用标记,传递属性即可使用。

六.如何自定义标签?

常见自定义标签主要步骤:

  • 编写助手类
  • 编写标签库描述文件(tld)
  • 在页面上引入标签使用

七.标签类型

  1. UI标签, 输出页面元素
  2. 控制标签, 如if标签,foreach标签等
  3. 数据标签,用于向页面输入数据

八.自定义标签的使用

  • out标签

 🍟🍟1.建一个普通的类,然后继承BodyTagSupport

package com.zking.Y09.dao;

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

import com.mysql.jdbc.StringUtils;

public class OutTag extends BodyTagSupport{
	
	private String test; 
	private String test01; //如果test属性为空,就显示这个默认值
	
	
	public OutTag() {
		// TODO Auto-generated constructor stub
	}
	

	public OutTag(String test, String test01) {
		super();
		this.test = test;
		this.test01 = test01;
	}


	
	public String getTest() {
		return test;
	}


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


	public String getTest01() {
		return test01;
	}


	public void setTest01(String test01) {
		this.test01 = test01;
	}
	
	
	@Override
	public int doStartTag() throws JspException {
		//pageContext为页面上下文对象,用于和jsp共享数据
		//因为out是数据标签,需要输入到页面上
		JspWriter out = this.pageContext.getOut();
		try {
			//里面条件还可以是这样的:this.test==null||"".equals(this.test)
			if(StringUtils.isNullOrEmpty(test)) {//借助了mysql
				out.print(this.test01);
			}else {
				out.print(this.test);
			}
		} catch (Exception e) {
			 throw new JspException("out标签异常",e); 
		}
		//没有标签体可执行了,跳过
		return SKIP_BODY;
	}	

}

🍖🍖2.在WEB-INF目录下 新建一个后缀名为.tld的文件

 

🥣🥣3.然后写上out标签所需要的东西,还有各种属性

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>/zking</uri>	
	
<!-- out标签 -->
	<tag>
	<!-- 标签的名字 -->
	<name>out</name>
	<!-- 标签的全路径 -->
	<tag-class>com.zking.Y09.dao.OutTag</tag-class>
	<!-- 是否为空标签,为空标签就写empty 不是空标签就写jsp -->
	<body-content>empty</body-content>
	
	<!--第一个属性 -->
<attribute>
    <!-- 属性的名字 --> 
	<name>test</name>
	<!-- 是必要的嘛? true或者false -->
	<required>true</required>
	<!-- 是否支持EL表达式 -->
	<rtexprvalue>true</rtexprvalue>
	<!-- 对这个标签的描述 -->
	<description>out标签 val是主要属性</description>
		
</attribute>


	<!--第二个属性 -->
<attribute>
    <!-- 属性的名字 --> 
	<name>test01</name>
	<!-- 是必要的嘛? true或者false -->
	<required>false</required>
	<!-- 是否支持EL表达式 -->
	<rtexprvalue>false</rtexprvalue>
	<!-- 对这个标签的描述 -->
	<description>out标签 val是主要属性,当val为空的时候,就输出这个默认值</description>
		
</attribute>

	</tag>
        </taglib>

🍭🍭4.最后我们新建一个jsp文件,测试一下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="p" uri="/zking" %>   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%  
 
request.setAttribute("test","");

%>
<p:out test="${test}" test01="诗人"/>

</body>
</html>

运行结果:

 


  • if标签

🍓🍓1.建一个普通的类,然后继承BodyTagSupport

package com.zking.Y09.dao;

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

public class IfTag extends BodyTagSupport{

	private boolean val;//设置成布尔类型,方便测试
	
	
	
	public IfTag() {
		// TODO Auto-generated constructor stub
	}


	public IfTag(boolean val) {
		super();
		this.val = val;
	}


	public boolean isVal() {
		return val;
	}

	
	public void setVal(boolean val) {
		this.val = val;
	}


	@Override
	public int doStartTag() throws JspException {
	    if(this.val) {
	    	return EVAL_BODY_INCLUDE;
	    }
		return SKIP_BODY;
	}

}

🍉🍉2.因为tld文件可以包含多个标签的,所以在刚刚建的那个test.tld文件后接着写

<!-- if标签 -->
	<tag>
	<name>if</name>
	<tag-class>com.zking.Y09.dao.IfTag</tag-class>
	<body-content>jsp</body-content>
	<description>if标签</description>
	
<attribute>
	  <name>val</name>
	  <required>true</required> 
	  <rtexprvalue>true</rtexprvalue>
	  <description>val是if标签的主要属性</description>
</attribute>
		
	   </tag>

🥭🥭3.测试

<!-- 如果是对的,就会输出后面那行字,如果不对就什么都不会输出 -->
<p:if val="${18==18}"> 哇,是对的噢!</p:if>
<p:if val="${18==19}"> 是对的嘛?</p:if>

运行结果:

嘻嘻,今天的内容就到这里了噢~ 下期接着说标签

今天也要记得微笑呀.

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值