jsp:useBean動(dòng)作到底有什么意義?
jsp:useBean動(dòng)作:
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
馬克-to-win:java bean簡(jiǎn)單來(lái)說(shuō)很像過(guò)去的類(lèi),但是不必有main方法,但里面的將被jsp調(diào)用的方法必須是public型的。當(dāng)把一大堆可被人調(diào)用的公共方法,放在一個(gè)黑匣子當(dāng)中時(shí),你覺(jué)得這個(gè)黑匣子像個(gè)“豆”嗎?bean的中文翻譯就是“豆”。相比servlet,jsp的弱項(xiàng)就在于:當(dāng)需要寫(xiě)大量業(yè)務(wù)代碼時(shí)?,F(xiàn)在好了,有了useBean這個(gè)動(dòng)作,jsp一下就如虎添翼了。useBean的scope屬性可能讓Bean關(guān)聯(lián)到更多的頁(yè)面,大大增加了bean的重用性。

如果下面的例子中MyBean的方法不是public,程序運(yùn)行時(shí)會(huì)報(bào)下面的錯(cuò)誤: ServletException: tried to access method com.MyBean.increment()V from class org.apache.jsp.jsp1_jsp



例 4.1.1


package com;
public class MyBean {
    private int count;
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public void increment()
    {
        count ++;
    }
}


jsp1.jsp:

<jsp:useBean id="count1" class="com.MyBean" scope="session"/>
<jsp:useBean id="count2" class="com.MyBean" scope="session"/>
Count1:
<%count1.increment();%>you are <%=count1.getCount()%>

Count2:
you are <%=count2.getCount()%>





輸出結(jié)果,在瀏覽器中:

Count1: you are 1 Count2: you are 0

繼續(xù)在同一個(gè)瀏覽器中刷新:數(shù)據(jù)會(huì)一直上升。

Count1: you are 2 Count2: you are 0

換個(gè)瀏覽器,結(jié)果就回到了初始:
Count1: you are 1 Count2: you are 0



觀察轉(zhuǎn)換成的servlet:
<jsp:useBean id="count1" class="com.MyBean" scope="session"/>
會(huì)被轉(zhuǎn)換成:意思就是,session當(dāng)中有沒(méi)有count1,如沒(méi)有,new一個(gè),如有,就用過(guò)去的,這樣在幾個(gè)jsp頁(yè)面和servlet之間就用session可以共享bean了。名字就叫count1.

      com.MyBean count1 = null;
      synchronized (session) {
        count1 = (com.MyBean) _jspx_page_context.getAttribute("count1", PageContext.SESSION_SCOPE);
        if (count1 == null){
          count1 = new com.MyBean();
          _jspx_page_context.setAttribute("count1", count1, PageContext.SESSION_SCOPE);
        }
      }