JSP自定义标签

 jsp自定义标签

JSP自定义标签(JSP Custom Tag)是JSP技术中一个重要的扩展。它可以将一些常见的HTML或Java代码重复使用封装成标签,这样可以简化JSP页面的编写,提高代码的复用性和可维护性。

JSP自定义标签可分为两类:

  1. 标签处理程序(Tag Handler)类标签,开发者编写Java类实现,可以使用Java代码处理标签体内容及标签属性。

  2. 标记文件(Taglib)标签,需要在标签库(Tag库)中定义标签信息,标签体内容可以使用EL表达式等JSP技术实现。

使用JSP自定义标签可以降低页面跨度和提高可读性,使得JSP页面开发更加简洁、灵活。同时,JSP自定义标签也可以增强JSP的功能,实现一些复杂的逻辑处理、数据查询等功能,提高开发效率。

二、自定义标签的特点

1.通过调用页面实现传递定制.
2.访问所有对JSP页面可能的对象.
3.修改调用页面生成的响应.
4.自定义标签之间可以互相通信.
5.在同一个JSP页面中对标签嵌套可以实现复杂交互.

out,if,foreach标签

<?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>JSTL 1.1 core library</description>
  <display-name>JSTL core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>k</short-name>
  <uri>/Java2EE_jsp/WebContent/WEB-INF/kun.tld</uri>

  <validator>
    <description>
        Provides core validation features for JSTL tags.
    </description>
    <validator-class>
        org.apache.taglibs.standard.tlv.JstlCoreTLV
    </validator-class>
  </validator>

  <tag>
  <!-- 标签库的名字 -->
    <name>demo1</name>
    <!-- 该标签对应的助手类 -->
    <tag-class>com.xuayhui.tag.DemoTag</tag-class>
 	<!-- 代表是一个JSP标签 -->
    <body-content>JSP</body-content>
    <attribute>
     	<!-- 该自定义JSP标签的属性名称 -->
        <name>var</name>
      <!-- 该属性是否必填 -->
        <required>false</required>
       <!-- 该属性值是否支持表达式 -->
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
  <tag>
    <name>if</name>
    <tag-class>com.xuayhui.tag.Iftag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>test</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  <tag>
    <name>set</name>
    <tag-class>com.xuayhui.tag.SetTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>var</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
        <name>value</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  <tag>
    <name>out</name>
    <tag-class>com.xuayhui.tag.OutTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>value</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
</taglib>
 

 out助手类

package wenhao;

import java.io.IOException;

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

/**
 * servlet中后台代码前台输出内容: out.print
 * 将数据输出到前台,首先拿到输出流
 * 
 *
 */
public class OutTag extends BodyTagSupport{
	private Object value;

	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}
	
	@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();
	}

}

 if助手类

package wenhao;

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

/**
 * if标签:
 * 如果满足条件,就打印标签体,dostarttag的返回值eval_body_include
 * 
 * 如果不满足条件,就不输出标签体,dostarttag的返回值skip_body
 * 
 * 需要获取到是否满足条件的结果值,那么标签就有一个属性,属性值是boolean
 * 
 *
 */
public class Iftag extends BodyTagSupport{
	private boolean test;
	
	public boolean isTest() {
		return test;
	}

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

	@Override
	public int doStartTag() throws JspException {
//		如果满足条件,就打印标签体,dostarttag的返回值eval_body_include
//		如果不满足条件,就不输出标签体,dostarttag的返回值skip_body
		return test ? EVAL_BODY_INCLUDE : SKIP_BODY;
	}
	
	
	
	
	
	
	
	
	
	
}

jsp界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>Insert title here</title>
</head>
<body>
<!-- 
了解标签结构
	<c:if test="true">  开始标签
	true 				标签体
	</c:if>				结束标签
	
	标签分类:控制标签、数据标签、UI标签
	没有标签体也能在网页中输出类容的标签,称为UI标签

	通过点击c:if标签,可以链接跳到c.tld文件中,而.tld文件就是C标签库的定义配置文件
	 -->

<c:if test="true">true</c:if>
<c:if test="false">false</c:if>
<c:set var="name" value="kunkun"></c:set>
<c:out value="${name }"></c:out>
</body>
</html>

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值