大可制作:QQ群:31564239(asp|jsp|php|mysql)

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