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);
}
}