专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » jsp自定义标签:Jsp中的自定义标签由浅到深详细讲解 »正文

jsp自定义标签:Jsp中的自定义标签由浅到深详细讲解

来源: 发布时间:星期六, 2009年2月21日 浏览:0次 评论:0
、基本概念:
8hx3s\(x,n\4K.Q/\
+K J!Y_[0P/}1.标签(Tag):
cyk9xnn$w7U|标签是种XML元素通过标签可以使JSP网页变得简洁并且易于维护还可以方便地实现同个JSP文件支持多种语言版本由于标签是XML元素所以它名称和属性都是大小写敏感 JAVA中文站社区门户!uI'J?0yx?
JAVA中文站社区门户#T| }U_wG*iK
2.标签库(Tag library):
w]iO1b m3{-T系列功能相似、逻辑上互相联系标签构成集合称为标签库 JAVA中文站社区门户Ei3I|:D t
JAVA中文站社区门户;|j#}&n9E @ C!Tf:I-I*|
3.标签库描述文件(Tag Library Descriptor): JAVA中文站社区门户w l r*D7^0W2f*Ye+d
标签库描述文件是个XML文件这个文件提供了标签库中类和JSP中对标签引用映射关系它是个配置文件和web.xml是类似 JAVA中文站社区门户j G;i'yN

7w(B%V CXH|B4.标签处理类(Tag Handle Class):
1WnH)[Re标签处理类是个Java类这个类继承了TagSupport或者扩展了SimpleTag接口通过这个类可以实现自定义JSP标签具体功能 JAVA中文站社区门户d+d)BWd7~ Ljs@

Jsa\ h,~ A-a2iN 2、自定义JSP标签格式: JAVA中文站社区门户[d0w e#v!@4uL

:N-gX4Q4I+t#Wj1. JAVA中文站社区门户 ~7G){D1XU

QdJ5^YJ[<% @ taglib prefix=”someprefix” uri=”/sometaglib” %>JAVA中文站社区门户hE5oo3vG a[

$HoH R$a1}Ko:O#RJAVA中文站社区门户qPe3~5?V
为了使到JSP容器能够使用标签库中自定义行为必须满足以下两个条件:
&aw Oq0VqW(v1.从个指定标签库中识别出代表这种自定义行为标签
8x/fp{T]H2.找到实现这些自定义行为具体类 JAVA中文站社区门户Coni{
JAVA中文站社区门户P obUr Tj-R0`1S
个必需条件-找出个自定义行为属于那个标签库-是由标签指令前缀(Taglib Directives Prefix)属性完成所以在同个页面中使用相同前缀元素都属于这个标签库每个标签库都定义了个默认前缀用在标签库文档中或者页面中插入自定义标签所以你可以使用除了诸如jsp,jspx,java,servlet,sun,sunw(它们都是在JSP白皮书中指定保留字)的类前缀 JAVA中文站社区门户s]rK*L5h
 
O{c$K^uri属性满足了以上第 2个要求为每个自定义行为找到对应这个uri包含了容器用它来定位TLD文件在TLD文件中可以找到标签库中所有标签处理类名称 JAVA中文站社区门户+m,QpP)Tp%l

/Q_-kN:{&v[2.JAVA中文站社区门户2P!U [ nmTNZ7j8d
<someprefix:sometag key=”somevalue”/>JAVA中文站社区门户Sv8~ Ky*Mx!N,Y

v/eX[2H@4j&i Z 当web应用启动时容器从WEB-INF文件夹目录结构META-INF搜索所有以.tld结尾文件也就是说它们会定位所有TLD文件对于每个TLD文件容器会先获取标签库URI然后为每个TLD文件和对应URI创建映射关系
!kz&ie'U*M|G在JSP页面中我们仅需通过使用带有URI属性值标签库指令来和具体标签库匹配 JAVA中文站社区门户0P3z _b/I f/oIU
JAVA中文站社区门户 x'G`/r1y(}
3、自定义JSP标签处理过程:
p \j2i5n#E,udTJAVA中文站社区门户$Y5fL QG&W F}| U-t$w
1.在JSP中引入标签库:
q Uk&` K nh2.在JSP中使用标签库标签:
/HS C-FR'{Q&q3.Web容器根据第 2个步骤中prefix获得第个步骤中声明tagliburi属性值 JAVA中文站社区门户r}Z6R h g&U
4.Web容器根据uri属性在web.xml找到对应元素
*a*X T(|5K7Z"j m5.从元素中获得对应元素JAVA中文站社区门户3X7xs(TDw
6.Web容器根据元素值从WEB-INF/目录下找到对应.tld文件
X4O!K[h }/S7.从.tld文件中找到和tagname对应元素 JAVA中文站社区门户jDp:p ~~
8.凑元素中获得对应元素JAVA中文站社区门户GDxC3uW^ a
9.Web容器根据元素值创建相应tag handle 例子 JAVA中文站社区门户(MQY1I&i d
10. Web容器这个例子doStartTag/doEndTag思路方法完成相应处理
)j,F}Fw7JU9{ n
-xndy8N8H 4、创建和使用个Tag Library基本步骤:
K'v-zO'?'_8DJAVA中文站社区门户s/yN~+r ns*l
1.创建标签处理类(Tag Handler Class)
h*Y DI r,p!`'s2.创建标签库描述文件(Tag Library Descrptor File) JAVA中文站社区门户a[H$l'N!PX3b p
3.在web.xml文件中配置元素 JAVA中文站社区门户hS3?Rr Ol
4.在JSP文件中引人标签库
#xx'f Q5F$C
mtH#dc0~0M 5、TagSupport类介绍:
"C4u7l4`V4C
fpl4]L b6X2h`C1.处理标签类必须扩展javax.servlet.jsp.TagSupport. JAVA中文站社区门户'O"Z%Uj(` @
2.TagSupport类主要属性: JAVA中文站社区门户C&p,w1^#w'g+c-X
JAVA中文站社区门户-@a{ze*?&P
A.parent属性:代表嵌套了当前标签上层标签处理类
RB7XP#A2UB.pageContex属性:代表Web应用中javax.servlet.jsp.PageContext对象 JAVA中文站社区门户)e#c |1K5Z;A(df)p
JAVA中文站社区门户Wi+Cw!^\ O6Sj
3.JSP容器在doStartTag或者doEndTag思路方法前会先PageContext和Parent思路方法设置pageContext和parent因此在标签处理类中可以直接访问pageContext变量 JAVA中文站社区门户"[S7U!U6nA8Y
JAVA中文站社区门户3fX {0f5~ `0x8{M[ |
4.在TagSupport构造思路方法中不能访问pageContext成员变量此时JSP容器还没有 JAVA中文站社区门户'dC P Zv| MK,o
PageContext思路方法对pageContext进行JAVA中文站社区门户r}7H4x3x |`i4w
JAVA中文站社区门户ZbN5to7M Etd Lp"D
6、TagSupport处理标签思路方法:
'cJN*i!rfPeGRxPJAVA中文站社区门户*C-f!I%P4g3?vw SM
1.TagSupport类提供了两个处理标签思路方法: JAVA中文站社区门户k0W|8V+O,K
public doStartTag throws JspException
W j2HGr FZpublic doEndTag throws JspException JAVA中文站社区门户'y$K&H!me!J[Ul

H;r"v"t%x6^9s2.doStartTag:但JSP容器遇到自定义标签起始标志就会doStartTag思路方法 JAVA中文站社区门户m6F4zx$UG{Q
doStartTag思路方法返回个整数值用来决定后续流程 JAVA中文站社区门户 B!~Jc8s I"Q.H4VI
A.Tag.SKIP_BODY:表示…的间内容被忽略 JAVA中文站社区门户lg%g)qt g{Vh
B.Tag.EVAL_BODY_INCLUDE:表示标签的间内容被正常执行
3z E w"y\
@aq|5@^\3.doEndTag:但JSP容器遇到自定义标签结束标志就会doEndTag思路方法doEndTag
+V pgt]3C/G(g V2p"M思路方法也返回个整数值用来决定后续流程
|7h^ L*zA.Tag.SKIP_PAGE:表示立刻停止执行网页网页上未处理静态内容和JSP均被 JAVA中文站社区门户 m"i%_BD?mY
略任何已有输出内容立刻返回到客户浏览器上 JAVA中文站社区门户1X~2V)l/`
B.Tag_EVAL_PAGE:表示按照正常流程继续执行JSP网页 JAVA中文站社区门户(~-b!r1^"H,H JDH
JAVA中文站社区门户%U%rHf"Z_0z
7、用户自定义标签属性:
%c%e(JF s }[x*x
\Y9ln AXt#OX如果在标签中还包含了自定义属性例如:
K7AA7~&u
0~1|p)Kw... JAVA中文站社区门户/S0vT!p2]7tZ&Rb

GS(]4z"T6o那么在标签处理类中应该将这个属性作为成员变量并且分别提供设置和读取属性思路方法
]K|y$z%J/U?/J H
w;epNU:F 8、创建标签处理类步骤:
"yl v7O1w1\JAVA中文站社区门户(yW/E"eoV
1.创建包含JSP网页静态文本文件(即是要替换自定义JSP标签文本) JAVA中文站社区门户 Au*P#QV-V,d b/l
2.在Web应用启动时装载静态文本
zK,b"o X1w}3.创建标签处理类
`)y g5^.Hy X#cJAVA中文站社区门户 |$I2r ])P g
9、如何创建包含JSP网页静态文本文件: JAVA中文站社区门户/ymPbdgRm"^
JAVA中文站社区门户7B5|$S r(h
1.使用java.util.Properties类来存放要替换网页中自定义JSP标签静态文本 JAVA中文站社区门户'J|5l^zw
2.Properties类代表了系列属性集合其例子既可以被保存到流中也可以从流中加 JAVA中文站社区门户t(NB-DE2g3i
这些文本以key/value形式存放在WEB-INF目录下例如key=value在属性列表中
GbQ!ljA8S这些key/value都是String类型 JAVA中文站社区门户 Pv)}yC

1Z6w"nR?H(D9\8i\7^十、Properties类常用API:
8t-c py;ZO1XR.V
(f$o{/|Xe1.Property(String key, String value):Hashtable类put思路方法添加属性 JAVA中文站社区门户C{ fs'O,F cR
2.getProperty(String key):获取属性列表中key对应属性值 JAVA中文站社区门户:?MGqg"AX}-JjY
3.load(InputStream in):从输入流对象InputStream中读取属性列表(Properties list)
Y2U.paT&j @4.store(OutputStream out,String comment):使用适当格式将属性列表属性对写入输 JAVA中文站社区门户7[kE0`Q'h'@ q
出流对象中默认使用ISO-88590-1编码格式,以行方式处理输入属性key/value的
#t!i3Dv)}(O)G&Pn1M-v间以”=、:”配对以回车、换行分隔key/value对
b_W1Pl$ba.vWJAVA中文站社区门户3co%jo_(E0j7r
、ServletContext类常用API:
K[P T Vu qQr(a[-s
[-f^%r ~-|p%C,H2{1.getContext(String uripath):返回服务器中uripath所代表ServletContext对象
rw hmF(nG2.getInitParameter(String name):返回ServletConfig对象中name参数
jm+[v do3.getMineType(String file):返回file参数代表文件MIME类型 JAVA中文站社区门户5RGf k`;g@
4.getRequestDispatcher(String path):返回path代表RequestDispacher对象
+K0AfT-gd5.getResourceAsStream(String path):以输入流形式返回path对应资源在输入留中对象可以为任意形式数据path参数必须以“/”开始且相对于Context Root
yU pi$qyov/cG~#Z
rs,@iK kfSXj十 2、如何使用ServletContxt读取并保存属性文件: JAVA中文站社区门户:p[K5]?x-eX9w

G E6|QaRufo4m1aE1.创建java.util.Properties类对象
7@:D)an2c s2Z*B2.获取ServletContext对象
'RX3V#W+{6t$Q'\3.将属性文件以输入流形式读入到某个输入流对象中
iM!H-l1k:Xz x4.将输入流对象加载到Properties对象中 JAVA中文站社区门户*J1]7I K~X#S5k(X
5.将Properties对象保存到ServletContext对象中
'D P'A.R^
V]"XWiI十 3、如何在Web应用启动时装载静态文本:
,~(SF%m({_.`JAVA中文站社区门户 tgx }~
1.创建继承了HttpServlet类子类在web.xml中配置这Servlet时设置load-on-startup属性:
j p!hrE U}a9KZJAVA中文站社区门户D,?(Khf Z:kH
some JAVA中文站社区门户kqj s'b0m{!ihO
somepackage.SomeClass1
lVys0Nuv5ApJAVA中文站社区门户UV1v?:Z E:G|
2.在这个Servletinit思路方法中创建java.util.Properties类 JAVA中文站社区门户&V3hQWu2F.p"]mY7r
3.获取当前Web应用ServletContext对象 JAVA中文站社区门户9`1u V!Y"wX9c
4.将WEB-INF目录下属性文件读入到输入流InputStream中:
V Bmcr!q&nInputStream in = context.getResourceAsString("WEB-INF/someproperties.properties");
#TT,a;CjX#P'C5.将输入流加载到属性对象中
/l&am@Y+_!Ka]ps.load(in); JAVA中文站社区门户`7o2n#kTyg;\!z
6.将属性对象保存到上下文中
$[n.~)a4YLcontext.Attribute("attributeName",ps); JAVA中文站社区门户F)S!Q&t:e%RzD

V]w K[2Vq"|8TL"q十 4、如何创建标签处理类: JAVA中文站社区门户;xb5aA"]7Vxl_x~D
JAVA中文站社区门户1GqTt0y\/~j
1.引入必需资源:
%X0EC[ ty {+]import javax.servlet.jsp.*; JAVA中文站社区门户 HUo9bk!~
import javax.servlet.http.*; JAVA中文站社区门户n s Y'tA {2g/TiE Z
import java.util.*; JAVA中文站社区门户YKh V}$I
import java.io.*; JAVA中文站社区门户t ~2f D4T&m'?
2.继承TagSupport类并覆盖doStartTag/doEndTag思路方法
"p/p5P%|7C#h3.从ServletContext对象中获取java.util.Properties对象 JAVA中文站社区门户(y5d z8?Y;qocJU3RYr
4.从Properties对象中获取key对应属性值 JAVA中文站社区门户4_$jF"jd
5.对获取属性进行相应处理并输出结果 JAVA中文站社区门户b$\/[-DM5Vb
JAVA中文站社区门户Ck$J7pB3C5Umse d
十 5、创建标签库描述文件(Tag Library Descriptor): JAVA中文站社区门户0N#Lb@-~mZ;f

"F"|!Q'}R$\1.标签库描述文件简称TLD采用XML文件格式定义了用户标签库TLD文件中元素可以分成3类:
ok:M:ChSq(S\A.:标签库元素 JAVA中文站社区门户4?w%w_w#Y%g Y*J/i
B.:标签元素 JAVA中文站社区门户;I|5j6}BB4G I:{
C.:标签属性元素 JAVA中文站社区门户w1X.uI\7^,IvP2d

i5a N?qj2BOz2.标签库元素用来设定标签库相关信息常用属性有: JAVA中文站社区门户Y4H eHP(zr2^D\*V
A.name: 指定Tag Library默认前缀名(prefix)
7k2ckO5VuB.uri: 设定Tag Library访问表示符
2^y#{"KM i
1i.n;G2M)T:T4d4bZ3.标签元素用来定义个标签常见属性有: JAVA中文站社区门户0eG$G%s~3|a
A.name: 设定Tag名字
+fgWM:Wm4fB.tag: 设定Tag处理类 JAVA中文站社区门户 un$k)bg
C.bodycontent: 设定标签主体(body)内容 JAVA中文站社区门户:Yj;K&d{+Z$w[x-Y
1).empty:表示标签中没有body JAVA中文站社区门户d&mf@7i7H-^w
2).JSP:表示标签body中可以加入JSP代码
/o}0\dOAB3).tagdependent:表示标签中内容由标签自己去处理
NY:bZ Y{(?^oJAVA中文站社区门户y8Dx EG)} \
4.标签属性元素用来定义标签属性常见属性有: JAVA中文站社区门户5@0m~v"WC'fa
A.name:属性名称 JAVA中文站社区门户4}d lU#k({
B.required:属性是否必需默认为false
pFdS d|P@?GC.rtexprvalue:属性值是否可以为request-time表达式也就是类似于表达式 JAVA中文站社区门户N.f)~f%M5{J ~

9{j9G!gH)qYu十 6、在Web应用中使用标签: JAVA中文站社区门户,k1C7P*LP6Pq4|CZFy;q
JAVA中文站社区门户3A0],u5{(ng*m-g
1.如果Web应用中用到了自定义JSP标签则必须在web.xml文件中加入元素它用于声明所引用标签所在标签库 JAVA中文站社区门户L Bk2`^

Oy-h5{#u!WN7`o/sometaglib JAVA中文站社区门户6zI@k,~*G
/WEB-INF/someTLD.tld
6M1J2cP[i FC`V5I0[
{8?+sdl zD2.:设定Tag Library标示符在Web应用中将根据它来引用Tag Libray
I)ZQ5G;N AMi3.:指定和Tag Library对应TLD文件位置
,wd8C nV+niOG4.在JSP文件中需要加入 JAVA中文站社区门户 |z+d3\#d*m

;A1}^2fvOo8^)c{2M~5.prefix表示在JSP网页中引用这个标签库标签时前缀uri用来指定Tag Library标识符它必须和web.xml中属性保持

TAG: JSP Jsp 定义 讲解
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: