第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有大神了解,關(guān)于JAVABean 生存周期的么?

有大神了解,關(guān)于JAVABean 生存周期的么?

冉冉說 2021-06-16 11:11:43
請問我在SERVLET中用JAVABEAN來儲存數(shù)據(jù),那樣這個JAVABEAN的生存周期是多長
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經(jīng)驗 獲得超8個贊

先聲明這是轉(zhuǎn)的 不是我自己寫的:

JSP由于其強大的生命力在web開發(fā)中有很廣泛的應(yīng)用,實際上在JSP開發(fā)中,JSP程序中只占用了很少的一部分,大部分是由JavaBean完成的,通過JavaBean可以封裝業(yè)務(wù)邏輯,數(shù)據(jù)庫處理等等,由于有了JavaBean才使得程序更為健壯,易于擴展。所以,詳細的了解JavaBean的基礎(chǔ),對于我們開發(fā)出高質(zhì)量的JSP應(yīng)用程序是很有幫助 [一、JavaBean在JSP中的基本語法]
JSP中JavaBean是通過標簽<jsp:useBean>來聲明實現(xiàn)的,基本語法如下:
<jsp:userBean id="beanName" class="className" scope="page/request/session/application></jsp:userBean>

由于我們討論的是生存周期,在上面語法中通過scope屬性來實現(xiàn)的:
scope="page/request/session/application
scope的值代表 JavaBean的生存周期,也就是JavaBean的實例id在JSP程序中存在的范圍。
下面看看具體的scope四個值的含義:
page-JavaBean對象保存在pageContext對象中,有page范圍JavaBean實例只能在當前創(chuàng)建這個JavaBean的JSP文件中進行操作,

這個實例只有在請求返回給客戶端后或者轉(zhuǎn)移到另外的JSP頁面后才會釋放掉。page范圍的JavaBean常用于進行一次性操作的JavaBean,這樣的Bean用的最多,比如大部分表單提交,Bean的一些計算處理等都可以使用page范圍的JavaBean
request-JavaBean對象保存在request對象中,有request范圍的JavaBean實例可以在處理請求所有JSP頁面中都存在,這個對象只有在請求全部處理完畢后才會被釋放掉,request范圍的JavaBean常用于共享同一次請求的JSP頁面中,比如判斷用戶登錄功能,如果用戶名密碼合法就可以forward到一個合法頁面中,否則就forward到一個出錯頁面,當然轉(zhuǎn)移后的頁面仍然能夠得到用戶的輸入。
session-JavaBean對象是保存在session范圍的JavaBean實例的生存周期是整個session,只有當session過期后才能釋放掉,這樣常用于共享同一session的JSP頁面,比如購物車一般就是放在session中的或者登陸后的用戶信息等也可以在session中,注意<%@page標簽中不要設(shè)置session=false,否則在這個JSP頁面中session將不會起作用,幸好JSP默認session=true,所以可以不必管它了。application-JavaBean對象保存在application對象中,有application范圍的JavaBean對象的生存周期是整個application。這就意味著這樣的JavaBean的生存周期是整個應(yīng)用程序,當web Server停掉才會消失掉。這樣的常用于共享同一application的JSP程序中,比如程序中一些經(jīng)常用到配置東西如數(shù)據(jù)庫連接URL,全局的計數(shù)器或者是聊天室中人員信息等。

[二、scope的具體應(yīng)用]
上面講了這么多,大家應(yīng)用對JavaBean的生存周期有個基本的概念了,在這里我們結(jié)合幾個簡單的例子來看看scope在JavaBean中應(yīng)用,以便大家能對scope有更深的了解,用來演示的是一個簡單的積分處理程序,初始化為o,每一次訪問會將積分加上10,我們使用了一個JavaBean文件,用于數(shù)值計算處理的,然后在前臺使用幾個scope設(shè)置不同的JSP文件調(diào)用這個JavaBean。

<核心的JavaBean文件>
public class scope
{
//初始化成員變量,scope_count代表積分分值
int scope_count=10;
public scope(){} //構(gòu)造方法
public int TestNumber(){
scope_count+=10;
return scope_count;
}
//設(shè)置scope_count的值
public void setNumber(int ber){
scope_sount=number;
}

}
<page范圍的演示>
下面是為了演示page范圍的JSP文件page.jsp文件。
page.jsp
<%@ page contentType="text/html";charset=gb2312"%>
<html><head>
<title>page范圍積分程序演示</title>
</head>
<!--初始化JavaBean并生成一個scope的實例-->
<jsp:useBean id="jinqiao" scope="page" class="com.scope"/>
<body>
page范圍積分程序演示<br>
<center>您當前的積分為<%//調(diào)用scope中的TestNumber方法得到當前積分
out.println(jinqiao.TestNumber());%>
</center>
</body>
</html>
好了,啟動web服務(wù)器,然后運行這個程序,使用瀏覽器并點擊刷新按鈕,看屏幕的變化,你會發(fā)現(xiàn)結(jié)果總是積分為20,這就說明了TestNumber方法只被執(zhí)行了一欠,因為jinqiao對象的生存范圍是page的,所以只在這個頁面有效,每一次調(diào)用這個JSP頁面都會重新生成一個jinqiao對象,當然積分不會變化了。

<request范圍的演示>
下面是為了演示request范圍的JSP文件request.jsp。
request.jsp
<%@ page contentType="text/html";charset=gb2312"%>
<html><head>
<title>request范圍積分程序演示</title>
</head>
<!--初始化JavaBean并生成一個scope的實例-->
<jsp:useBean id="jinqiao" scope="request" class="com.scope"/>
<body>
page范圍積分程序演示<br>
<center>您當前的積分為<%//調(diào)用scope中的TestNumber方法得到當前積分
out.println(jinqiao.setNumber(18));%>
<jsp:forward page=request.jsp/>
</center></body></html>

