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