[原创]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
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="com.jason.test.javabean.Customer" %>
<!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>Simple Tag </title>
</head>
<body> <%
//模拟servlet 中的操作
List<Customer> customers = new ArrayList<Customer>();
customers.add(new Customer(1,"AA",12));
customers.add(new Customer(2,"BB",13));
customers.add(new Customer(3,"CC",14));
customers.add(new Customer(4,"DD",15));
customers.add(new Customer(5,"EE",16)); request.setAttribute("customers", customers);
%> <jsp:forward page="testtag.jsp"></jsp:forward> </body>
</html>
testtag.jsp
1) 通过指令 taglib 引入标签的uri ,设置前缀 prefix
2) 使用uri里面的 标签
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!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:forEach items="${requestScope.customers }" var="customer">
${customer.id }, ${customer.name}, ${customer.age }<br>
</c:forEach> </body>
</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
package com.jason.tag.mytag; import java.io.IOException; import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag; public class MyTag implements SimpleTag { @Override
public void doTag() throws JspException, IOException { System.out.println("hello world ... ");
} @Override
public JspTag getParent() {
System.out.println("JspTag ... ");
return null;
} @Override
public void setJspBody(JspFragment arg0) {
System.out.println("setJspBody ... ");
} @Override
public void setJspContext(JspContext arg0) {
System.out.println("setJspContext ... "); } @Override
public void setParent(JspTag arg0) {
System.out.println("setParent ... ");
} }
2)编写标签库描述(tld)文件 xml 文件,在tld文件中对自定义中进行描述,放在 WEB-INF目录下
mytag.cld
<?xml version="1.0" encoding="UTF-8" ?> <!-- ① 固定部分 -->
<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
<!-- ② 描述 tld 文件 -->
<description>jaosn's first DIY jsp tag</description>
<display-name>jason tag</display-name>
<tlib-version>1.0</tlib-version> <!-- 建议在 JSP 页面上使用的标签的前缀 -->
<short-name>jason</short-name> <!-- 作为 tld 文件的 id ,用来唯一标识当前的 tld 文件,多个 tld 文件的 uri 不能重复,通过 JSP 页面的 taglib 指令的 uri 属性引用 -->
<uri>http://www.jason.com/jason/diy/tag/core</uri> <!-- ③描述自定义的 HelloSimpleTag 标签 -->
<tag>
<!-- 标签名字 -->
<name>hell</name> <!-- 标签所在的全类名-->
<tag-class>com.jason.tag.mytag.MyTag</tag-class> <!-- 标签体的类型 -->
<body-content>empty</body-content> </tag> </taglib>
3)在 JSP 页面中导入和使用自定义标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%@ taglib prefix="jason" uri="http://www.jason.com/jason/diy/tag/core" %>
<!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> <jason:hell/> </body>
</html>
[原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)的更多相关文章
- [原创]java WEB学习笔记51:国际化 概述,API 之 locale类,dataFormat类,numberFormat类, MessageFormat类,ResourceBundle 类
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记13:JSP介绍(背景,特点,原理)
JSP介绍:(理解) 1)JSP背景 ①在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变: ②如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记41:简单标签之带属性的自定义标签(输出指定文件,计算并输出两个数的最大值 demo)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- 【翻译自mos文章】asm 归档路径满了
asm 归档路径满了 參考原文: ASM Archive destination is full. (Doc ID 351547.1) 适用于: Oracle Server - Enterprise ...
- 使用UIDatePicker
什么是UIDatePicker 用官方文档的话来说,UIDatePicker就是使用多个滚轮来选择日期和时间的类.官方的示例有定时器,闹钟(设置时间)部件.正确设置后,UIDatePicker对象会在 ...
- msyql5.5修改配置文件开启慢查询日志
修改/etc/my.cnf文件 在[mysqld]下面修改或添加配置(在别处不起作用) slow_query_log = on slow_query_log_file = /usr/local/mys ...
- Heterogeneity Wins
 Heterogeneity Wins Edward Garson THE nATuRAl EvoluTion oF CoMpuTER TECHnology has brought about im ...
- 卸载Linux自带openjdk
1.查看自带jdk版本 java -version 2.查看 rpm -qa | grep java 显示如下信息: java-1.4.2-gcj-compat-1.4.2.0-40jpp. ...
- Tomcat9源码分析:BootStrap
概览 BootStrap源码所在的位置是:org.apache.catalina.startup.Bootstrap 这个类是Tomcat项目的启动类,也就是main函数所在的地方,起始tomcat就 ...
- JSP开发中的基础语法
JSP 语法 JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代码片段 %> 或者 ...
- yii2.0 console执行php守护进程
//该方法只需执行一次public function actionIndex(){ $pid =pcntl_fork();//在当前进程中生成一个新的子进程 //$pid会有三种形式 $pid==-1 ...
- SET IDENTITY_INSERT ON/OFF 权限
今天突然遇到了,找不到对象“XXXX”,因为它不存在或者没有您所需的权限,于是检查程序,突然发现程序中有一段代码是: SET IDENTITY_INSERT eticket ON //执行业务 ... ...
- 《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9430645 作者:七十一雾央 新浪微博:http:/ ...