request1.jsp
<%@ page contentType="text/html";charset=gb2312"%>
<html><head>
<title>page范圍積分程序演示</title>
</head>
<!--初始化JavaBean并生成一個scope的實例-->
<jsp:useBean id="jinqiao" scope="request" class="com.scope"/>
<body>
request范圍積分程序演示<br>
<center>您當前的積分為<%//調(diào)用scope中的TestNumber方法得到當前積分
out.println(jinqiao.TestNumber());%>
</center>
</body>
</html>

好了,啟動web服務(wù)器,然后運行這個程序,使用瀏覽器并點擊刷新按鈕,看屏幕的變化,你會發(fā)現(xiàn)結(jié)果總是積分為28為什么會有這樣一個結(jié)果呢,因為首先我們在request.jsp文件中調(diào)用了jinqiao對象setNumber方法設(shè)置積分值為18,然后我們將請求轉(zhuǎn)移到request1.jsp頁面,因為同一相應(yīng)還沒有處理完畢,所以在request1.jsp中得到的仍然是同一個jinqiao實例,然后通過jinqiao的TestNumber方法將jinqiao的積分18+10,所以就得到了28了。注意的是<jsp:forward>標簽是用來將請求轉(zhuǎn)移的兩個頁面中的Bean聲明包括id名字,request范圍等要一模一樣才行,這樣JSP程序才會認為你要調(diào)用的是同一個JavaBean實例

<session范圍的演示>
下面是為了演示session范圍的JSP文件session.jsp文件,
session.jsp

?<%@ page contentType="text/html";charset=gb2312"%>
<html><head>
<title>session范圍積分程序演示</title>
</head>
<!--初始化JavaBean并生成一個scope的實例-->
<jsp:useBean id="jinqiao" scope="session" class="com.scope"/>
<body>
session范圍積分程序演示<br>
<center>您當前的積分為<%//調(diào)用scope中的TestNumber方法得到當前積分
out.println(jinqiao.TestNumber());%>
</center>
</body>
</html>
好了,啟動web服務(wù)器,然后運行這個程序,使用瀏覽器并點擊刷新按鈕,看屏幕的變化,你會發(fā)現(xiàn)結(jié)果是變化的,開始時是:您當前的積分為20,然后就是30,40.。。,這就說明了TestNumber()方法被執(zhí)行了多次,因為jinqiao對象生存范圍是session的,所以在整個session有效,每一次刷新這個jsp頁面都會調(diào)用同一個jinqiao對象,所以積分都是同一個了,
另外,為了更方便的理解session,可以將上面的session.jsp文件完整的拷貝一份生成session1.jsp文件,在瀏覽器中執(zhí)行session.jsp文件,看積分值的變化,然后還使用同一個瀏覽器,輸入session1.jsp文件,你會發(fā)現(xiàn)session1.jsp和session.jsp文件的積分值是一模一樣的。重新開一個瀏覽器,注意不用瀏覽器菜單功能,而是直接從桌面雙擊一個IE瀏覽器,而兩個瀏覽器分別運行session.jsp,session1.jsp文件,刷新多次后,你會發(fā)現(xiàn)兩個瀏覽器的積分值不一樣了,為什么呢?很簡單,因為重新打開一個瀏覽器就相當于重新開一個session。session不同,積分值當然也不同了。

<application范圍的演示>

application.jsp

?<%@ page contentType="text/html";charset=gb2312"%>
<html>
<head>
<title>application范圍積分程序演示</title>
</head>
<!--初始化JavaBean并生成一個scope的實例-->
<jsp:useBean id="jinqiao" scope="application" class="com.scope"/>
<body>
session范圍積分程序演示<br>
<center>您當前的積分為<%//調(diào)用scope中的TestNumber方法得到當前積分
out.println(jinqiao.TestNumber());%>
</center>
</body>
</html>

好了,啟動web服務(wù)器,然后運行這個程序,使用瀏覽器并點擊刷新按鈕,看屏幕的變化,你會發(fā)現(xiàn)結(jié)果是變化的,和前面的session幾乎一樣,開始時,你當前的積分為20,然后就是30、40.。。,這就說明了TestNubmer()方法被執(zhí)行了多次,但是它和session有什么不同呢?
為了解決這個問題,可以將上面的application.jsp文件完整的拷貝一份生成application.jsp文件,重新開一個瀏覽器,注意不用瀏覽器的菜單功能,而是直接從桌面雙擊一個IE瀏覽器,兩個瀏覽器分別運行application.jsp和application1.jsp文件中,刷新多 次后,你會發(fā)現(xiàn)兩個瀏覽器的積分值完全一樣,這就是application的區(qū)別了,很簡單因為重新打開一個瀏覽器只是重新開了一個session,application是針對于整個服務(wù)器應(yīng)用程序而言的,應(yīng)用程序沒有關(guān)閉,jinqiao對象是全局的,所以積分值當然一樣了,只有將web服務(wù)器重新啟動后,才會重新生成一個jinqiao對象,積分值才會重新計算。

[三、總結(jié)]
本文重點闡述了JSP中的JavaBean的生命周期(scope)問題,到這里,通過前面的例子演示相信大家對于JavaBean的生成周
期概念已經(jīng)比較熟悉了,只要再經(jīng)過一段時間的實際應(yīng)用,相信大家對于JSP中使用JavaBean都得心應(yīng)手。



查看完整回答
反對 回復(fù) 2021-06-21
  • 1 回答
  • 0 關(guān)注
  • 322 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號