JSP自定义标签

简介: JSP自定义标签

jsp自定义标签


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


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


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


标记文件(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>


目录
相关文章
|
Java
JSP自定义标签【下】
JSP自定义标签【下】
66 0
|
Java
jsp自定义标签
jsp自定义标签
77 1
|
6月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 3
JSP自定义标签允许开发人员创建可重用的组件,简化页面逻辑。在JSP 2.0及以上版本,可通过继承`SimpleTagSupport`并覆写`doTag()`方法来创建自定义标签,如`HelloTag`,它有一个`message`属性。属性值通过setter方法`setMessage()`设置。在TLD文件中定义该属性后,可在JSP页面使用`&lt;ex:Hello message=&quot;This is custom tag&quot;/&gt;`来调用,输出定制的文本。
26 0
|
6月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 4
**JSP自定义标签允许创建用户定义的语言元素。它们转换为Servlet中的tag handler,在执行时由Web容器调用。使用SimpleTagSupport继承并重写doTag()方法可创建简单标签。标签可设置属性,如message,通过setter方法访问。TLD文件定义属性元数据,JSP页面则通过prefix和uri引用。例如,&lt;ex:Hello message=&quot;...&quot;/&gt; 显示定制消息。属性可配置为必需、类型、描述及是否为JspFragment。**
30 0
|
6月前
|
搜索推荐 Java 容器
JSP 教程 之 JSP 自定义标签 2
**JSP自定义标签允许用户创建个性化标签,简化页面逻辑。在JSP 2.0中,通过继承`SimpleTagSupport`并重写`doTag()`可创建简单标签处理器。示例展示了一个名为`Hello`的自定义标签,它接收并显示标签体内容。TLD文件配置了标签元数据,JSP页面引用该标签并展示“这是消息主体”。**
25 0
|
6月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 1
**JSP自定义标签简介**:扩展JSP功能,创建用户定义标签,通过Servlet容器调用Tag Handler。在JSP 2.0中,使用SimpleTagHandlers简化定制。以&quot;Hello&quot;标签为例,创建`HelloTag`类继承`SimpleTagSupport`,重写`doTag()`打印消息。编译后,在`custom.tld`定义标签库,JSP页面引用后即可使用。例如 `&lt;ex:Hello/&gt;` 显示 &quot;Hello Custom Tag!&quot;。
29 0
|
前端开发 Java
通用分页进阶之jsp之自定义标签
通用分页进阶之jsp之自定义标签
36 1
|
7月前
|
Java 数据安全/隐私保护
Jsp自定义标签(foreach,dept,select)
Jsp自定义标签(foreach,dept,select)
48 0
|
7月前
|
XML Java 数据格式
JSP自定义标签
JSP自定义标签
70 0
|
存储 Java 开发者
JSP自定义标签(下)
JSP自定义标签(下)
59 0