- 浏览: 151102 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
fddjxllren:
session.find()是不支持动态绑定参数的.要使用it ...
Hibernate查询之list/iterator -
xiaofeiyang:
http://svn.apache.org/repos/asf ...
struts,hibernate,spring 版本控制svn的URL地址 -
peterxiemin:
emp在建立的时候,报无效的月份,为什么 ?
oracle的练习表---employee -
java_bigniu:
...
Hibernate查询之list/iterator -
lanhai921:
学习下,谢谢分享。
itext基本用法
在jsp1.2之前如果想要对标签库进行开发,要么继承TagSupport类,要么继承BodyTagSupport类,而且必须覆写其中的doStartTag(),doAfterBody(),doEndTag()方法,而且还必须清楚这些方法的返回值类型;这样的过程太复杂了,到了JSP2.0后,简化标签的开发,专门增加了一个制作简单的标签库SimpleTagSupport类。直接覆写其中的doTag()方法即可;
SimpleTagSupport类的定义如下:
public class TagSupport extends Object implements SimpleTag
此类实现了SimpleTag接口,SimpleTag接口如下:
public interface SimpleTag extends JspTag{ public void doTag() throws JspException,IOException; public void setParent(JspTag parent); public JspTag getParent(); public void setJspContext(JspContext pc); public void setJspBody(JspFragment jspBody); }
SimpleTagSupport类的主要方法:
No | 方法 | 类型 | 描述 |
1 | public void doTag() throws JspException,IOException | 普通 | 完成具体标签功能的编写 |
2 | public JspContext getJspContext() | 普通 | 取得JSP上下文,主要用于输出 |
3 | protected JspFragment getJspBody() | 普通 | 取得JspFragment对象,主要用于迭代输出 |
SimpleDateTag:
package com.keith.tag; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class SimpleDateTag extends SimpleTagSupport { //接受格式化数据 private String format; @Override public void doTag() throws JspException, IOException { //日期格式化 SimpleDateFormat sdf = new SimpleDateFormat(this.format); try { //输出格式化后的日期 super.getJspContext().getOut().write(sdf.format(new Date())); } catch (IOException e) { e.printStackTrace(); } } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } }
simpledatetag.tld:
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>simpledatetag</short-name> <tag> <name>simpledate</name> <tag-class>com.keith.tag.SimpleDateTag</tag-class> <body-content>empty</body-content> <attribute> <name>format</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
index.jsp:
<%@ taglib prefix="simpledatetag" uri="simpledate"%> <body> <simpledatetag:simpledate format="yyyy-MM-dd HH:mm:ss.SSS"/> </body>
测试看下结果!
要是面对迭代问题呢?在以前,是通过TagSupport类实现的迭代操作,则可以通过控制返回值的方式,让程序循环执行doAfterBody()方法,但先在通过SimpleTagSupport类实现的doTag()方法,本身没有返回值,如果想达到循环的效果,就必须通过JspFragment类完成控制。
在SimpleTagSupport类中存在一个getJspBody()方法,此方法返回的就是一个Fragment对象,利用此对象的invoke()方法即可完成标签体内容的输出;
SimpleIterateTag:
package com.keith.tag; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.SimpleTagSupport; public class SimpleIterateTag extends SimpleTagSupport { private String id; private String name; private String scope; @Override public void doTag() throws JspException, IOException { Object value = null; // 是否是page范围 if ("page".equals(this.scope)) { value = super.getJspContext().getAttribute(name, PageContext.PAGE_SCOPE); } else if ("request".equals(this.scope)) { // 是否是request范围 value = super.getJspContext().getAttribute(name, PageContext.REQUEST_SCOPE); } else if ("session".equals(this.scope)) { // 是否是session范围 value = super.getJspContext().getAttribute(name, PageContext.SESSION_SCOPE); } else { // 是否是application范围 value = super.getJspContext().getAttribute(name, PageContext.APPLICATION_SCOPE); } // 如果是List接口的实例 if (value != null && value instanceof List<?>) { Iterator<?> iter = ((List<?>) value).iterator(); while (iter.hasNext()) { super.getJspContext().setAttribute(id, iter.next()); super.getJspBody().invoke(null); } } } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; } }
simpleiteratetag.tld:
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>simpleiteratetag</short-name> <tag> <name>iterate</name> <tag-class>com.keith.tag.SimpleIterateTag</tag-class> <!-- 标签体内容, scriptless:表示标签体内容可以是文本,EL,JSP语法.不能包含JSP的脚本元素; empty:没有标签体; JSP:标签体可以包含文本,EL,或JSP标签,但是对于简单标签无效; tagdependent:表示标签体交由标签本身去解析处理,在标签体中的所有代码都会原封不动的交给标签处理器,而不是将执行结果传递给标签处理器; --> <body-content>scriptless</body-content> <attribute> <name>id</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>scope</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
web.xml:
<taglib> <taglib-uri>simpleiterate</taglib-uri> <taglib-location>/WEB-INF/simpleiteratetag.tld</taglib-location> </taglib>
index.jsp:
<%@ taglib prefix="simpleiteratetag" uri="simpleiterate"%> <body> <% List<String> all = new ArrayList<String>(); all.add("Java"); all.add("C"); all.add("Linux"); request.setAttribute("all",all); %> <simpleiteratetag:iterate name="all" scope="request" id="names"> ${names }<br /> </simpleiteratetag:iterate> </body>
访问页面进行测试!
DynamicAttributes接口:
每一个标签都可以定义属性,当使用一个标签时,只能编写指定个数及名称属性。在JSP2.0之后专门增加了一个DynamicAttribute接口,此接口的主要功能是用于完成动态属性的设置,即用户在使用一个标签时可以根据自己的需要,任意设置多个属性。
DynamicAttributes接口的定义如下:
public interface DynamicAttribute{ public void setDynamicAttribute(String uri,String localName,Object value)throws JspException; }
在这个接口里,只定义了一个setDynamicAttribute()方法,在此方法中秩序关心localName(表示动态设置的属性名词)和value(动态设置的属性内容)这2个参数!
下面使用动态属性完成一个动态加法操作,用户可以直接在加法的标签中设置任意多个参数,并通过标签将计算的结果输出:
DynamicAddTag:
package com.keith.tag; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.DynamicAttributes; import javax.servlet.jsp.tagext.SimpleTagSupport; public class DynamicAddTag extends SimpleTagSupport implements DynamicAttributes{ //实现动态属性接口 private Map<String,Float> num = new HashMap<String,Float>(); @Override public void doTag() throws JspException, IOException { //定义变量保存相加的结果 Float sum = 0.0f; //迭代输出 Iterator<Map.Entry<String,Float>> iter = this.num.entrySet().iterator(); while (iter.hasNext()) { //取出每一个Map.Entry Map.Entry<String, Float> value = iter.next(); //执行累加操作 sum += value.getValue(); } //输出计算的结果 super.getJspContext().getOut().write(sum+""); } public void setDynamicAttribute(String uri, String localName, Object value) throws JspException { //取出设置的动态属性内容 num.put(localName, Float.parseFloat(value.toString())); } }
dynamicaddtag.tld:
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>dynamicadd</short-name> <tag> <name>add</name> <tag-class>com.keith.tag.DynamicAddTag</tag-class> <body-content>empty</body-content> <!-- 接受动态属性 --> <dynamic-attributes>true</dynamic-attributes> </tag> </taglib>
web.xml:
<taglib> <taglib-uri>dynamicaddtest</taglib-uri> <taglib-location>/WEB-INF/dynamicaddtag.tld</taglib-location> </taglib>
index.jsp:
<%@ taglib prefix="dynamicadd" uri="dynamicaddtest"%> <body> 计算结果:<dynamicadd:add num1="11.11" num2="10.12" num3="12.1"/> </body>
测试结果:计算结果:33.33
发表评论
-
JSTL标签之XML标签库,函数标签库
2011-01-20 13:14 0在JSTL中可提供了用于XML解析的操作,这样可以减少 ... -
JSTL常用标签之大聚集---下
2011-01-20 10:17 1371JSTL国际化标签库: 其主要标签如下: NO ... -
JSTL常用标签之大聚集---中
2011-01-20 08:52 969<c:forEach>标签: 主要 ... -
JSTL常用标签之大聚集---上
2011-01-17 22:53 1066JSTL已经被继承到了javaEE ... -
jsp标签编程『下』---开发迭代标签
2011-01-17 10:48 1262开发一个迭代标签,此标签只可以对list进行迭代(学习)。 ... -
jsp标签编程『下』---TagSupport类
2011-01-17 10:11 2823掌握基本的标签定义后,可以发现定义标签时都需要继承TagSup ... -
jsp标签编程『中』---定义有属性的标签
2011-01-17 09:13 979定义一个日期标签,则用户就必须指定格式化日期的格式; Dat ... -
jsp标签编程『上』---编写标签
2011-01-16 21:30 10481,什么是JSP标签库? JSP标签库(自定义标签 ... -
javaWeb之表达式语言---初始EL
2011-01-16 08:55 9821,何为表达式语言(Expression Language,E ... -
监听器实例之---在线人员统计
2011-01-15 17:30 0当用户成功登录后,会在列表中增加此用户名称,这样就可 ... -
jsp/servlet之监听器
2011-01-15 16:05 15901,什么是监听器? 其主要的功能就是监听Web ... -
jsp/servlet之过滤器
2011-01-15 14:03 10801,什么是过滤器(filter)? 它是以一种 ... -
MVC之实例操作---MVC设计模式应用
2011-01-15 09:18 3956MVC的第一个实例-----一个登陆: 首先我们需要一个VO ... -
javaWeb之MVC模式
2011-01-13 23:11 1384javaWeb引入了servlet概念 ... -
javaWeb之Servlet跳转
2011-01-13 22:53 1837servlet跳转分为:客户端跳转和服务器端跳转; 客户端 ... -
javaWeb之Servlet
2011-01-13 22:22 1493使用jsp可以完成动态的web开发,但是在开发时发现大量的代码 ... -
javaBean实例之注册验证
2011-01-13 14:29 3105首先定义Bean: package com.keith.be ... -
javaWeb之JavaBean
2011-01-13 13:47 12321,什么是JavaBean? ... -
jsp之阶段性总结
2011-01-13 08:53 8741,web安全性! 在web目录中必须存在一个&q ... -
jsp值application
2011-01-12 22:34 11121,什么是application? application对 ...
相关推荐
第九章 扩展jsp标签 第十章 Enterprise JavaBeans 第十一章 其他高级应用 第十二章 jsp高级应用实例--网上书店 附录A jsp应用实例--网上教育代码 附录B JavaServer Pages白皮书 附录C 常用jsp相关网址
本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也...
JSP Web编程指南 JavaServer Pages(JSP)是一种基于Java程序语言创建交互式的、动态Web站点的技术。本书从基础开始,先讲述JSP的概念、如何存储数据和执行简单的计算;接着介绍JSP的新功能——标签库和Java最有用...
JSP应用开发-自定义标签的使用.pptx
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...
JSP应用开发-EL表达式与JSTL标签.pptx
《Servlet与JSP核心编程(第2卷 第2版)》在第l卷的基础上,广泛涉及自定义标签库、过滤器、声明式安全、JSTL和Struts等主题,并沿袭深受读者喜爱的写作风格,通过完整、有效、资料丰富的程序来演绎目前最流行的技术和...
第五篇为“标签语言和表达式语言”,主要讲述JSP的标签技术,JSP提供的标准标签库JSTL的用法及用户如何自定义自己的标签库;第六篇为“Web应用高级专题”,主要讲述Servlet过滤器、JSP异常处理、JSP日志、认证和安全...
JSP应用开发-使用JSTL标签重构BBS论坛页面.pptx
本书从基础开始,先讲述JSP的概念、如何存储数据和执行简单的计算;接着介绍JSP的新功能——标签库和Java最有用的特征——面向对象;然后用大量可运行的实例为读者详细介绍如何进行Web设计和管理数据。通过对本书的...
本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...
本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也...
本书全面系统地介绍了如何运用JSP设计并构架动态web站点和web应用,阐述了JSP标签的语法和生存期以及Servlet的概念;分忻了JSP体系结构以及JSP与J2EE API的关系;更通过大量的案例分析对如何使用JSP、XML和XSLT在WAP...
本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也...
第9章:JSP开发中的实用技术,通过学习来提高JSP编程的质量与效率。 第10-13章:一些实用工具的用法,通过这些实用工具的学习,有助于读者从事一些管理角色的工作。 第14-17章:留言管理系统、网站相册系统、在线...
本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也...
第9章:JSP开发中的实用技术,通过学习来提高JSP编程的质量与效率。 第10-13章:一些实用工具的用法,通过这些实用工具的学习,有助于读者从事一些管理角色的工作。 第14-17章:留言管理系统、网站相册系统、在线...
全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...