這是一個(gè)困擾我很久的問題了,一直不明白<jsp:useBean>在jsp文件轉(zhuǎn)為servlet時(shí)是怎樣編譯的,今天找到答案了,高興,呵呵,請(qǐng)看:

JSP中正確應(yīng)用類:

應(yīng)該把類當(dāng)成JAVA BEAN來用,不要在<% %> 中直接使用. 如下的代碼(1)經(jīng)過JSP引擎轉(zhuǎn)化后會(huì)變?yōu)榇a(2):
從中可看出如果把一個(gè)類在JSP當(dāng)成JAVA BEAN 使用,JSP會(huì)根據(jù)它的作用范圍把它保存到相應(yīng)的內(nèi)部對(duì)象中.
如作用范圍為request,則把它保存到request對(duì)象中.并且只在第一次調(diào)用(對(duì)象的值為null)它時(shí)進(jìn)行實(shí)例化. 而如果在<% %>中直接創(chuàng)建該類的一個(gè)對(duì)象,則每次調(diào)用JSP時(shí),都要重新創(chuàng)建該對(duì)象,會(huì)影響性能.

代碼(1)
<jsp:useBean id="test" scope="request" class="demo.com.testdemo">
</jsp:useBean>

<%
test.print("this is use java bean");

testdemo td= new testdemo();
td.print("this is use new");
%>

代碼 (2)
demo.com.testdemo test = (demo.com.testdemo)request.getAttribute("test");
if (test == null)
{
try
{
test = (demo.com.testdemo) java.beans.Beans.instantiate(getClass().getClassLoader(),"demo.com.testdemo");
}
catch (Exception _beanException)
{
throw new weblogic.utils.NestedRuntimeException("cannot instantiate 'demo.com.testdemo'",_beanException);
}
request.setAttribute("test", test);
out.print("\r\n");
}
out.print("\r\n\r\n\r\n");
test.print("this is use java bean");

testdemo td= new testdemo();
td.print("this is use new");

原來指定作用范圍是這么一回事