JavaBean的使用 JavaBean的范圍 與Java代碼的交互

本文非原創(chuàng),轉(zhuǎn)自csdn

JavaBean是一種可重復(fù)使用的、跨平臺(tái)的軟件組件。分為兩種:

有用戶界面的JavaBean

無用戶界面的JavaBean,主要負(fù)責(zé)處理事務(wù),JSP通常訪問這種JavaBean

1、使用JavaBean的優(yōu)點(diǎn):
使得HTML代碼與Java程序分離,便于維護(hù)。

降低JSP開發(fā)人員對(duì)Java編程能力的要求。

充分利用JavaBean組件的可重用性,提高開發(fā)網(wǎng)站的效率。JSP側(cè)重于生成動(dòng)態(tài)網(wǎng)頁,事務(wù)處理由JavaBean來完成。

2、JavaBean的特征:
JavaBean是一個(gè)公共的類

JavaBean有一個(gè)不帶參數(shù)的構(gòu)造函數(shù)

JavaBean通過setXXX方法設(shè)置屬性,并且通過getXXX方法獲取屬性

下面是一個(gè)JavaBean類:

public class User {

private String username;
private String password;
public User(){}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

}
3、JSP訪問JavaBean的步驟:
① 導(dǎo)入JavaBean類
通過<%@ page import%>指令導(dǎo)入:

<%@ page import="com.itzhai.bean.User" %>
② 聲明JavaBean對(duì)象
使用<jsp:useBean>標(biāo)簽聲明JavaBean對(duì)象:

<jsp:useBean id="user" class="com.itzhai.bean.User" scope="session" />
③ 訪問JavaBean屬性
使用<jsp:getProperty>標(biāo)簽輸出某個(gè)屬性到網(wǎng)頁上:

<jsp:getProperty name="user" property="username" />
使用<jsp:setProperty>標(biāo)簽為某個(gè)屬性賦值:

<jsp:setProperty name="user" property="username" value="arthinking" />
使用請(qǐng)求的參數(shù)給某個(gè)屬性賦值:

如使用URL傳遞的username參數(shù)給屬性賦值:

<jsp:setProperty name="user" property="username" param="username" />
4、使用UserBean和直接使用Java代碼的聯(lián)系:
下面UseBean的使用和Java代碼片段的使用一樣:

<%@ page import="com.itzhai.bean.User" %>
<jsp:useBean id="user" class="com.itzhai.bean.User" scope="session" />
<jsp:getProperty name="user" property="username" />
<%
User user = new User();
out.println(user.getUsername());
%>
只不過使用UseBean時(shí),對(duì)象的創(chuàng)建和方法的使用都通過了Tomcat生成的Servlet代碼的包裝,使用起來更方便。

可以這樣使用

<jsp:useBean id="user" class="com.itzhai.bean.User" scope="session" />
<%
out.println(user.getUsername());
%>
這樣,對(duì)象的創(chuàng)建就通過jsp:userBean標(biāo)簽創(chuàng)建,而通過Java代碼訪問了創(chuàng)建的對(duì)象。

5、JavaBean的范圍:
<jsp:useBean>標(biāo)簽中的scope屬性決定了JavaBean對(duì)象存在的范圍,scope可選值包括:

page(default):
客戶每次請(qǐng)求訪問JSP頁面時(shí),都會(huì)創(chuàng)建一個(gè)JavaBean對(duì)象。JavaBean對(duì)象的有效范圍是客戶請(qǐng)求訪問的當(dāng)前JSP頁面,JavaBean對(duì)象在以下兩種情況下會(huì)結(jié)束生命周期:

① 通過<jsp:forward>標(biāo)簽將請(qǐng)求轉(zhuǎn)發(fā)到另一個(gè)文件。
② 客戶請(qǐng)求訪問的JSP頁面執(zhí)行完畢并向客戶端發(fā)送響應(yīng)。
request:
在request范圍內(nèi),JavaBean對(duì)象的有效范圍為:

① 客戶請(qǐng)求訪問的當(dāng)前JSP頁面
② 和當(dāng)前JSP頁面共享同一個(gè)請(qǐng)求的頁面,包括<%@ include%>指令以及<jsp:forward>標(biāo)記包含的其他JSP文件。
③ 當(dāng)所有共享同一個(gè)客戶請(qǐng)求的JSP頁面執(zhí)行完畢并向客戶端發(fā)回響應(yīng)時(shí),JavaBean對(duì)象結(jié)束生命周期。
JavaBean對(duì)象作為屬性保存在了HttpServletRequest對(duì)象中,屬性名為JavaBean的id,屬性值為JavaBean對(duì)象,所以在同一個(gè)request范圍內(nèi)也可以按照如下方法獲取JavaBean對(duì)象:

<jsp:useBean id="user" class="com.itzhai.bean.User" scope="request" />
User user=(User)request.getAttribute("user");
session:
JavaBean對(duì)象被創(chuàng)建后,它存在于整個(gè)Session的生命周期內(nèi),同一個(gè)session中的所有JSP文件共享這個(gè)JavaBean對(duì)象。

<jsp:useBean id="user" class="com.itzhai.bean.User" scope="session" />
除了使用JavaBean的id直接訪問JavaBean對(duì)象外,也可以通過以下方式訪問對(duì)象:

User user=(User)session.getAttribute("user");
application:
在整個(gè)Web應(yīng)用的生命周期內(nèi),Web應(yīng)用中的JSP文件都能共享同一個(gè)JavaBean對(duì)象。

<jsp:useBean id="user" class="com.itzhai.bean.User" scope="application" />
除了使用JavaBean的id直接訪問JavaBean對(duì)象外,也可以通過以下方式訪問對(duì)象:

User user=(User)application.getAttribute("user");
無論是使用什么范圍,在Tomcat生成的Servlet中,都是調(diào)用了PageContext的以下進(jìn)行設(shè)置方法:

public abstract class PageContext
extends JspContext
setAttribute
public abstract void setAttribute(String name,
Object value,
int scope)
Register the name and value specified with appropriate scope semantics. If the value passed in is null, this has the same effect as calling removeAttribute( name, scope ).
使用session范圍時(shí),Tomcat生成的相關(guān)處理源代碼為:

synchronized (session) {
user = (com.itzhai.bean.User) _jspx_page_context.getAttribute("user", PageContext.SESSION_SCOPE);
if (user == null){
user = new com.itzhai.bean.User();
_jspx_page_context.setAttribute("user", user, PageContext.SESSION_SCOPE);
}
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容