Jsp + JavaBean循序渐进教程
上一篇 / 下一篇 2007-04-05 21:10:47 / 个人分类:有用才行
+ Java Bean的组合成为了一种事实上最常见的Jsp程序的标准,就让我们来看看具体的Jsp是如何与
(mm O0ziF{:g0Java Bean结合在一起的吧。
jw*u*]7|W,_0 本教程将阐述JavaBean的原理,接着将阐述JavaBean在JavaServer Page下的特定语法,然后★黑基空间★$\o#zy?$Q]
演示一个使用Jsp+JavaBean的简单的计数器,最后将详细的讲解一个有数据库功能的JavaBean+jsp★黑基空间★W-HLl*F
的用户注册程序。
Java Bean原理与应用★黑基空间★ A`)dWB@'k0}
★黑基空间★m,pHk@(s/g3[M:W'v1、什么是JavaBean?
'a1p$}$bZ+O"q,Dh0&y#P q;L Bw&y0 JavaBean是描述Java的软件组件模型,有点类似于Microsoft的COM组件概念。在Java模型中,★黑基空间★(npD} Y
通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。★黑基空间★{xT6wH"A
对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等★黑基空间★c#tdt6B
也有很重大的意义。
5Zp:}y.Zy5dn0 JavaBean通过Java虚拟机(Java Virtual Machine)可以得到正确的执行,运行JavaBean最★黑基空间★O/pV'qvVi
小的需求是JDK1.1或者以上的版本。★黑基空间★,Z_v5Q0~
J_+`y7hc6D0 JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从Jsp诞生后,JavaBean更多的应★黑基空间★"[9fX]%{l%A B
用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。在这里我们主要讨论的是非★黑基空间★$_b(w-zu)n
可视化的JavaBean,可视化的JavaBean在市面上有很多Java书籍都有详细的阐述,在这里就不作为★黑基空间★3R#lf
_x8xt)?R
重点了。
2、非可视化的JavaBean★黑基空间★u)};n2fekCF
iU{!F/} C]A7V3ys0 非可视化的JavaBean,顾名思义就是没有GUI界面的JavaBean。在Jsp程序中常用来封装事务逻
&d&Y
N{ r"c0辑、数据库操作等等,可以很好地实现业务逻辑和前台程序(如jsp文件)的分离,使得系统具有更好的
j/ywd3t"D2G Dd0健壮性和灵活性。★黑基空间★$zE%}S r
$l$o"HZ$r ^!A"Y0 一个简单的例子,比如说一个购物车程序,要实现购物车中添加一件商品这样的功能,就可以写
)y,k]3Lo hk0一个购物车操作的JavaBean,建立一个public的AddItem成员方法,前台Jsp文件里面直接调用这个★黑基空间★ \%Kw+\v/FVY;b~:B+Z-@
方法来实现。如果后来又考虑添加商品的时候需要判断库存是否有货物,没有货物不得购买,在这个★黑基空间★rQ5A6O*Rpb'W(IeH
时候我们就可以直接修改JavaBean的AddItem方法,加入处理语句来实现,这样就完全不用修改前台★黑基空间★HGV,G'Wv.~iQ
jsp程序了。
当然,也可以把这些处理操作完全写在jsp程序中,不过这样的jsp页面可能就有成百上千行,光看
`5_W9[#bI@1I0代码就是一个头疼的事情,更不用说修改了。如果您使用过asp开发过程序的话,相信对这就深有体会★黑基空间★@nI!]3ptT B\r*N
了(其实使用ASP+COM组件完全可以实现同jsp+javabean同样的架构,但不知道某种原因网上常见的★黑基空间★2N_M7A-k-WV-sLc/U&Z
都是全部写在asp页面中,所以使得维护修改等极为不方便,当然这是题外话了)。由此可见,通过
_w7^7x8]
u{0JavaBean可以很好地实现逻辑的封装、程序的易于维护等等。★黑基空间★I'x&U3jj c5c,a
3{c.EI!NF&za#S0 如果您使用Jsp开发程序,一个很好的习惯就是多使用JavaBean。
#w7@4S*@!R1cZ)_0★黑基空间★B!ov(T\M\p'LF3、JavaBean的简单例子
Kh v]n ^9J0:V!c]C#Y0 创建JavaBean并不是一件困难的事情,如果您写过Java程序的话那就很容易了,要注意一点的★黑基空间★0Xd}#V ~{
就是在非可视化JavaBean中,常用>get或者>set这样的成员方法来处理属性>(properties>)。>★黑基空间★L4q)yY
F!K
-N5Ce\-_x+W:y0 下面让我们来看一个简单的JavaBean★黑基空间★ uBro[
Z0QZ0Cn0FirstJavaBean.java★黑基空间★p(n ]9y)j+x+oX
jp UDp"O%E0import java.io.*;★黑基空间★8L{ A.ej;}
★黑基空间★"PJ)VV_public class FirstJavaBean {
`&nEu%T }.`0Ref#kwK0private String FirstProperty = new String("");★黑基空间★c+C:N)B]~+L
2B@,w:}w'LY)y0public FirstJavaBean() {★黑基空间★!zMHZ[
(M _ yA6b5]0}
+Lu7Bxn2D#f}%_0o{1Z nH+IyZWk0public String getFirstProperty() {★黑基空间★"h7~NX)|Im%B5`
;S4Fl x)C0return FirstProperty;★黑基空间★/cKN8gT U5dg\
★黑基空间★&j#F]n,^x2h9VFB}
nJYp%lWQUg} H3B0★黑基空间★&g{/|!JTpublic void setFirstProperty(String value) {★黑基空间★ UD:| u$hP+Y
%e3L%Ya#A;c0FirstProperty = value;
kl#Ghs&Y}S0★黑基空间★,MR)SlK5k}
*e6~#R0F'U k ySt0d'Xj(b g[B&{0public static void main(String[] args)★黑基空间★1J9g QX5]#^&{
★黑基空间★5o|WJJ]{
O%Nf9uY0)p%iK%VZyd_qemq;?l0System.out.println("My First JavaBean!");
Z u*nf1ap'[-Q%q8ip06HS3P!lmfh#C.y!C0}★黑基空间★n\av_v0An!]E
★黑基空间★3jY,~,UU@#PCz}★黑基空间★z*k/V;D]?y r"P
★黑基空间★X$Pm&bv-d如果运行这个程序,就会出现下面的结果:
&qqRg1]^.{0★黑基空间★w0JOA-eFirst JavaBean!
tB/iLS}0t%{de^ Xx0 这是一个很典型的JavaBean的代表,简单地解释一下,FirstProperty是其中的一个属性
$]u*EJ$@"FIqj0(Property),外部通过get/set方法可以对这个属性进行操作,如果您写过VB的class的话,对★黑基空间★
i#t,@.YBX9L
这个就再也熟悉不过了。Main方法是为了测试程序用的,写JavaBean可以先不必加入到Jsp程序中★黑基空间★enAx3_G
调用,而直接用main方法来进行调试,调试好以后就可以在Jsp程序中调用了。
g"KIPR0
l!yW3NF]0 ~6~orA0Jsp + JavaBean循序渐进教程(二)★黑基空间★ sYQ-iT5f0W
(文/刘玉锋)★黑基空间★2n8S
bD3tQU
2pv^/n#O(^DA0 JavaBeans 和 JavaServer Pages的结合
通过上面的学习,大家对JavaBean应该有了一个基本的了解,对于在JavaServer Pages中调用
/?)kLC3}"zy0JavaBeans我们还需要了解一些特定的jsp的内容,让我们来看看吧。★黑基空间★8]f2Uv.tO
JavaServer Pages中的JavaBean相关标签★黑基空间★_F?&mYz'Z@9k
★黑基空间★2i(b}#SX3c 在JavaServer Pages中调用JavaBean有三个标准的标签,那就是,★黑基空间★!}-}o)HP
g#u!S.U
,以及。★黑基空间★E7Mddc?4{
标签
_ OwGkut0★黑基空间★L`\z WbJ D'z+^ 可以定义一个具有一定生存范围以及一个唯一id的JavaBean的实例,这样
~ e ~1x+hd6S
MI0JavaServer Pages通过id来识别JavaBean,也可以通过id.method类似的语句来操作JavaBean。
在执行过程中,首先会尝试寻找已经存在的具有相同id和scope值的JavaBean实例,★黑基空间★_U @0V"M%H9k
如果没有就会自动创建一个新的实例。★黑基空间★t"w"w \d[
其具体语法如下★黑基空间★$]7TzoZtI2M
★黑基空间★8pXFN%O hv★黑基空间★*^d6uWN{S
Y
body
&@/nb8?Qwxb0 其中,typeSpec定义如下★黑基空间★/~ \c$Y7al5P
F%j l4Z$l
A5~*[-a0typeSpec ::=class=“className”
P#kPps"s0/ class=“className” type=“typeName”★黑基空间★B&w1HI[7|eSZw
/ type=“typeName” class=“className”★黑基空间★_zrUJ6T
/ beanName=“beanName” type=“typeName”★黑基空间★'Mb/DA1^dz
/ type=“typeName” beanName=“beanName”★黑基空间★KoD$?q;B6c
f&Hz
/ type=“typeName”
"Ac`9j"jM0下面的表格是标签中相关属性的含义★黑基空间★WH(hC-Y(tu Z\/~c\K
属性及定义★黑基空间★iI-m\4MI-~6i
5E-GS,a j0Id★黑基空间★"qg/P/x[yl"_
id属性是JavaBean对象的唯一标志,代表了一个JavaBean对象的实例。它具有特定的存在范围
mQ-~'OH0WI9GL;D0(page/request/session/application)。在JavaServer Pages中通过id来识别JavaBean。
Scope
jF)H
Us^@8TpD0 Scope属性代表了Javabean对象的生存时间,可以是page, request, session, 和
AER%zq'J0application中的一种。★黑基空间★8r-`.j OV4X"R*X
&K[2f$`ecV0Class
ch-i(h(w0 代表了JavaBean对象的class名字,特别注意大小写要完全一致。
_.b1L4cT8fKK"r0beanName
eS C
hL6S$an0 BeanName属性代表了Bean的名字,通常通过java.beans.Beans class的instantiate() 方法★黑基空间★(kL*IY1m'X#Hh+p[
来初始化。.
Type
dG;|HKgX?0 Type属性指定了脚本变量定义的类型,默认为脚本变量定义和class中的属性一致,一般我们都
!u1yV
jg
y*G0采用默认值★黑基空间★QOYD0sHn!m
A
7F#Z%_V2f1o/?0 标签
~`HTU"^@0★黑基空间★Er-ynC_%~ 另一个标准的标签就是标签了,它主要用于设置bean的属性值。JavaServer★黑基空间★P)zg.Z/aT)W
Pages中调用的语法如下:
★黑基空间★ L!J o ]iX)h
★黑基空间★(@"G~$mKy 其中,name属性代表了已经存在的并且具有一定生存范围(scope)的JavaBean实例。last_syntax★黑基空间★@4xh)`-vi
代表的语法如下: property=“*” /★黑基空间★GL/j S8[
property=“propertyName” /★黑基空间★,x%C0I7o~:q!Kl2O
property=“propertyName” param=“parameterName” /★黑基空间★&?F)Ed9k&i)Q'O\
property=“propertyName” value=“propertyValue”
]e9Bdj|0下面是标签的基本属性以及含义★黑基空间★`K'Y'p,};C
y)J,s"[9oLt;_0 属性及定义
A PI"uO0★黑基空间★#j}It&{!tName
-Z*xlx/Z#^e0 Name代表通过 标签定义的JavaBean对象实例。 Property
V|+wh%F s N0 这是个很重要的属性,代表了你想设置值的属性property名字。如果使用property=”*”,程序就会★黑基空间★4uBRK(U [+E
反复的查找当前的ServletRequest所有参数,并且匹配JavaBean中相同名字的属性property,并通过
:K4uK:i6t+a"s*["q%n#z0JavaBean中属性的set方法赋值value给这个属性。如果value属性为空,则不会修改Javabean中的
tK;x)} XVW0属性值。★黑基空间★{ ^&J;E:uj
|'e&~!Ek*Z0Param★黑基空间★
qs3i5u{HLl5~9V
Param属性代表了页面请求的参数名字,标签不能同时使用param和value。★黑基空间★-z[d%J3in D4^,C
:B'\sv:k0Value★黑基空间★2[4|V9M-U;x
Value属性代表了赋给Bean的属性property的具体值。★黑基空间★]:^/j0IN[+u&N![,a[
o4[#^4Z/i-E qG%v0 标签★黑基空间★b,Ed0V5v2yW8S
k^ ~ {R2k6cy2t0 最后一个标签就是标签了.它可以得到JavaBean实例的属性值,并将他们转换为
p_&CSXI0java.lang.String, 最后放置在隐含的Out对象中. JavaBean的实例必须在
I`Bm2i^
Xp0前面定义.
j kAy1e0 标签的语法如下:★黑基空间★*QtM3h-N~3J
★黑基空间★v)| ` ]8kqt{O|X'c xL+s"u0
/@ x4{y0?4[*p$dti0 下面是标签的基本属性以及含义★黑基空间★X?Zz)c5x}J6j2i
★黑基空间★LID9b"|6Q}'I属性及定义
2m_3dWj;Z#oX0?0}
ji1dT0Name
"} ~1lg He*j2D0 Name属性代表了想要获得属性值的Bean的实例,Bean实例必须在前面用标签定义.★黑基空间★1d pe].^#V
Property
!qa%Uqs"_0 Property属性代表了想要获得值的那个property的名字。
Jsp + JavaBean循序渐进教程(三)★黑基空间★~3]/a;dG-BOb;R
刘玉锋?yesky
c$Q7Q3DG:lY3{0Jsp与JavaBean结合的简单例子★黑基空间★#lu2v&c({
★黑基空间★ y7s_7xe8A|+sX3| 上面讲了这么多,到现在还没有看到具体应用,那好,现在我们看看具体的JavaServer Pages+JavaBean★黑基空间★kC*D1N9a%q4k6G
的例子吧,首先让我们看看一个简单的计数器程序。★黑基空间★]
R~sh7EP
j7HTs#wC oX0 本例程共包含3个文件★黑基空间★*TGm*]VO`-gd c
7FA Y+Zq
swtKQ3Q0 JavaBean--counter.java文件,JavaServer Page-- counter.jsp文件, counter1.jsp文件其中,
5t6q2h2YW
FE0counter.java主要用来进行计数器的计数操作,counter.jsp和counter1.jsp文件主要用来显示网页的计数。