jsp中useBean動作的scope可以制定四種範圍(page,request,session,application)的區別

來源:互聯網
上載者:User


例子很簡單,Bean的功能為取目前時間,其代碼為:
Common.java:
--------------------
package XX;

import java.util.Date;
import java.text.*;

public class Common
{
    Date d=new Date();
    public String now(String s)
    {
        SimpleDateFormat formatter = new SimpleDateFormat(s);
        return formatter.format(d);
    }
}

測試頁面的代碼為:
date.jsp
-----------------------------------------------------------
<jsp:useBean id="cm" scope="XX" class="XX.Common"/>
<%=cm.now("yyyy-MM-dd HH:mm:ss")  %>

測試結果:

1、當scope=application時,我們瀏覽date.jsp,這時顯示出了系統時間。可是不管我們怎麼重新整理,重新開啟一次瀏覽器,甚至換台機器,它顯示的時間始終不變,都是當初的時間(即bean剛建立時得到的系統時間),因為scope=application,所以Bean的執行個體在記憶體中只有一份,此時只要不重新啟動WEB服務,輸出不會變化。

2、當scope=session時,瀏覽date.jsp,重新整理時顯示也不會變化。可是當我們重新開啟一瀏覽器,即一個新的session,系統便再次建立Bean的執行個體,取得當前系統時間,這時將得到正確的時間。同樣,再次重新整理新開啟的頁面(新的session),顯示也不會變化。

3、當scope=page/request(它們的區別只在於包含靜態檔案時,此處無區別)時,不斷重新整理頁面將不斷得到當前系統時間。

以上可以看出不同的scope,Bean有不同的範圍。使用時一定注意,不要將得到經常變動的Bean的scope設為application或session,那將得到不正確的結果.

page,就是這個bean只在這個頁面中有效,比如你換了一個頁面或者重新整理了一下,這個bean就被重新執行個體化了

request,bean只在請求期間有效

session,bean在一個會話中有效

application,只要你的web server沒有停止,就一直有效。

page說白了就是只對當前頁面有效,request的話,可以通過jsp:forward來讓request在幾個servlet或者jsp中傳遞,所以page的範圍

  Bean存在的範圍以及id變數名的有效範圍。預設值是page,以下詳細說明:  
   
  a)page   :你能在包含<jsp:useBean>元素的JSP檔案以及此檔案中的所有靜態包含檔案中使用Bean,直到頁面執行完畢向用戶端發出響應或轉到另一個檔案為止。  
   
  b)request:你在任何執行相同請求的JSP檔案中使用Bean,直到頁面執行完畢向用戶端發出響應或轉到另一個檔案為止。你能夠使用Request對象訪問Bean  
   
  c)session:從建立Bean開始,就能在任何使用相同session的JSP檔案中使用Bean。這個Bean存在於整個Session生存周期內,任何在分享此Session的JSP檔案都能使用同一Bean。注意在你建立Bean的JSP檔案的<%@   page   %>指令中必須指定session=true  
   
  d)application:   從建立Bean開始,你就能夠在任何使用相同application的JSP檔案中使用Bean。這個Bean存在於整個application生存周期內,任何在分享此application的JSP檔案都能使用同一Bean。  

一個JavaBean的scope="request"的例子

request1.jsp 檔案
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*, test.TestBean" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>request1</title>
</head>
<body>
<jsp:useBean id="test" class="test.TestBean" scope="request"/>
<%
out.println(test.getCount());
request.setAttribute("test",test);
%>
<jsp:forward page="request2.jsp"/>
</form>
</body>
</html>

request2.jsp檔案
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*, test.TestBean" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>request2</title>
</head>
<body>
<%
out.println(((TestBean)request.getAttribute("test")).getCount());
%>

</body>
</html>

bean檔案
package test;
public class TestBean
{
private int count;

public int getCount() {
return count++;
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.