自定义标签

来源:互联网 发布:华为网络摄像头 编辑:程序博客网 时间:2024/06/02 23:53

案例

问题的提出:现在要显示所有员工的资料,提出解决方案

传统方法:1. 在JSP里面写JDBC查询;2. 在JavaBean中写JDBC查询,在JSP中使用查询结果。

新的方法:能否使用一个标签(类似于html标签)嵌入到JSP文件中,让它自动显示这些信息?

答案:能。技术基础:XML。

标签种类

1. 空标签,没有属性,也没有体

    例:<html:submit/>

2. 空体标签,有属性,没有体

    <bean:writename=”student”/>

3. 有属性有体标签

    <logic:iterateid=”book” name=”books”>

           <bean:write name=”book”/>

    </logic:iterate>

自定义标签的要素

1. 标签处理程序(一个java文件,已经被编译):使用不同的方法与对象来定义标签的行为i,即认识某属性的不同值能做不同的事情。

2. 标签库描述符(TLD)文件(一个XML格式文件):包含客户标签的描述性列表的XML文件,即识别不同的属性能做不同的事情。

3. JSP文件(为了嵌入自定义的标签):包含标签以及表示内容的HTML代码。

标签处理程序(一个java文件)

作用:包含类和方法的定义,定义标签的功能

对于空体标签,需要继承:javax.servlet.jsp.tagext.TagSupport

对于有体标签,需要继承:javax.servlet.jsp.tagext.BodyTagSupport

以上两个类都实现:Javax.servlet.jsp.tagext.Tag接口

Tag接口中的方法:

doStartTag():初始化标签的一些内容,如连数据库

doEndTag():作一些善后工作,如关数据库

release():释放这个标签对象

doAfterBody():完成标签体求值之后的调用

doBeforeBody():开始标签体求值之前调用

一般,无体标签doStartTag()返回SKIP_BODY,让标签不要对体求值,doEndTag()返回EVAL_PAGE,让标签后面的JSP继续执行;有体标签doStartTag()返回EVAL_BODY_TAG,让标签对体求值,doEndTag()返回EVAL_PAGE,让标签后面的JSP继续执行;对于标签里面的属性,类似于JavaBean中给它们编写getset方法。

一般情况下的标签处理程序包含以下函数:

构造函数:用于进行这个标签解释时的初始化,如连接数据库

doStartTag():返回对这个标签的处理方法

doEndTag():做一些善后工作,如数据输出,关闭数据库等各种属性的getset函数

最厉害的角色:pageContext保护成员。

标签库描述符(TLD)文件(一个XML文件)

TLD文件:为包含标签库描述的xml文件;包含库中所有客户标签的列表与描述。

实现空标签

新建MyTag项目,编写标签程序处理类DisplayAllTag,代码如下

 编写EmployeeDao类,代码如下

 编写Employee类,代码如下

编写emp.tld文件,一般是放在WEB-INF目录下面,系统自动识别到,代码如下

 编写displayAll.jsp文件,代码如下

 部署项目,启动服务器,运行页面,得到正确的结果。

实现空体标签(不显示所有员工,比如按部门显示)

编写标签程序处理类DisplayByJobIDTag,代码如下

 在EmployeeDao中添加按JobID查询的方法,代码如下

 在emp.tld中新增标签项,代码如下

 编写displayByJobID.jsp文件,代码如下

 部署项目,启动服务器,运行页面,得到正确的结果。

 

原创粉丝点击