ITEEDU

JSP/Servlet: 深入 JavaBean

JSP网页实际上最终将转换为Servlet,自然的,所谓的JavaBean实际也是Servlet中的一个对象实例而已,当您使用<jsp: useBean>时,实际上是在宣告一个JavaBean的对象实例,id属性即是用以指定参考名称,而class则是型态名称,例如:

<jsp:useBean id="gcdBean" 
class="onlyfun.caterpillar.GCDBean" /> 

上面的程序实际上转换为Servlet后,是这样的:

onlyfun.caterpillar.GCDBean gcdBean = null;
....
gcdBean = new onlyfun.caterpillar.GCDBean();

JavaBean在实例化之后,有其作用范围,即之前所介绍过的page、request、session与application四个作用范围,预设是 page作用范围,您可以找找转换后的Servlet程序代码就可以明了,实际上是这样设定的:

gcdBean = (onlyfun.caterpillar.GCDBean) 
_jspx_page_context.getAttribute("gcdBean", 
PageContext.PAGE_SCOPE);
if (gcdBean == null){
gcdBean = new onlyfun.caterpillar.GCDBean();
_jspx_page_context.setAttribute("gcdBean", 
gcdBean, PageContext.PAGE_SCOPE);
}

从转换为Servlet后的程序代码中可以明了,如果在page范围中找不到JavaBean的实例,就会实例化一个。您也可以使用scope属性来指定其作用范围,例如:

<jsp:useBean id="someBean" 
scope="session" 
class="packagename.beans.SomeBean" />

上面这个卷标设定,将会实例化JavaBean,并将其置入session作用范围,其作用相当于下面这个语法:

<% 
packagename.beans.SomeBean someBean = 
new packagename.beans.SomeBean(); 
session.setAttribute("someBean", someBean); 
// 或是 pageContext.setAttribute("someBean", 
//someBean, PageContext.SESSION_SCOPE); 
%>