Jsp中嵌入许多javacode,我们也说过这是不好的设计方式,现在我们来年看看怎样把这些javacode 从jsp中抽出来,成为独立的一个类别(称这javabeans),并且示范如何在jsp里面呼叫这些javabeans,另外,也会一并介绍由servlet呼叫jsp方式,之前看的范例程式,其流程。逻辑,和资料展现者放在jsp中,这方式称为page-centric架构,或Model-1架构,现在我们开始撰写的范例会将控制权交给servlet,以seervllet这控制中心,掌控程式的流程以级Html/jsp网页分派,这是一种 servlet-centric架构,也称为model-2其实就是mvc;
Jsp呼叫javabean:
这时里说的javabeans只是一般的java类别,跟EjB(Enterprise javaBeans)是两种不同的东西,请勿混淆,那么servlet也是java类别,它跟javaBeans又有什么不同呢?
Javabeans只是普通的类别;
Servlet的java类别是继承自javax.servlet.HttpServlet,因此具有接收Http request和发送?Httpreponse等网站应用程式的基本功能,而javabeans只是单纯的类别,它可以继续自任何类别,但无法处理Http信息;它在网站应用程序中的的角色通常是作为参数物件(在jsp和servlet之间传递,以共享信息)或工具类别,作为参数物件时通常代表种资料,因此被称为valuebean,作为工具类别时,则称为utilitybean.
怎样的类别可以称为javabeans ?
类别通常以“动词+Bean”的方式命名:例如:UserInfoBean,CheckStockBean。。。。。等。这是一种惯例,以Beean的方式使用它,那么它就是一种Bean。
Jsp如何使用你的javaBean,你的 bean必须提供一种属性,jsp便可以用特殊的标签来存取这些Bean属性。所谓属性是一组getter和setter methods,两者统称为accessmethods(存取方法),通过这些方来间接地存取属性的的私有成员,当然,这些方法必须用public 修饰。例如:有个bean的类EMployeeBean,它要提供一个年龄的属性给外界的jsp存取,此类的定义如下:
public class EmploueeBean{
private int age;
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
}
在jsp中使用是时这样写:
<jsp:useBean id=”emp” class=”cn.ts.EmployeeBean”scope=”request”/>
<jsp:setProperty name=”emp” property=”age”value=”25”/>
员工的年龄是:
<jsp:getProperty name=”emp” propperty=”age”/>
其中
<jsp:useBean >标签就是指明要使用一个bean组件,id代表该组件的名称,class指明了要用什么类别的bean,scope则代表组件的生命周期。
<jsp:setProperty>标签用来设定bean的属性,property指明要设定那个属性,value就是属性的值,要注意的是Html传入的值一定上字符串,但我们的age属性是一个整数类型的,这个转换部分是由 web服务器帮我们琮完成的;
<jsp:getProperty >标签昌用来取得bean属性的值;
注意:
1、 属性的大小写。在jsp中属性的名称是完全小写的“age”,但是getter和setter方法的名称是getAge()和setAge()这种命名方式是固定的,照这个规则来命名,web Containner就能够找到正确的存取方法。
2、 对于oop概念不了解的人来说,可能误以为在jsp中取的是“age”属性,就是类定义里面的那个private成员(age),其实这两者上只是名字相同而已,实际动作的是无关系的的,因为jsp完全是透过getter和setter方法来存取属性的。