標籤:
JavaBean是一種可重複使用,且跨平台的軟體組件。JavaBean可分為兩種:一種是有使用者介面(UI)的javaBean;還有一種是沒有使用者介面,主要負責處理事務(如資料運算,操縱資料庫)的javaBean。Jsp通常訪問的是後一種javaBean.
Jsp 和javaBean搭配使用的優點:
1.使得html與java程式分離,這樣便於維護代碼。如果把所有的程式碼都寫到jsp網頁中,會使用代碼繁雜,難以維護。
2.可以降低開發jsp網頁人員對java編程能力的要求。
3.jsp側重於產生動態網頁,交易處理由javaBean來完成,這樣可以充分利用javaBean組件的可重用性特點,提高開發網站的效率。
一個標準的javaBean有以下幾個特性:
1.javaBean是一個公用的類
2.javaBean有一個不帶參數的構造方法
3.javaBean通過setXXX方法設定屬性,通過getXXX方法擷取屬性。
package com.anllin.bean; public class Person { private String name; private int age; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } |
Jsp訪問javaBean的文法
1.匯入javaBean類
<%@ page import="com.anllin.bean.Person" %> |
2.聲明javaBean對象
<jsp:useBean id="person" class="com.anllin.bean.Person"></jsp:useBean> |
其實相當於
<% Person person = new Person(); %> |
Id表示產生一個類的執行個體,一般id不能重複,用於表示不同的對象,如果相同則表示同一個對象,這種情況下jsp會報錯。
3.訪問javaBean屬性
<jsp:setProperty property="name" name="person" value="jack"/> <jsp:getProperty property="name" name="person"/><br> |
其實相當於
<% person.setName("jack"); person.getName(); %> |
完整的例子:
<%@ page language="java" import="com.anllin.bean.Person"pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP ‘javabean.jsp‘ starting page</title> </head> <body> <jsp:useBean id="person" class="com.anllin.bean.Person"></jsp:useBean> <jsp:setProperty property="name" name="person" value="jack"/> <jsp:setProperty property="age" name="person" value="20"/> <jsp:setProperty property="address" name="person" value="beijing"/> <jsp:getProperty property="name" name="person"/><br> <jsp:getProperty property="age" name="person"/><br> <jsp:getProperty property="address" name="person"/><br> </body> </html> |
設定bean的屬性值
1.可以在<jsp:setProperty>中通過param參數為bean的屬性動態賦值。
<jsp:setProperty property="age" name="person" param="sage"/><br> |
sage表示參數名,而不是屬性
在瀏覽器地址欄中輸入
http://localhost:8080/test/javabean.jsp?sage=30
則可以得到age屬性的值30
Javabean的存活範圍
Scope屬性決定了javabean對象的存在的範圍。可選值有:
1.page(預設值)
2.request
3.session
4.application
<jsp:useBean id="person" class="com.anllin.bean.Person" scope="page"></jsp:useBean> |
Javabean在page範圍內時
客戶每次請求訪問jsp頁面時,都會建立一個javabean對象。Javabean對象的有效範圍是客戶請求訪問的當前jsp網頁。Javabean對象的以下兩種情況下都會結束生命期:
1.客戶請求訪問的是當前jsp網頁通過<forward>標記將請求轉寄到另一個檔案
2.客戶請求訪問的是當前jsp頁面執行完畢並向用戶端發迴響應。
Javabean在request範圍內
客戶每次請求訪問jsp頁面時,都會建立新的javabean對象。Javabean對象的有效範圍為:
1.客戶請求訪問的當前jsp網頁。
2.和當前網頁共用一個客戶請求的網頁,即當前jsp網頁中<%@include %>指令以及<forward>標記包含的其他jsp檔案
3.當所有共用同一個客戶請求的jsp頁面執行完畢並向用戶端發加響應時,javabean對象結束生命週期。
4.javabean對象作為屬性儲存在httpRequest對象中,屬性名稱javabean的id,屬性值為javabean對象,因此可以通過HttpRequest.getAttribute()方法取得javabean對象,例如:
Jvabean.jsp
<jsp:useBean id="person" class="com.anllin.bean.Person"scope="request"></jsp:useBean> <jsp:forward page="javabean2.jsp"></jsp:forward> |
Javabean2.jsp
<%@ page import="com.anllin.bean.Person" %> <% Person person = (Person)request.getAttribute("person"); out.print(person.getName()); %> |
Javabean在session範圍內
1.Javabean對象被建立後,它存在於整個session的生命週期內,現個session中的jsp檔案分享權限設定這個javabean對象。
2.javabean對象作為屬性儲存在HttpSession對象中,屬性名稱為javabean的id,屬性值為javabean對象。除了可以通過javabean的id直接引用javabean對象外,也可以通過HttpSession.getAttribute()方法取得javabean對象,例如:
<jsp:useBean id="person" class="com.anllin.bean.Person"scope="session"></jsp:useBean> |
Person person = (Person)session.getAttribute("person"); out.print(person.getName()); |
Javabean在application範圍內
1.javabean對象被建立後,它存在於整個web應用的生命週期內,web應用中的所有jsp檔案都能共用同一個javabean對象。
2.javabean對象作為屬性儲存在application對象中,屬性名稱為javabean的id,屬性值為javabean對象,除了可以通過javabean的id直接引用對象外,也可以通過javabean的application.getAttribute()方法取得javabean對象,例如:
<jsp:useBean id="person" class="com.anllin.bean.Person"scope="application"></jsp:useBean> |
Person person = (Person)application.getAttribute("person"); out.print(person.getName()); |
假如有一個Person類,有一個屬性name
為什麼我們要提供一個getName()方法和setName()方法,而不是getCCNma之類的?
因為只有遵守這個規範,才能通過反射去調用這兩個方法。
重點:
區分page,request,session,application之間的差別以及它們的生命週期。
jsp與javaBean的使用