jsp程序设计:jstl之JSTL标签库
转载自:http://www.blogjava.net/haizhige/archive/2008/10/26/236783.html,个人进行了一些修改。
前言:写一个taglib一般可以继承SimpleTagSupport或TagSupport,但是后者比较复杂如:在“<”处触发 doStartTag 事件,在“>”时触发 doEndTag 事件,通常在 doStartTag 里进行逻辑操作,在 doEndTag 里控制输出;而前者只需实现自己的doTag方法即可。
而功能性而言前者自定义标签的content里不能有scriptlet语言(Java语言),而后者可以设置有,但是一来不建议在jsp里有scriptlet,二来前者的功能也足够了。
1、简单标签
实现自定义标签的三个步骤:
1)编写标签处理程序(java类)。
2)编写标签库描述符(提供有关标签和库文件的元信息的XML文件)。
3)JSP实现(包含自定义标签的JSP文件)。
2、开发简单的自定义标签
1)标签处理程序wz.java的源代码如下:














HttpSession session=((PageContext)this.getJspContext()).getSession();
HttpServletRequest request=(HttpServletRequest) ((PageContext)this.getJspContext()).getRequest();








2)标签描述文件wz.tld的内容如下:




























3)引入标签的JSP页面的源码:










注:编译后的类文件放到WEB-INF/classes目录下,描述文件tld放到WEB-INF/tld目录下(放在WEB-INF目录下即可(包括N级子目录),因为有uri引用吧),tag文件保存到web应用的WEB-INF/tags目录下。
4)对wz.tld文件的解释:
tlib-version:是必须的元素,指定标记库函数的版本号。
short-name:为标记库指定一个缩略名称,用它可以作为标记库的默认名字空间。
info:用来描述标记的文档信息,默认值为空。
uri:用来指定连接到标记的附加源文件,即tld的公共可用副本。
tag:是标记描述文件中最重要的一个元素,有6个子元素:name、tagclass、teiclass、bodycontent、info、attribute。
name:用户指定的标记名称。
tag-class:指定标记处理类,写全名,即带包的类。
bodycontent:说明标记体的类型,分为4种:empty、jsp、scriptless、tagdependent。
empty:表示没有标记体(即不能有content内容)。
jsp:表示标记体可以为jsp代码(<% int a=3; %>之类的还是<jsp:..之类的??)。
scriptless:表示标记中的content里不能用scriptlet脚本or<jsp:??(但是可以有其它标记/标签??)。
tagdependent:表示标签中的内容交给标记处理程序去进行处理(比如content是${name}也会看成是普通字符串??)。
info:记录标记的描述信息。
attribute:用来指定零个或者多个标记属性,有三个子元素:name、required、rtextprvalue(设置为true则属性值可以是动态的如name="${nameValue}")。
name:必须设定,用来表示大小写敏感属性名称。
required:必须设定,标示属性是否一定要存在,默认为flase,即在标记处理程序中不会自动调用属性
的setAttribue方法。
rtextprvalue:用来说明属性是否可以是动态生成的,但设定为true时,属性即可以是一个常量值,也可
以由表达式生成。
3、标签文件,是JSP2.0新增的功能,目的是让JSP网页开发人员能够直接使用JSP语法来制作标签,而无须了解java语言。其扩展名都是.tag或.tagx。假如Tag File包含其他完整的或片段的Tag File,JSP2.0规范建议扩展名为.tagf。
1)Tag File的7个隐式对象:request、response、out、jspContext、session、application、config。
2)Tag File的指令:
tag 如同JSP网页的page指令。
taglib 如同JSP网页的taglib指令。
include 如同JSP网页的include指令。
attribute 用来设定自定义标签的属性。
variable 用来设TagFile的变量,此变量可回传至JSP网页。
3)新增的几个动作:
<jsp:attribute>标签:用来指定自定义标签属性块,必要时可以作为代码段输出。
<jsp:doBody>标签:告诉容器去处理body,并且将处理结果添加到response中,可以有选择地使用"var"属性,捕获处理的结果,并在下一步进行处理。
<jsp:invoke>标签:对作为属性传递的特定参数进行操作。
4)开发并使用一个日期标签:datetag.tag与datetag.jsp
datetag.tag的代码如下:









datetag.jsp的代码如下:















5)开发并使用一个求和标签:sumtag.tag与sumtag.jsp
sumtag.tag的代码如下:



















sumtag.jsp的代码如下:















