JAVA/JSP学习系列之七


Posted in PHP onOctober 09, 2006

一、前言 (本文译自Orion官方站点)

本文将一步一步介绍在Orion Application Server下定义自己的标签,然后,实现该标签的功能,最后用一个jsp例子测试。

二、建立标签,实现该标签的功能。

1.命名package为:com.acme.mytags(为了和原文相同,我不做改动)

package com.acme.mytags;

2.import相关class

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

3.实现javax.servlet.jsp.tagext.Tag接口:

public class HelloWorld implements Tag

{

4.定义局部变量

private PageContext pageContext;

private Tag parent;

5.调用标签开始的实现方法

public int doStartTag() throws javax.servlet.jsp.JspException

{

return SKIP_BODY;

}

注意:这个方法返回 SKIP_BODY,就是标签的body为空的时候,将返回这个值,否则将返回:EVAL_BODY_INCLUDE

6.调用标签结束的实现方法

public int doEndTag() throws javax.servlet.jsp.JspException

{

try

{

pageContext.getOut().write('Hello World!');

}

catch(java.io.IOException e)

{

throw new JspException('IO Error: ' + e.getMessage());

}

return EVAL_PAGE;

}

这样将在jsp文件的自定义标签结束地方输出“Hello World!”

7.还不够,我们还要写下面的方法:

public void release() {}

对于本简单的例子,上面的方法不需要任何实现。

8.JSP的容器要调用下面的方法:

public void setPageContext(final javax.servlet.jsp.PageContext pageContext) {

this.pageContext=pageContext;

}

JSP容器通过上面的方法调用标签,而且上面的方法用来设置标签的PageContext.

9.JSP的容器还要调用下面的方法:

public void setParent(final javax.servlet.jsp.tagext.Tag parent)

{

this.parent=parent;

}

JSP容器通过上面的方法设置标签的parent-Tag,因为每个标签的PageContext都要保留它的parent标签。

10.最后,实现方法:

public javax.servlet.jsp.tagext.Tag getParent()

{

return parent;

}

}

11. 编译标签。

三、描叙标签

现在将要写一个描叙文件,描叙该标签。

1.建立一个taglib.tld文件,

2.taglib.tld是一个XML格式的文本文件,XML的头如下:

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

3.描叙标签库

1.0

1.1

mt http://www.orionserver.com/tutorials/tagtut/lesson1/mytags.jar

My first Tag library

4.描叙标签

helloWorld

com.acme.mytags.HelloWorld

empty

A Hello world Tag

5.结束

四、打包

名称为:mytags.jar

其目录结构为:

com/acme/mytags/HelloWorld.class

META-INF/taglib.tld

五、在jsp文件中使用自定义标签

建立hello.jsp如下:

六、测试运行

在orion目录下,建立如下结构,其中,tag是自己建立的,前面的目录是本来就有的。

E:oriondefault-web-app ag

将jar文件和jsp文件全部放到这个目录下。

然后,访问:

http://localhost:[port]/tag/hello.jsp

将出现:
------------------------------------------------------------------
Hello World!
------------------------------------------------------------------

七、恭喜,你已经成功了!

附:mytags.jar和hello.jsp 文件本站下载地址:

http://www.wodejia.net/softdownload/java/orion_tag01.zip(出处:viphot.com)

PHP 相关文章推荐
php实现快速排序法函数代码
Aug 27 PHP
PHP运行模式的深入理解
Jun 03 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
php缓冲输出实例分析
Jan 05 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
PHP实现的文件操作类及文件下载功能示例
Dec 24 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
php抽象类和接口知识点整理总结
Aug 02 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
Sep 13 PHP
PHP开发大型项目的一点经验
Oct 09 #PHP
JAVA/JSP学习系列之六
Oct 09 #PHP
PHP的宝库目录--PEAR
Oct 09 #PHP
PHP中调用JAVA
Oct 09 #PHP
PHP数据库操作面向对象的优点
Oct 09 #PHP
PHP5中MVC结构学习
Oct 09 #PHP
PHP5/ZendEngine2的改进
Oct 09 #PHP
You might like
php REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
比较全的PHP 会话(session 时间设定)使用入门代码
2008/06/05 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
javascript之锁定表格栏位
2007/06/29 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
js常用排序实现代码
2010/12/28 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
理解javascript异步编程
2016/01/27 Javascript
js创建数组的简单方法
2016/07/27 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
python计数排序和基数排序算法实例
2014/04/25 Python
Python中取整的几种方法小结
2017/01/06 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
python3.7 的新特性详解
2019/07/25 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
物业管理专业求职信
2014/06/11 职场文书
室内趣味活动方案
2014/08/24 职场文书
党员作风建设自查报告
2014/10/23 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书