JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用

Slides:



Advertisements
Similar presentations
第 4 章 JSP 内置对象 本章主要内容:  内置对象的概念  内置对象的作用域和生命期  内置对象的作用和关系  内置对象的使用方法.
Advertisements

第二章 JSP 编译指令. 课程目标  JSP 编译指令  JSP 页面的表达式  JSP 页面的注释  JSP 页面的声明  Scriptlets.
Java Web 开发 授课人:张鸽. 第三讲 JSP 内置对象  JSP 有以下九种内置对象,包括:  ·request ,请求对象  ·response ,响应对象  ·pageContext ,页面上下文对象  ·session ,会话对象  ·application ,应用程序对象.
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第六章 网页设计与制作基础.
HE Fixed Assets Manage System
第五章 JSP内置对象 第4章学习了页面组成元素和使用方法。本章学习JSP内置对象的使用。使用JSP内置对象,可以方便操作页面,访问页面环境,实现页面内、页面间、页面与环境之间的通讯。 学习目标 熟悉主要内置对象的概念 理解主要内置对象的作用域和生命期 理解主要内置对象的作用和关系 熟悉主要内置对象的使用方法.
基于JSP搭建Web应用程序.
HTML第一课 李 伟 HTML开发语言基础.
第5章 HTML 標籤介紹.
动态网页制作 第1章 HTML语言1.
JSTL标签库 讲师:梁 桐 北京传智播客教育 1。缓存数据 2。处理字符乱码 3。监听器中的定时器
面向对象的程序设计(一).
MVC Servlet与MVC设计模式.
第五单元课1-3 层叠样式表.
第一章 面向对象程序设计.
第3章 JavaScript语言基础.
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
ASP动态网页设计实用教程 主讲教师: 开课单位:.
第3章 超文本标记语言(HTML) 3.1 基本结构标记 3.2 文本格式标记 3.3 超链接标记<A></A>
11-1 JDBC的基礎-說明 昇陽公司提出的資料庫中介軟體(Middleware)稱為「JDBC」(Java Database Connectivity),這是一種開放標準的Java程式介面,可以讓Java程式連接資料庫管理系統, 以Java技術來說,就是實作JDBC驅動程式介面(JDBC Driver.
Hello World 體驗實作第一個JSP程式.
Ch08 巢狀類別 物件導向程式設計(II).
第9章 过滤器和监听器技术 过滤器(Filter)和监听器(Listener)是两种特殊的Servlet技术。过滤器可以对用户的请求信息和响应信息进行过滤,常被用于权限检查和参数编码统一设置等。监听器可以用来对Web应用进行监听和控制的,增强Web应用的事件处理能力。 本章主要介绍过滤器和监听器的编程接口、基本结构、信息配置、部署和运行,最后通过案例说明过滤器和监听器的典型应用。
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
专题4:JSP脚本和指令.
例外處理(Exception Handling)
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
Java基础 JavaSE异常.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
Java语言程序设计 第五部分 Java异常处理.
JavaScript 靜宜大學 資管系 楊子青.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
十二年國民基本教育中等學校教師教學專業能力研習五堂課
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
郑晟 昆明理工大学 云南省计算机技术应用重点实验室
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
W3C标准网页制作 主讲教师:张 涛.
网站设计 前端 选择器(复习),表单.
第五讲 JSP中的文件操作(1) 教学目的 本讲主要讲述JSP中使用Java输入、输出流实现文件的读写 操作 。 知识要点
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
Ch09 在網頁之間傳遞資訊 網頁程式設計.
第十二章 过滤器.
C# 基本語法、變數.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
HTML大探索.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
第二章 Java基础语法 北京传智播客教育
表单页面 表单是用户利用浏览器对Web站点网络数据库进行查询的一种界面,用户利用表单可以输入信息或选择选项等,然后将这些信息提交给服务器进行处理。通过表单,既可以将浏览器的信息发送到Internet服务器上,同时表单也可以使用户与站点的浏览者交互或从浏览者那里收集信息。它是网页的设计者和使用者相互交流的工具。表单对象包括文本域(单行、多行、密码)、列表、菜单、复选框、单选框、按钮等。
教师:李金双 网页制作 教师:李金双
Presentation transcript:

JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用 周强 2009-4-9

Custom Tag 的概念和特点 Custom Tag 由用户自己定义并可以被其它JSP 使用。 在 JSP 中使用的 Custom Tag 会被转换成Servlet 程序。 Custom Tag 的优点是取代了JSP中的Java程序并且可以重复使用。

tag library JSP 中通过使用 taglib directive 定义所使用的标记库。 一个标记库是一组 custom tag 的集合,它在 Web 程序中由一个标记库描述文件(TLD) 定义。 <%@ taglib uri=“/WEB-INF/icsampes.tld” prefix=“ics” %>,其中 uri 属性指定了一个在 /WEB-INF 目录下面的 tld 文件,这个前缀为 ics。在 JSP 中使用属于这个标记库的 Custom Tag 都以这个前缀打头(ics:XXXX)。

Custom Tag 的格式 一个 Custom Tag 包括起始标记、终止标记和标记体。其中起始标记可以设置属性,标记体是可选的。格式如下: <ics:tagname> tagbody </ics:tagname>

Custom Tag 的格式 分为 4 类: 1、简单标记:最简单的 Custom Tag 标记,起始标记没有设置参数,没有标记体。 2、带属性标记:起始标记可以包括属性,这些属性可以被 JSP 赋值并用来在使用 Custom Tag 时提供设置信息。使用这种 Custom Tag,其属性的名称和类型需要在 tld 文件中指明。

Custom Tag 的格式 3、带标记体标记:在 Custom Tag 的起始标记和终止标记之间的为标记体(body)。Body 的内容可以是 JSP 中的标准标记、Html、脚本语言或其它Custom Tag。 4、可被Script使用的标记:Custom Tag 可以采用特定的格式定义对象(比如数据资源、EJB等),这些对象可以在标记后面的scriptlet 中使用。要实现这个功能,需要在一个Custom Tag 中使用 id 和 type 属性。 注:先讲 1 和 2。

Custom Tag 开发方法 1、采用特定的 API 编写实现标记处理的程序; 标记处理程序一般放在 /WEB-INF/classes目录下面,或者作为 jar 文件放在 /WEB-INF/lib 目录下面。 2、建立一个 tag library descriptor(TLD) 文件用来描述 Custom Tag。 TLD文件放在 /WEB-INF 下面某个指定目录内。

标记处理程序 标记处理程序,需要实现 tag handler 接口。 在 JSP 1.2 中定义了Tag、BodyTag、Iteration 接口。Web 容器会通过调用这些接口的特定方法调用Custom Tag 程序。 另外,JSP 提供了用来实现 tag handler 的方便类 TagSupport、BodyTagSupport 。

标记处理程序 一个 tag handler 可以通过 javax.servlet.jsp.PageContext 对象和 JSP 进行联系。在 tag handler 中有 setPageContext 设定其 PageContext。在运行中,tag handler 通过 PageContext 可以获得 JSP 的隐含对象(如 request、session、application等),并通过 setAttribute 和 getAttribute 方法读取和修改隐含对象的属性。

标记处理程序 如果 Custom Tag 套用另一个 Custom Tag,被套用的Custom Tag 的 tag handler 程序可以使用 getParent() 方法得到包含它的 tag 对象。

简单 Custom Tag-- tag handler 程序 public class TimeTag implements Tag { private PageContext pageContext; private Tag parent; private java.util.Calendar calendar; public TimeTag() { super(); } public int doStartTag() throws JspException { try { calendar = Calendar.getInstance(); pageContext.getOut().print( DateFormat.getDateInstance().format(calendar.getTime())+" "+ DateFormat.getTimeInstance().format(calendar.getTime()) ); } catch (IOException tage) { throw new JspException("TimeTag Error: "+ tage.getMessage()); return SKIP_BODY;

简单 Custom Tag-- tag handler 程序 public int doEndTag() throws JspException { return SKIP_PAGE; } public void release() { public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; public void setParent(Tag parent) { this.parent = parent; public Tag getParent() { return parent;

简单 Custom Tag-- tag handler 程序 程序使用了 Tag 接口,它主要实现了 doStartTag 方法和 doEndTag 方法。 当 Web 容器运行这个标记时,它会在读到标记起 始位置时调用 doStartTag方法。 doStartTag方法返 回一个SKIP_BODY值表明不用处理标记体。 当 Web 容器遇到标记的结尾时,调用其 doEndTag方法。doEndTag方法返回EVAL_PAGE 或 SKIP_PAGE,前者表示接着处理标记后面的 JSP内容,后者表示忽略标记后面的 JSP 内容。

简单 Custom Tag--TLD <tag> <name>time</name> <tag- class>jwadbook.taglib.TimeTag</tag-class> <body-content>empty</body-content> </tag>

<ics:time/> 示例 timetag.jsp <%@ taglib uri="http://www.icconcept.com/taglibs/sampleTag" prefix="ics" %> <HTML> <HEAD> <TITLE>TimeTagJSP</TITLE> </HEAD> <BODY BGCOLOR=white> <CENTER> <FONT COLOR='#009999' SIZE='4' face='Arial'> <STRONG>Using Custom JSP Tag to List Current Time </STRONG> </FONT> </CENTER> <HR/> <CENTER><H3> Current Time is: <ics:time/> </H3></CENTER> </BODY> </HTML>

使用简单Custom Tag 的timetag.jsp运行效果

带属性 Custom Tag 对于带属性的标记,在 tag handler 程序中需要对标记的每个属性进行定义。 标记 <ics:wordcount inputname=“input” warnEmpty=“true” /> 有两个属性。在WorldCountTag.java 中有 setInputname方法和 setWarnEmpty 方法。Web 容器会在处理标记时,对这些属性进行赋值。 TagSupport 类已经定义了名为 id 的属性,如果标记的 tag handler 程序继承 TagSupport 类就不需要声明 setId 方法。

带属性 Custom Tag—tag handler 程序 public class WordCount extends TagSupport { String inputname; boolean warnEmpty; String inputword; public void setInputname(String _inputname) { this.inputname = _inputname; } public void setWarnEmpty(boolean _warnempty) { this.warnEmpty = _warnempty;

带属性 Custom Tag—tag handler 程序 public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); inputword = pageContext.getRequest().getParameter(inputname); try { If ((inputword==null)&&(warnEmpty==true)) { out.println("<FONT color = 'red'> None Input Found! Input Again </FONT>"); } else if (inputword==null) { out.println("0"); } else { StringTokenizer st = new StringTokenizer(inputword); int wordnumber = st.countTokens(); out.println(wordnumber); } } catch (IOException ioe) { System.out.println ("Error: " + ioe.getMessage()); return EVAL_PAGE;

带属性 Custom Tag—tag handler 程序 <ics:wordcount> 标记可以计算表单中输入的单词数目。 “inputname” 属性定义了一个输入表单请求变量名称, “warnEmpty” 规定了当用户没有输入文字时,是否给出警告。 这个 tag handler 程序在 doEndTag 方法中使用 request.getParameter 得到特定的请求参数,然后将这个字符串内的单词数目计算并显示出来。

带属性 Custom Tag—TLD 在<tag> 中有 <attribute> 元素, <attribute> 中的<name> 指出了属性的名称,<required> 表明属性是否必须被设定(默认为否),<rtextprvalue> 设定是否 Web 容器要计算属性表达式的值(默认为否),<type>代表了属性的类型(默认为String)。 <tag> <name>wordcount</name> <tag-class>jwadbook.taglib.WordCount</tag-class> <body-content>empty</body-content> <attribute> <name>inputname</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <name>warnEmpty</name> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </tag>

带属性 Custom Tag—wordcounttag.jsp <%@ taglib uri="http://www.icconcept.com/taglibs/sampleTag" prefix="ics" %> … <form action="wordcounttag.jsp" method="post"> <TEXTAREA rows="10" cols="58" name="input">Enter A Brief Description Here</TEXTAREA> <BR></BR> Your have entered <ics:wordcount inputname="input" warnEmpty="true" /> words in the above text area. <INPUT type="submit" name="Submit" value="Count Words"></FORM> </form>

wordcounttag.jsp 输入界面

wordcounttag.jsp 输出统计结果

谢谢!