注:tag文件保存到web应用的WEB-INF/tags目录下。
4、JSP标记与JavaBean有何区别?
答:JavaBean存在先天的不足,它只是可复用组件,独立于运行环境而包装了一些数据和业务逻辑功能,无法获得运行环境信息,无法与JSP页面进行更加深层次的交互。自定义标记机制解决了它的这种的缺陷,标记库的处理类不但具有JavaBean的功能,而且可以把JSP的环境住处传到类中间,不但能得到JSP传递过来的属性,还能与JSP共用页面环境,JSP页面中可以通过session、page与标记处理程序进行数据通信,这一点是javaBean所不能实现的。
jsp程序设计:jstl之JSTL标签库的更多相关文章
- JSTL之迭代标签库
JSTL之迭代标签库 JSTL的全称是 Java Server Pages Standard Tag Library,翻译过来就是JSP标准标签库,它包含了在开发JSP页面时经常用到的一组标准标签.这 ...
- Java_jsp.jstl.Function函数标签库.记录
JSTL Functions标签库 本书第12章的12.3节(定义和使用EL函数)介绍了EL函数的创建和使用方法.在JSTL Functions标签库中提供了一组常用的EL函数,主要用于处理字符串,在 ...
- (5)JSTL的xml标签库
Jstl的XML标签库 JSTL提供了操作xml文件的标签库,使用xml标签库可以省去使用Dom和SAX标签库的繁琐,能轻松的读取xml文件的内容. <%@ taglib uri="h ...
- (4)JSTL的SQL标签库
jstl的SQL标签库 SQL tag Library中的标签用来提供在 JSP 页面中可以与数据库进行交互的功能Database access标签库有以下6组标签来进行工作: <sql:set ...
- JSTL I18N 格式标签库
<%@ page language="java" pageEncoding="gbk"%> <%@ taglib prefix="c ...
- JSTL (标准标签库)
JSTL(标准标签库) 作用: Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性.维护性和方便性. 使用方法:J ...
- java攻城师之路--复习java web之jsp入门_El表达式_JSTL标签库
JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...
- 复习java web之jsp入门_El表达式_JSTL标签库
JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...
- 关于在jsp页面中使用/struts-tags标签库的迭代器时,从ValueStack获取参数使用EL的问题
情况复原下: 通过valuestack存了个user,然后页面里可以${user.sex}拿到男.${user.sex=='男'}拿到ture 但是在使用 <s:if text="${ ...
- jsp如何自定义tag的标签库?
虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...
随机推荐
- [C#]使用TcpListener及TcpClient开发一个简单的Chat工具
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 本文使用的开发环境是VS2017及dotNet4.0,写此随笔的目的是给自己及新开发人员作为参 ...
- 撸起袖子加油干 golang入坑系列
还是提醒一下,里面有段子,不都是技术. 冲着技术来的,慢走不送.没有版权,但可以给我发邮件(ztao8607@gmail.com) 在我的发小朋友中,终于最后一位打光棍的要结婚了. 说实话,真心不容易 ...
- C语言之猜数游戏
#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){ srand(time(0)); int ...
- static,final,包,访问修饰符,内部类
static 关键字可以修饰成员变量,被static修饰的成员变量归属于类static关键字可以修饰成员方法:被static修饰的成员方法可以直接使用类名调用,也可以通过对象调用,建议使用类名.非静态 ...
- ChatterBot之linux下安装mongodb 02
当前环境 :centos 6.9 mongodb版本 mongodb-linux-x86_64-3.4.4.tgz 使用链接工具:studio-3t-x64.msi.zip 首先我们先来安装mongo ...
- 【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon
对于任何一个高可用高负载的系统来说,负载均衡是一个必不可少的名称.在大型分布式计算体系中,某个服务在单例的情况下,很难应对各种突发情况.因此,负载均衡是为了让系统在性能出现瓶颈或者其中一些出现状态下可 ...
- .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
一.前言 本篇开发环境?1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core下载地址 ...
- git以及github的初级入门(一)
本身学习git的操作是没什么兴趣的,毕竟原本是win平台学的java开发,git下那么多复制的命令行操作确实比较让人头疼,直到昨天我打开计算机的时候,我放置项目的E盘,以及F盘,G盘盘符都不见了!!我 ...
- BFS+数据处理 Under the Trees UVa
题意:将多叉树转化为括号表示法,每个非叶结点的正下方都有一个'|'然后下方是一排'-'和字符,恰好覆盖所有子结点的正上方,单独的一行'#'为数据的结束标志 解题思路:用gets将字符数组输入,本题不用 ...
- 技术债务管理以及Firefox/Chromium的债务评价
如今的软件开发是在遍地敏捷,人人讲唯快不破的时代,哪有人有时间思考代码质量,设计的质量? 哪个又不是从一堆代码中杀出血路来实现还有一个功能?一个产品都存活不了几年,何必考虑什么可维护性? 我们追求进度 ...