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

原创 2004年08月29日 17:13:00

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

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

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

import javax.servlet.jsp.*;

//导入标签类的驱动

import javax.servlet.jsp.tagext.*;

import java.io.*;

import java.sql.*;

import java.math.*;

import java.util.*;

//实现TagSupportBodyTagSupport接口

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>

 

 

 


 

如何彻底禁止查看网页源代码

网页制作者经常遇到精心制作的java script特效被别人抄袭,而自己对此却无可奈何的情况。面对这 一困扰,有没有方法可以解决呢?使用ASP、JSP等服务器端编程技术可以实现对网页源代码的保护,但...
  • u010005056
  • u010005056
  • 2013年12月07日 02:05
  • 1880

springmvc浏览器显示jsp源码解决办法

url-pattern问题 spring用到forward(“/WEB-INF/jsp/*.jsp”) 而forward当然是又要经过web.xml的映射的, 然后,在URL匹配时, / ...
  • javaloveiphone
  • javaloveiphone
  • 2016年09月06日 15:04
  • 4785

30套JSP网站源代码合集

原文地址:http://blog.chinaunix.net/uid-25454054-id-3454211.html JSP技术是以Java语言作为脚本语言的,JSP网页为整个服务器端的Jav...
  • xunbaogang
  • xunbaogang
  • 2016年07月30日 10:35
  • 6800

JSP管理系统的完整的源码,调试运行的大体步骤

2010年06月03日 星期四18:59 1、把系统拷到tomcat的webapps下面去 2、把数据库创建起来 3、修改数据库的配置文件,然后启动TOMCAT -------...
  • ruglcc
  • ruglcc
  • 2013年03月26日 21:27
  • 2580

马士兵 Servlet_JSP(2) JSP源代码)

1.最简单的JSP HelloWorld.jsp             Hello                                     out.pr...
  • u012463017
  • u012463017
  • 2015年04月23日 20:21
  • 864

Tomcat根据JSP生成Servlet机制深度剖析及核心源代码详解

1、jsp全称java server pag。。java服务器端的页面 2、在传统的网页html文件(*htm,*html)里面加入了java程序片段和jsp标签,就构成了jsp。 3、java片...
  • sunshine940326
  • sunshine940326
  • 2015年07月02日 14:13
  • 741

关于JSP源码泄漏问题的总结分析

www.2cto.com:09年的一篇老文章了 JSP编程语言自从推出之日起,由于它的快速、平台无关、可扩展、面向对象等特性得到了越来越广泛的应用,越来越多的厂家开发出了各种各样的支持平台如IB...
  • wauit
  • wauit
  • 2015年08月10日 13:13
  • 2176

基于jsp+servlet的个人博客系统

这学期的课程,算是结束了吧。开了一门JAVA EE的课程,老师我就不说了,讲了一学期的jsp,真像其他老师说的一样,“不像某老师一样,会个jsp,准备个课件,能讲好几年”。呵呵了。不过还好,很多东西,...
  • HLK_1135
  • HLK_1135
  • 2017年01月09日 18:55
  • 4016

pdf文档的下载与查看 jsp页面

文件下载 Controller层代码  @RequestMapping("/download")public static ResponseEntity(Byte[])  downloadPd...
  • u013604031
  • u013604031
  • 2015年09月23日 13:46
  • 1336

开源Java(JSP) CMS系统源码推荐

原文链接:http://blog.chinaunix.net/uid-148384-id-2782709.html 1.InfoGlue infoglue是一个高级的、可扩...
  • zfq559
  • zfq559
  • 2016年06月20日 17:26
  • 2360
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSP学习笔记(九)-----JSP标签库
举报原因:
原因补充:

(最多只允许输入30个字)