长篇连载:未被发掘的宝藏——JSP Tag Library (0分)

  • 主题发起人 主题发起人 yysun
  • 开始时间 开始时间
在新版大富翁中如何看到孙老师的文章?
 
>>在java world上看到几篇好文章,都是有关design pattern的
这里也有一些比较新的模式(PLoP2000):http://jerry.cs.uiuc.edu/~plop/plop2k/proceedings/proceedings.html
曹大虾看最新的jive程序了吗?里面也已经开始用tag了.
现在到处都在讲模式,用模式,甚至有适时系统模式,可是跟数据库相关的模式怎么那么少?
曹大虾给推荐几个?
 
delphiasp,您好,可以把孙老师关于tag libray的文章发给我吗,我的mail是/
sxy0594@sina.com,多谢
 
TO lazy_cat:
   发过去了,请收一下。
 
Jakarta Taglibs 又新出一批 Tag,象 XTag,DBTag 都是有趣实用的东西。
http://jakarta.apache.org/taglibs/index.html
 
什么时候发表,通知一下!!
 
<a href=/delphi/attachments/tomcat_tag_2.doc>
我怎么不能访问呀?谁给我发一下EMAIL呀?
wumengs@sina.com.cn
 
我也想先睹为快! 谢谢!
 
怎么我也访问不了呀?
 
等一等把,机子坏了
 
<a href=/delphi/attachments/tomcat_tag_2.doc>
我怎么不能访问呀?
谁给我发一下EMAIL呀?
將這几篇文章發給我.
kevinfu@21cn.com
 
在下有一简单的示例:
请大家多指教:
JAVA/JSP学习系列之七(Orion下自定义Tag)
一、前言 (本文译自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 intdo
StartTag() throws javax.servlet.jsp.JspException
{
return SKIP_BODY;

}
注意:这个方法返回 SKIP_BODY,就是标签的body为空的时候,将返回这个值,否则将返回:EVAL_BODY_INCLUDE
6.调用标签结束的实现方法
public intdo
EndTag() 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的头如下:
<?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">
3.描叙标签库
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>mt</shortname> <uri>http://www.orionserver.com/tutorials/tagtut/lesson1/mytags.jar</uri>
<info>My first Tag library</info>
4.描叙标签
<tag>
<name>helloWorld</name>
<tagclass>com.acme.mytags.HelloWorld</tagclass>
<bodycontent>empty</bodycontent>
<info>A Hello world Tag</info>
</tag>
5.结束
</taglib>
四、打包
名称为:mytags.jar
其目录结构为:
com/acme/mytags/HelloWorld.class
META-INF/taglib.tld
五、在jsp文件中使用自定义标签
建立hello.jsp如下:
<%@ taglib uri="mytags.jar" prefix="mt" %>
<HTML>
<HEAD>
<TITLE>Hello World!</TITLE>
</HEAD> <BODY BGCOLOR="#FFFFFF">
<HR>
<mt:helloWorld/>
<HR>
</BODY>
</HTML>
六、测试运行
在orion目录下,建立如下结构,其中,tag是自己建立的,前面的目录是本来就有的。
E:/orion/default-web-app/tag
将jar文件和jsp文件全部放到这个目录下。
然后,访问:
http://localhost:[port]/tag/hello.jsp
将出现:

--------------------------------------------------------------------------------

Hello World! 

--------------------------------------------------------------------------------
七、恭喜,你已经成功了!
附:mytags.jar和hello.jsp 文件本站下载地址:
http://www.wodejia.net/softdownload/java/orion_tag01.zip
本文转载自“我的家”----东方一蛇
http://www.wodejia.net/
 
为什么这么多人喜欢JSP,PHP,ASP呢? 没必要深入研究,现学现用
 
学习学习
 
to avant and all:
据说开创design pattern的那个人,后来在一次采访中承认,其实design pattern可以全部放弃...
不过这可能是纯C爱好者的谣言。
关于Tag,我总觉得Jarkata的tag功能太弱了。
而且没有针对性。
我在我自己的工程里也用了一些Tag.主要是用于用户验证。
贴一个:
这个是用于使当前叶面过期。
代码:
package com.beaconsystem.common.taglib;
import javax.servlet.http.*;
import javax.servlet.jsp.tagext.*;
/**
 * Insert the type's description here.
 * Creation date: (8/7/2001 1:46:01 PM)
 * @author: Administrator
 */
public class AlwaysExpires extends TagSupport {
/**
 * AlwaysExpires constructor comment.
 */
public AlwaysExpires() {
	super();
}
/**
 * Insert the method's description here.
 * Creation date: (8/3/2001 3:02:37 PM)
 * @return int
 * @exception javax.servlet.jsp.JspTagException The exception description.
 */
public intdo
StartTag() 
{
	HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
	response.addHeader("Cache-Control", "no-cache");
	response.addHeader("Expires", "Thu,  01 Jan   1970 00:00:01 GMT");
	return EVAL_BODY_INCLUDE;
}
}
再贴一个用于debug的,他可以列出reuqest传来的parameters.
改造一下也可以用于session.
代码:
package com.beaconsystem.common.taglib;
import javax.servlet.http.*;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
/**
 * Insert the type's description here.
 * Creation date: (8/9/2001 5:24:37 PM)
 * @author: Administrator
 */
public class RequestParameters extends TagSupport {
/**
 * RequestParameters constructor comment.
 */
public RequestParameters() {
	super();
}
/**
 * Insert the method's description here.
 * Creation date: (8/3/2001 3:02:37 PM)
 * @return int
 * @exception javax.servlet.jsp.JspTagException The exception description.
 */
public intdo
StartTag() 
{
	JspWriter out = pageContext.getOut();
	
	HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
		
	try
	{
		out.println("<table border=/"1/">");
		java.util.Enumeration e = request.getParameterNames();
		while (e.hasMoreElements())
		{
			String s = (String)e.nextElement();
			out.println("<tr><td>"+s+"</td><td>"+
					request.getParameter(s)+"</td></tr>");
		}
		out.println("</table>");
	}
	catch (Exception e)
	{
	}	
	return EVAL_BODY_INCLUDE;
}
}
 
纯C爱好者是什么意思呀?Code?C language?
design pattern也不是哪个人开创的吧?说Erich Gamma是总结前人经验规律,集其大成差不多:)
我个人不相信.这一段流行反权威的笑话,譬如说c创始人为了让写程序更不容易更容易得高薪而根据
清晰的pascal发明了易出错c,又有说Unix是把什么什么系统改复杂混乱而得,且都是创始人说,呵呵,
不会是一个笑话系列的吧? [:D]
 
谣言就是谣言喽~ [8D]
说老实话我对design pattern也是一知半解,可能是因为没有认真地用他去做过设计的原因。
不过我还是尽量学习。
avant兄,有没有发现有好的模式可以介绍的?
我有个同事正在玩TogetherJ,里面有很多pattern可以用。TogetherJ的好处在于它把编码和设计
结合在一起了。
avant兄在哪儿高就?
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部