zoukankan      html  css  js  c++  java
  • [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

    内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

    本人互联网技术爱好者,互联网技术发烧友

    微博:伊直都在0221

    QQ:951226918

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    1.背景

      1)自定义标签可以降低 jsp 开发的复杂度和维护量,从 html 角度来说,可以使 html 不用去过多的关注那些比较复杂的商业逻辑(业务逻辑);

      2)利用自定义标签,可以软件开发人员和页面设计人员合理分工:页面设计人员可以把精力集中在使用标签(HTML,XML或者JSP)创建网站上,而软件开发人员则可以将精力集中在实现底层功能上面,如国际化等,

        从而提高了工程生产力;

      3)将具有共用特性的tag库应用于不同的项目中,体现了软件复用的思想。

     

    2.什么是自定义标签

      1)用户定义的一种自定义的jsp标记 。当一个含有自定义标签的jsp页面被jsp引擎编译成servlet时,tag标签被转化成了对一个称为 标签处理类 的对象的操作。于是,当jsp页面被jsp引擎转化为servlet后,

         实际上tag标签被转化为了对tag处理类的操作。

      2)标签的形式

         ①空标签:<hello/>

          ②带有属性的空标签: <max num1=“3” num2=“5”/>

          ③带有内容的标签: <greeting> hello </greeting> 

          ④带有内容和属性的标签: <greeting name=“Tom”> hello </greeting>

     

    3.使用一个标签

    index.jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="java.util.*" %>
     4 <%@ page import="com.jason.test.javabean.Customer" %>
     5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     6 <html>
     7 <head>
     8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     9 <title>Simple Tag </title>
    10 </head>
    11 <body>
    12     
    13     <% 
    14         //模拟servlet 中的操作
    15         List<Customer> customers = new ArrayList<Customer>();
    16         customers.add(new Customer(1,"AA",12));
    17         customers.add(new Customer(2,"BB",13));
    18         customers.add(new Customer(3,"CC",14));
    19         customers.add(new Customer(4,"DD",15));
    20         customers.add(new Customer(5,"EE",16));
    21         
    22         request.setAttribute("customers", customers);
    23     %>
    24     
    25     <jsp:forward page="testtag.jsp"></jsp:forward>
    26     
    27 </body>
    28 </html>

    testtag.jsp

      1) 通过指令 taglib 引入标签的uri ,设置前缀 prefix

      2) 使用uri里面的 标签

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
     2     
     3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
     4 
     5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     6 <html>
     7 <head>
     8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     9 <title>Insert title here</title>
    10 </head>
    11 <body>
    12     <c:forEach items="${requestScope.customers }" var="customer">
    13     ${customer.id }, ${customer.name}, ${customer.age }<br>
    14     </c:forEach>
    15 
    16 </body>
    17 </html>

    4.标签库 API,描述

          

    1)SimpleTag 接口

      ① setJspContext 方法:该方法把代表 JSP 页面的 pageContext 对象传递给标签处理器对象

      ② setParent 方法:该方法把父标签处理器对象传递给当前标签处理器对象

      ③ getParent 方法:该方法用于获得标签的父标签处理器对象

      ④ setJspBody 方法:该方法用于把代表标签体的 JspFragment 对象传递给标签处理器对象

      ⑥ doTag 方法:该方法用于完成所有的标签逻辑。该方法可以抛出 javax.servlet.jsp.SkipPageException 异常,用于通知 web 容器不再执行 JSP 页面中位于结束标记后面的内容

    2)实现 SimpleTag 接口的标签处理器类的生命周期

        

      

    5. 如何自定义一个标签:编写一个 hello world

      1)编写完成标签功能的 Java 类(标签处理器),实现 SimpleTag 接口

      MyTag.java

     1 package com.jason.tag.mytag;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.jsp.JspContext;
     6 import javax.servlet.jsp.JspException;
     7 import javax.servlet.jsp.tagext.JspFragment;
     8 import javax.servlet.jsp.tagext.JspTag;
     9 import javax.servlet.jsp.tagext.SimpleTag;
    10 
    11 public class MyTag implements SimpleTag {
    12 
    13     @Override
    14     public void doTag() throws JspException, IOException {
    15 
    16         System.out.println("hello world ... ");
    17     }
    18 
    19     @Override
    20     public JspTag getParent() {
    21         System.out.println("JspTag ... ");
    22         return null;
    23     }
    24 
    25     @Override
    26     public void setJspBody(JspFragment arg0) {
    27         System.out.println("setJspBody ... ");
    28     }
    29 
    30     @Override
    31     public void setJspContext(JspContext arg0) {
    32         System.out.println("setJspContext ... ");
    33 
    34     }
    35 
    36     @Override
    37     public void setParent(JspTag arg0) {
    38         System.out.println("setParent ... ");
    39     }
    40 
    41 }

     

     2)编写标签库描述(tld)文件  xml 文件,在tld文件中对自定义中进行描述,放在 WEB-INF目录下

      mytag.cld

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 
     3 <!-- ① 固定部分 -->
     4 <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
     5     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     6     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
     7     version="2.0">
     8     
     9   <!-- ② 描述 tld 文件 -->
    10   <description>jaosn's first DIY  jsp tag</description>
    11   <display-name>jason tag</display-name>
    12   <tlib-version>1.0</tlib-version>
    13   
    14   <!-- 建议在 JSP 页面上使用的标签的前缀  -->
    15   <short-name>jason</short-name>
    16   
    17   <!--  作为 tld 文件的 id ,用来唯一标识当前的 tld 文件,多个 tld 文件的 uri 不能重复,通过 JSP 页面的 taglib 指令的 uri 属性引用 -->
    18   <uri>http://www.jason.com/jason/diy/tag/core</uri>
    19   
    20   
    21   
    22   <!-- ③描述自定义的  HelloSimpleTag 标签 -->
    23   <tag>
    24       <!-- 标签名字  -->
    25       <name>hell</name>
    26       
    27       <!-- 标签所在的全类名-->
    28       <tag-class>com.jason.tag.mytag.MyTag</tag-class>
    29       
    30       <!-- 标签体的类型  -->
    31       <body-content>empty</body-content>
    32   
    33   </tag>
    34   
    35 </taglib>

      3)在 JSP 页面中导入和使用自定义标签

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     
     4 <%@ taglib prefix="jason" uri="http://www.jason.com/jason/diy/tag/core" %>
     5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     6 <html>
     7 <head>
     8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     9 <title>Insert title here</title>
    10 </head>
    11 <body>
    12     
    13     <jason:hell/>
    14 
    15 </body>
    16 </html>
  • 相关阅读:
    关于MQ的对比
    关于RabbitMQ(二)
    关于QPS、TPS、并发用户数、吞吐量的关系
    关于使用Ecplise构建gradle项目
    关于记录一次线上真实环境多线程引发的问题
    关于MySQL——find_in_set()函数的使用
    关于数据库的表连接
    关于Java线程池
    IntelliJ搭建Scala及Spark工程
    idea编写wordcount程序及spark-submit运行
  • 原文地址:https://www.cnblogs.com/jasonHome/p/5559144.html
Copyright © 2011-2022 走看看