a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 211|回复: 3

[基础知识] JAVA认证考试基础知识笔记30

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
JSP自定义标签由浅到深详细讲解  一、基本概念:# U) b2 p" a: y, m
   
! d8 p& U6 `: O    1.标签(Tag):标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的" H8 H1 B0 s0 Q2 u
    ) J4 \" Z/ b& P8 C+ {6 |
    2.标签库(Tag library):由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。6 Y  k( o9 U1 u; I! v
    2 w0 \0 s, R- L3 r0 m
    3.标签库描述文件(Tag Library Descriptor):标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的。
/ Y8 }6 v$ J8 e5 |- {4 b. |  x1 J      M) J# b# S$ O! D
    4.标签处理类(Tag Handle Class):标签处理类是一个Java类,这个类继承了TagSupport或者扩展了SimpleTag接口,通过这个类可以实现自定义JSP标签的具体功能
3 m# R. C6 ^9 s* v$ F6 L    ( O0 x3 X6 h# N$ b& h* `9 C
    二、自定义JSP标签的格式:
) y+ N6 t0 x6 X; @! {- _+ V   
5 b2 {" }- J1 v/ K" ^1 s     1.为了使到JSP容器能够使用标签库中的自定义行为,必须满足以下两个条件:1 F3 {$ r- B3 {7 A: T' c
   
0 q! I) K. B2 }' r    ◆从一个指定的标签库中识别出代表这种自定义行为的标签
, Q( E$ u+ L3 C9 A: v   
2 c4 L) H) |0 N" [    ◆找到实现这些自定义行为的具体类
6 c5 ^# L5 U( ]2 Q0 b& B7 W   
; s" W# b# F. t; ]8 S    第一个必需条件-找出一个自定义行为属于那个标签库-是由标签指令的前缀(Taglib Directive's Prefix)属性完成,所以在同一个页面中使用相同前缀的元素都属于这个标签库。每个标签库都定义了一个默认的前缀,用在标签库的文档中或者页面中插入自定义标签。所以,你可以使用除了诸如jsp,jspx,java,servlet,sun,sunw(它们都是在JSP白皮书中指定的保留字)之类的前缀。
+ {6 q" Y( {5 }8 J   
$ ?* @( Y% O1 Z& E& M    uri属性满足了以上的第二个要求。为每个自定义行为找到对应的类。这个uri包含了一个字符串,容器用它来定位TLD文件。在TLD文件中可以找到标签库中所有标签处理类的名称
1 Q# y$ f1 Y. D7 r7 A4 i# l7 v   
  {: K7 p3 I5 m    2. 当web应用程序启动时,容器从WEB-INF文件夹的目录结构的META-INF搜索所有以。tld结尾的文件。也就是说它们会定位所有的TLD文件。对于每个TLD文件,容器会先获取标签库的URI,然后为每个TLD文件和对应的URI创建映射关系。5 N3 B( V  j! O( V% _
    2 I# k* \8 e5 p6 U$ Z
    在JSP页面中,我们仅需通过使用带有URI属性值的标签库指令来和具体的标签库匹配/ u& }2 K' i+ ?/ |9 x8 c$ U
    % V5 ?' l5 u! ]. X8 J1 g' K" P
    三、自定义JSP标签的处理过程:
+ T0 ~  I) t. o    * z! V2 `- g! N1 f! p
    1.在JSP中引入标签库:
  E9 s& D9 S" r4 I; N& t   
" @  L  r& t0 r  d0 E   
0 I! U1 m/ W! G1 E  F# w5 o! k; {    : ~3 c( i$ X3 }0 W; d1 J' |
    2.doStartTag:但JSP容器遇到自定义标签的起始标志,就会调用doStartTag()方法。1 ~; _$ J" m: ~" V+ j$ G% L
   
' y/ S3 f7 M& R+ |: t    doStartTag()方法返回一个整数值,用来决定程序的后续流程。
, `1 I8 j' R) Q" X- p7 X) ]    + S. d3 X; \+ _# i. h; V6 Z* j
    A.Tag.SKIP_BODY:表示?>…之间的内容被忽略
0 t, ~1 G, ]" f/ E* L' a   
6 l7 z" J" U/ Z& h% p    B.Tag.EVAL_BODY_INCLUDE:表示标签之间的内容被正常执行
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:28 | 显示全部楼层

JAVA认证考试基础知识笔记30

3.doEndTag:但JSP容器遇到自定义标签的结束标志,就会调用doEndTag()方法。doEndTag()方法也返回一个整数值,用来决定程序后续流程。
$ y2 @8 g" }, b# Y# t: D  b& X   
1 R, P# K8 v' d$ U/ L+ i    A.Tag.SKIP_PAGE:表示立刻停止执行网页,网页上未处理的静态内容和JSP程序均被忽略任何已有的输出内容立刻返回到客户的浏览器上。
; v7 [) Z; f0 J" {' x. M    5 O0 P8 }  h6 ?' h- u
    B.Tag_EVAL_PAGE:表示按照正常的流程继续执行JSP网页4 t  k5 g( G. @$ o' ]% z  E1 Q3 Q
    " I  s2 ?5 r: c. V0 B' P; @
    七、用户JSP自定义标签属性:
' I5 \. p$ o9 y6 X. D5 \    - |% Q- Z) D% `5 E3 j& l6 Q' O7 |! [
    如果在标签中还包含了自定义的属性,那么在标签处理类中应该将这个属性作为成员变量,并且分别提供设置和读取属性的方法。
6 J5 N$ d; `, Y4 `4 m+ r! h9 u7 e/ j    9 g8 d+ C- y: \- E. k. I
    八、创建标签处理类的步骤:
; f7 s- o( ?9 Z& W, z    7 Y8 e2 T* v9 i; X( p
    1.创建包含JSP网页静态文本的文件(即是要替换JSP自定义标签的文本)% v5 b9 S9 j4 a6 a0 T5 B0 E) V
   
  @& v( ?+ F8 P& y( r" {5 `) a    2.在Web应用启动时装载静态文本
5 L. d3 d& s" V: N8 n    ) y0 q; \6 Y* ]2 f% ~6 ^0 ~3 {- m
    3.创建标签处理类# n( L0 B( Z4 I1 f$ j: @
    ) Q) A" M: s/ e) V/ I# N
    九、如何创建包含JSP网页静态文本的文件:" S" I3 i4 g! x) v1 J7 k
   
$ I) z' F3 o8 Z9 r    1.使用java.util.Properties类来存放要替换网页中JSP自定义标签的静态文本- _! ?0 C0 S: ^$ U
    , E* k; V. E" T- B
    2.Properties类代表了一系列属性的集合,其实例既可以被保存到流中,也可以从流中加载。这些文本以key/value的形式存放在WEB-INF目录下,例如key=value,在属性列表中这些key/value都是String类型的
; }7 H' K- z7 V) H& Q% i( n, J   
$ Q9 L- ?  s1 R    十、Properties类的常用API:
" D# J) U6 M: a. P6 F    ' C  z4 O' q) M5 G, Z9 S) g6 H
    1.setProperty(String key, String value):调用Hashtable类的put方法添加属性, v/ s( F* l2 \( Z' j* u
    3 F/ K4 |1 x2 ^; J- r- r- \' \
    2.getProperty(String key):获取属性列表中key对应的属性值
( f7 W9 h# C: L  O2 d, w. y" l   
" G9 H' h7 n5 u# h8 R    3.load(InputStream in):从输入流对象InputStream中读取属性列表(Properties list)
, K! n9 ~: j, Z7 s9 @   
4 L1 Z) X2 [$ c    4.store(OutputStream out,String coMMent):使用适当的格式将属性列表的属性对写入输出流对象中,默认使用ISO-88590-1编码格式,以行的方式处理输入。属性的 key/value之间以"=、:"配对,以回车、换行分隔key/value配对# y; u1 b2 {6 s+ g, ^
    + b* c& ^( ^" e5 X: i
    十一、ServletContext类的常用API:
2 D$ k8 q! m2 u! [+ W    ( s1 J4 x9 h3 t9 |* W
    1.getContext(String uripath):返回服务器中uripath所代表的ServletContext对象
# w; F! F( e: L& z5 P. T: Q* k   
) N; u' R1 \$ u  b    2.getInitParameter(String name):返回ServletConfig对象中name参数的值$ H. K2 u' r" g8 l$ A: T  ]5 O! ~
    ! [& L' C5 }0 d! J2 l8 X
    3.getMineType(String file):返回file参数代表的文件的MIME类型- W) T0 f6 \4 ~0 ~; O% t* u
    : N7 i% b8 ^$ b/ K. E0 V* ?
    4.getRequestDispatcher(String path):返回path代表的RequestDispacher对象
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:29 | 显示全部楼层

JAVA认证考试基础知识笔记30

5.getResourceAsStream(String path):以输入流的形式返回path对应的资源,在输入留中对象可以为任意形式的数据,path参数必须以"/"开始且相对于Context Root
3 W3 N& E3 B' A  S5 Q: D   
( z: l+ y  @* |    十二、如何使用ServletContxt读取并保存属性文件:! j6 H- ]1 `" b: f' q0 P
    * h. {- @; ^6 H, `
    1.创建java.util.Properties类对象- v, ^6 G0 L/ @& ~# ?! k
   
' H5 u5 M1 I5 Z; H* x8 I8 Z    2.获取ServletContext对象# c2 G0 t: y7 ~3 n) b% P9 V. i/ p
   
! h5 N0 Z0 ^+ Y0 C; ^4 R- t    3.将属性文件以输入流的形式读入到某个输入流对象中- r+ I% K3 K- g, e" h% l
    / W: I4 A7 v6 |( _) X* _0 [9 o
    4.将输入流对象加载到Properties对象中3 i8 P+ a- e6 I
   
" \7 |9 \2 c/ Z    5.将Properties对象保存到ServletContext对象中
' r2 g. K2 s  j   
, b0 X8 m0 E0 L- ^. U! K9 g    十三、如何在Web应用启动时装载静态文本:& X2 F# C1 e1 A- X4 a
    . i; \# B9 V+ u0 p+ V
    1.创建继承了HttpServlet类的子类,在web.xml中配置这Servlet时设置load-on-startup属性:5 n5 }* h6 ?% i
   
# B4 r. j$ n( l" Q8 o    ◆someclass! k+ y* q5 R7 e# J% z
    4 `3 H5 `; }' W/ z! e/ u
    ◆somepackage.SomeClass1
1 ]) e( O$ O1 \0 e. @" Y    4 ^- d2 q3 L% B+ o* a& ^& |5 |& m
    2.在这个Servlet的init()方法中创建java.util.Properties类
- k2 O$ _1 A; z# g   
& }" A) B  m0 s& L    3.获取当前Web应用的ServletContext对象
( J& l; J3 W; K; \4 a$ U( Y2 z   
8 K  k' [6 ?3 O: e( M    4.将WEB-INF目录下的属性文件读入到输入流InputStream中:
% ^# M/ d. v3 j0 e, z6 @   
4 N: M: {( y/ M! J5 K. x    InputStream in = context.getResourceAsString("WEB-INF/someproperties.properties");3 @' h/ H3 v0 Z. X3 V* G4 `
   
. ^2 s4 E& a4 G8 V6 s    5.将输入流加载到属性对象中  c1 p+ e1 ]3 _3 f: K( ?3 b# t
   
8 q: \7 u, P9 s# v$ f3 K    ps.load(in);% y) N; y7 @% S( N
   
2 A$ P6 W' f) m) v    6.将属性对象保存到上
" d, N6 p4 ^* A3 J* y   
$ V8 @& e9 a3 ?/ r  I' Y8 G% r, y    context.setAttribute("attributeName",ps);( v- L! w# @" B- {2 e2 p" J% \
    3 F7 h, p1 T) f1 b
    十四、如何创建标签处理类:
. U, h& j8 V+ r- i   
# I% o; Z0 \! I) i3 Q$ r9 q0 G    1.引入必需的资源:
7 _+ |: K" Q3 |7 t' d# m% Z( n/ A   
! a, z/ G: s9 V- E    import javax.servlet.jsp.*  import javax.servlet.http.*  import java.util.*  import java.io.*
: @) @0 U  k' t+ j$ _   
# ]0 ~( t% w. T- ?% p( H6 z    2, f6 F5 j' e- a+ j
   
& [+ a- c7 q! o    .继承TagSupport类并覆盖doStartTag()/doEndTag()方法5 |6 x4 ?8 J+ B' ?7 C: D
    3 N3 Z+ e. J# z% S- Q2 {
    3.从ServletContext对象中获取java.util.Properties对象' k* S1 j1 Y% F& B0 ~  T0 p, v6 h  V
    1 J/ A0 ?, k! f6 }8 ?% r* M
    4.从Properties对象中获取key对应的属性值
% s  p% F( Z$ C7 @, p   
$ y% @1 z" s( C2 E' d    5.对获取的属性进行相应的处理并输出结果% t4 ], L& F# ]3 ?" O
    / {, q; Z9 M( z: M% ?+ z" H  I
    十五、创建标签库描述文件(Tag Library Descriptor):
, e: k7 F6 m* O. A, e   
' P5 |3 f5 ]$ [5 y) R    1.标签库描述文件,简称TLD,采用XML文件格式,定义了用户的标签库。TLD文件中的元素可以分成3类:
3 Y" U5 r% L4 `+ y; A% z3 w# Y3 N   
! k- X2 \( `& {1 z+ |  b    ◆标签库元素8 Z$ k7 U, ?* E1 a3 A" k8 V
    ( A  g3 T/ E5 v: }2 l  R
    ◆标签元素
4 F- P; I6 D; w& u    7 N4 T' d$ e- @
    ◆标签属性元素8 _  t9 R7 y- s
   
9 t  W9 r3 `2 r4 L    2.标签库元素用来设定标签库的相关信息,它的常用属性有:
' [4 F4 Q2 R1 D+ q' g) m1 c    - y: e* c7 }8 s% n3 O; w9 l3 E
    ◆shortname: 指定Tag Library默认的前缀名(prefix)
/ a) p. z- u( M, K3 E) d' G   
; {' S7 _# q0 l7 M" B4 B    ◆uri: 设定Tag Library的惟一访问表示符
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:30 | 显示全部楼层

JAVA认证考试基础知识笔记30

3.标签元素用来定义一个标签,它的常见属性有:
3 o9 m0 O$ l2 u! f2 k9 b) d   
" b( v' z. O9 Q! w    1)name: 设定Tag的名字2 u9 J6 B+ K8 h" o% y, Z: P
   
+ K% V  Y8 t7 W! i    2)tagclass: 设定Tag的处理类
+ g# R# f4 s& c" |" C    * v, I# W5 M9 l( O
    3)bodycontent: 设定标签的主体(body)内容
# E6 }1 U) S2 K/ K( d3 v    ) k2 O, m& v+ t' c- a$ _
    ◆empty:表示标签中没有body6 z% E, A! v8 D5 y9 B8 S! h0 p1 m
    3 G  x) n7 }1 j# [
    ◆JSP:表示标签的body中可以加入JSP程序代码8 _, h  G1 q6 @0 S2 T& H7 h
   
5 L3 H" |( n; E4 |6 b6 k    ◆tagdependent:表示标签中的内容由标签自己去处理
8 }- h0 |$ A( I! W+ p& z. h" o   
3 S, T5 o+ J- Q5 A1 u    4.标签属性元素用来定义标签的属性,它的常见属性有:
. ?0 V, h0 @4 [& ^: R+ X4 G    5 K% e' [0 N4 j, {! e0 |+ n
    ◆name:属性名称
( b( U: t! l8 [. M    - ]; l8 }' w+ d; W. P) e) s
    ◆required:属性是否必需的,默认为false
2 n8 C- n8 ]4 q2 F3 I   
% R( F% ?# K" b; h3 G% f3 N    ◆rtexprvalue:属性值是否可以为request-time表达式,也就是类似于< %=…% >的表达式
+ L5 U7 K; L) H9 I. t$ f5 R    - L+ J8 [6 ^( G* N0 h1 j" f: G; h
    十六、在Web应用中使用标签:
8 f2 A# [% G; m8 S    4 h, M  g0 [" q2 U! i
    1.如果Web应用中用到了JSP自定义标签,则必须在web.xml文件中加入元素,它用于声明所引用的标签所在的标签库( Y# i( C2 Z3 W  ~/ P9 k# i+ T& v
    8 `1 {& h. `/ V9 _+ d' i3 O' e
    ◆/sometaglib* ]$ W1 c$ _/ n/ l
   
2 X% M- n' z! }* J$ p# ]$ f    ◆/WEB-INF/someTLD.tld5 y# s% I( R  D' t% a- d* i7 n
    ; \" Z% M# v3 y9 v+ M) p- v2 a
    2.:设定Tag Library的惟一标示符,在Web应用中将根据它来引用Tag Libray
5 d' w9 R, z7 I: I% s" R+ h   
! d& Y/ j1 A5 C# s    3.:指定和Tag Library对应的TLD文件的位置+ n3 H. U% N# X0 M" ?  d
    ( K7 F) Q* |5 N+ l) ]. Z
    4.在JSP文件中需要加入
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-8 04:49 , Processed in 0.163467 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表