分享
 
 
 

JSP学习笔记(九)-----JSP标签库

王朝java/jsp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

1.JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。它可以大大简化你在页面中输入各种录入框的代码(诸如此类的代码:<input type="text" name="taxpayerName" value = " ,<select name="collectionItemCode" class="required" style="width:200" ...),并使之结构化。

2.标签库(Tag libraries)提供了建立可重用代码块的简单方式。但是和COM和J2EE不同的是,你不需要掌握任何额外的技能就可以建立标签库:如果你会编写JSP页面,你就会建立标签库。最后,标签库还改进了Web应用程序的维护性。这种对维护性的改进表现在:轻易地在JSP页面上就实现了基于XML的可定制接口。

3.一个简单的标签由下面的元素构成:

⑴ JavaBeans:为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中。这些JavaBeans并不是标签库的一部分。不过它是你的代码库用来执行相关任务的基本代码块。

⑵ 标签处理:这是标签库的真正核心。一个标签处理器将引用它需要的任何资源(你的JavaBeans)和访问你的JSP页面的全部信息(pageContext对象)。JSP页面也会将所有已经被设置的标签属性和JSP页面上的标签体中的内容传送给标签处理器。在标签处理器处理完毕后,它将发回输出到你的JSP页面进行处理。

⑶ 标签库的描述(tld文件):这是一个简单的XML文件,它记录着标签处理器的属性、信息和位置。JSP容器通过这个文件来得知从哪里及如何调用一个标签库。

⑷ 网站的web.xml文件:这是你网站的初始化文件,在这个文件中,你定义了网站中用到的自定义标签,以及哪个tld文件用来描述每个自定义的标签。

⑸ 分发文件(一个WAR或者JAR文件):如果你想重用自定义标签的话,你需要一个方法来将它由一个项目转移到另一个项目中。将标签库打包为一个JAR文件是一个简单而且有效的方式。

⑹ 在你的JSP文件中作标签库声明:很简单,如果要用到该标签的话,只要在页面声明一下就可以,其后,你就可以在该JSP页面的任何地方使用它。

下面是一个实例

1. 先编写标签处理程序,ATMTag.java

//用标签处理程序来定义客户标签的工作

import javax.servlet.jsp.*;

//导入标签类的驱动

import javax.servlet.jsp.tagext.*;

import java.io.*;

import java.sql.*;

import java.math.*;

import java.util.*;

//实现TagSupport或BodyTagSupport接口

public class ATMTag extends TagSupport

{

Connection connect = null;

Statement state = null;

ResultSet result = null;

public ATMTag() throws ClassNotFoundException

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}

//抽象类Tag的方法,标签处理程序的初始化

public int doStartTag() throws JspTagException

{

//指导JSP引擎处理标签的体内容

return EVAL_BODY_INCLUDE;

}

//执行标签任务

public int doEndTag() throws JspTagException

{

try

{

//把输出写到JSP页面

JspWriter out=pageContext.getOut();

connect=DriverManager.getConnection("jdbc:odbc:test","sa","");

String strQuery = " Select cCounter_id, cAddress,mCashBalance from Counter where mCashBalance<=10000; " ;

System.out.println("Query: "+strQuery);

state = connect.createStatement();

ResultSet result = state.executeQuery(strQuery);

String sId=null;

String sAddress=null;

String sBalance=null;

Vector v=new Vector();

while(result.next())

{

sId = result.getString(1);

sAddress = result.getString(2);

sBalance = result.getString(3);

v.add(sId);

v.add(sAddress);

v.add(sBalance);

v.add(";");

}

for(int i=0;i<v.size();i++)

{

String str=(String)v.elementAt(i);

pageContext.getOut().write(str);

}

}catch(Exception ioe)

{

System.out.println(" Error in getting results"+ioe.toString());

}

//指出对JSP页面其余部分求值

return EVAL_PAGE;

}

}

2. 编写TLD文件的代码:

//XML验证文档

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

//标签库版本

<tlibversion>1.0</tlibversion>

//标签库依赖的JSP版本

<jspversion>1.1</jspversion>

//标签库名

<shortname>ATMjsp</shortname>

//关于标签库的详细信息

<info>A Tag library</info>

<tag>

//定义标签的名

<name>ATM</name>

//指出标签处理程序类

<tagclass>ATMTag</tagclass>

//此标签体的定义

<body-content>JSP</body-content>

//关于此标签与其功能的附加信息

<info>Outputs of the ATM counter</info>

</tag>

</taglib>

3. 错误页面errorpage.jsp的代码:

<html>

<body>

<%@ page isErrorPage="true" %>

<%=exception.getMessage() %>

</body>

</html>

4. 编写JSP文件:ATM.jsp

<%@ page import="ATMTag" %>

<%@ taglib uri="ATMjsp.tld" prefix="ATMjsp" %>

<%@ page errorPage="errorpage.jsp" %>

<!DocType HTML Public "-//W3C//DTD HTML 4.0 Translational//EN ">

<html>

<h3 align=center>ATM counters that needs Cash</h3>

<table>

<tr><td></td><td><ATMjsp:ATM/></td></tr>

</table>

</html>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有