大可制作:QQ群:31564239(asp|jsp|php|mysql)

JSP/Servlet: 简介 JavaBean

对于动态网页来说,如果它又要负责网页内容的生成,又要负责数据的处理与保存,最后常导致的结果就是页面呈现的部份与程序的逻辑处理,以及数据对象的处理 等混合在一起,对于必须相互合作的网页设计人员与程序设计人员来说都是一种困扰,JavaBean的作用之一,就是希望将程序的逻辑处理与呈现部份分开, 是实现 Model 1 架构的一种技术。

JavaBean的撰写就如一般的Java程序,我们先撰写一个简单的Java类,其作用为寻找两个数的最大公因数:

  • GCDBean.java
package onlyfun.caterpillar;

public class GCDBean {
private int num1;
private int num2;

public int getGCD() {
int r = 0;
while(num2 != 0) {
r = num1 % num2;
num1 = num2;
num2 = r;
}
return num1;
}

public int getNum1() {
return num1;
}

public void setNum1(int num1) {
this.num1 = num1;
}

public int getNum2() {
return num2;
}

public void setNum2(int num2) {
this.num2 = num2;
}
}

注意在JSP 2.0之后,JavaBean的类一定要有package加以管理; 上面这个类所拥有的方法都是公开的,而且使用setXXX()与getXXX() 的方式来命名,将这个类编译完成后,您将类*.class放置于Web应用程的WEB-INF/classes/数据夹中,注意由于我们设定 package为onlyfun.caterpillar,所以最后您的*.class应该路径应该是WEB- INF/classes/onlyfun/caterpillar/GCDBean.class,接下来在JSP网页中将这个类当作 JavaBean来使用,撰写以下这个JSP网页程序:
  • beanTest.jsp
<%@page contentType="text/html; charset=Big5"%> 
<html>
<body>

<jsp:useBean
id="gcdBean"
class="onlyfun.caterpillar.GCDBean" />
<jsp:setProperty
name="gcdBean" property="*" />

最大公因数:<jsp:getProperty
name="gcdBean" property="GCD" />

</body>
</html>

<jsp:useBean>标签是用来调用JavaBean的方法,id用于指定JavaBean实例的引用名称,它实际将转换为 Servlet中的一个对象引用名称,class用以指定您的JavaBean将实例化哪一个类,在执行JSP网页时,它会检查 JavaBean的实例是否已经存在,如果不存在,则实例化一个JavaBean。

<jsp:setProperty>标签用于给JavaBean设定属性值,name用于指定您要使用哪一个引用名称所指向的 JavaBean实例;在属性设定时我们使用了introspection机制,在property设定"*",表示将自动寻找request中符合 JavaBean中setter名称的参数值,即如果request的参数名称若符合setXXX()中XXX名称,则将request中对应的值设定给 setXXX()。

<jsp:getProperty>则用来取得JavaBean所携带的属性值,name用于指定您要使用哪一个引用名称所指向的JavaBean实例,在property中指定的是要哪一个属性值,即如果指定为XXX,则使用getXXX()方法取得值。

可以实现一个表单来发送参数数据给上面这个JSP网页:

  • form.htm
<html> 
<body>
<form name="login" method="get" action="beanTest.jsp">
Number 1: <input type="text" name="num1"> <br>
Number 2: <input type="text" name="num2"> <br>

<input type="submit" value="送出">
<input type="reset" value="清除">
</form>
</body>
</html>

连接上这个表单,并输入适当的数字,在送出数据后,您就可以看到所计算完毕的GCD值。

如上所示的,使用JavaBean,您可以将部份的程序逻辑移至JavaBean中,而不用在JSP网页中直接撰写程序逻辑,只要在 JSP网页中使用<jsp:useBean>、<jsp:setProperty>与<jsp: getProperty>等标签,标签的使用在HTML网页中对网页设计人员来说会比较友善,不会带有太多的程序逻辑部份,可以实现“部份的”视图 与逻辑分离的目的(毕竟,仅靠JavaBean要达到完全的分离仍有其限制)。

要注意的是,每当您的JavaBean程序内容改变并重新编译后,容器不一定会知道JavaBean的内容已经改变,也就不会重新载入改变后新的类,这 是使用JavaBean的缺点之一,解决的方法就是重新启动容器,让容器重新载入改变后的JavaBean,如果是在测试阶段,您可以设定容器自动侦测类 别是否已经改变,并让容器自动载入改变后的类,您可以引用 关于让Tomcat 5.0自动Reload Servlet

对于JavaBean,您必须知道几个规则:
  • 必须提供一个public,无参数的默认建构式。
  • Setter或Getter必须是public的,具分别以set及get开头。
  • Setter的接受类型与Getter传回类型必须相同。

这边先简单的介绍如何撰写一个简单的JavaBean,JavaBean的摆放,以及如何在JSP网页中使用它们,至于<jsp: useBean>、<jsp:setProperty>与<jsp:getProperty>等标签的更多用法,以及 JavaBean的更多应用与作用范围,将在之后的主题中作更多的介绍。