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