1. 使用 beans
為了在JSP 頁面中使用benas,我們必須使用JSP 動作標簽:useBean
useBean 格式:
<jsp:useBean id= “給bean 起的名字” class= “創建beans 的類”scope= “bean 有效范圍”></jsp:useBean>
當服務器上某個含有 useBean 動作標簽的JSP 頁面被加載執行時,JSP 引擎將首先根據id 的名字,在一個同步塊中,查找JSP 引擎內置pageContent 對象中是否含有名字id 和作用域scope 的對象,如果這個對象存在,JSP 引擎就分配一個這樣的對象給客戶,如果在pageContent 中沒有查找到指定作用域、名字是id 的對象,就根據class指定的類創建一個名字是id 對象,即創建了一個名字是id 的beans,並添加到pageContent 內置對象中,並指定該beans 的作用域是scope,同時JSP 引擎分配給客戶一個作用域是scope、名字是id 的beans。
useBean 標簽中scope 取值的不同情況闡述如下:
scope 取值page
JSP 引擎分配給每個客戶的beans 是互不相同的,也就是說,盡管每個客戶的beans 的功能相同,但它們占有不同的內存空間。該beans的有效范圍是當前頁面,當客戶離開這個頁面時,JSP 引擎取消分配給該客戶的beans。
scope 取值session
JSP 引擎分配給每個客戶的beans 是互不相同的,該beans 的有效范圍是客戶的會話期間,也就是說,如果客戶在多個頁面中相互連接,每個頁面都含有一個useBeans 標簽,這些useBean 標簽中id 的值相同,並且scope 的值都是session,那麼,該客戶在這些頁面得到的beans 是相同的一個。如果客戶在某個頁面更改了這個beans 的屬性,其它頁面的這個beans 的屬性也將發生同樣的變化。當客戶關閉浏覽器時,JSP 引擎取消分配給客戶的beans。
scope 取值request
JSP 引擎分配給每個客戶的beans 是互不相同的,該beans 的有效范圍是request 期間。客戶在網站的訪問期間可能請求過多個頁面,如果這些頁面含有socope 取值是request 的useBeans 標簽,那麼pageCotent 對象在每個頁面分配給客戶的beans 也是互不相同的。JSP引擎對請求作出響應之後,取消分配給客戶的這個beans。
scope 取值application
JSP 引擎為每個客戶分配一個共享的beans,也就是說,所有客戶共享這個beans,如果一個客戶改變這個beans 的某個屬性的值,那麼所有客戶的這個beans 的屬性值都發生了變化。這個beans 直到服務器關閉才被取消。
注:當使用作用域是session 的beans 時,要保證客戶端支持Cookie.
為了使服務器的所有web 服務目錄下的JSP 頁面文件都能使用我們的beans,我們必須將上面編譯通過生成的字節碼類文件:Circle.class 拷貝到JSP 引擎的classes 文件夾下, 即D:tomcat\Jakarta-tomcat-4.0\classes 下,另外,在使用 beans 的JSP 頁面中,必須有如下的import 指令:<@page import= “Circle”> 如果想讓某個 beans 只對examples 目錄下的JSP 頁面可用,那麼創建該beans 的字節碼文件需存放在webapps/example/Web-inf/classes目錄中,
2.獲取和修改 beans 的屬性
當我們使用useBean 動作標簽創建一個beans 後,在java 程序片中這個beans 就可以調用方法產生行為,比如修改屬性。獲取或修改beans 的屬性還可以使用動作標簽getProperty、setProperty
2.1getProperty 動作標簽
使用該標簽可以獲得beans 的屬性值,並將這個值用串的形式顯示給客戶
getProperty 動作標簽:
<jsp:getProperty name= “beans 的名字” property= “beans 的屬性” /></jsp:getProperty>
其中,name 取值是beans 的名字,用來指定要獲取哪個beans 的屬性的值;property 取值是該beans 的一個屬性的名字。該指令的作用相當於在程序片中使用beans 調用getXxx()方法。
2.2 setProperty 動作標簽
使用該標簽可以設置beans 的屬性值。
setProperty 動作標簽可以通過3 種方式設置beans 屬性的值。
(1)將benas 屬性的值設置為一個表達式的值或字符串。
本欄目