下面的JSP标记
<jsp:useBean id=”employee” class=”employee”/>
<jsp:getProperty name=”employee” property=”name”/>
另一个使用EL
{employee.name}
假设JSP编译正确,如果在访问页面之前在会话中正确填充了学生对象,那么如果学生对象为空,则2页面如何不同。
有人可以向我解释清楚吗?
答案 0 :(得分:1)
JSP标记:
<jsp:useBean>
元素定位或实例化JavaBeans 零件。它首先尝试定位一个实例 豆。如果bean不存在,
<jsp:useBean>
将实例化它 类或序列化模板。要查找或实例化bean,
<jsp:useBean>
将采用以下方法 步骤,按此顺序:
- 尝试使用您指定的范围和名称查找bean。
- 使用您指定的名称定义对象引用变量。
- 如果找到bean,则在变量中存储对它的引用。如果您指定了type,则为bean提供类型。
- 如果找不到bean,则从您指定的类中实例化它,在新变量中存储对它的引用。如果上课 name表示序列化模板,bean由实例化实例化 java.beans.Beans.instantiate联合。
- 如果已经实例化(而不是定位)bean,并且它具有body标签或元素(在和之间) ),执行body标签。
醇>
该代码将按page
,request
,session
和application
的顺序在所有范围内进行扫描:
<jsp:useBean id="beanInstanceName" scope="page|request|session|application" ... >
<强> EL 强>
它只在bean的所有相同范围(和相同的piority顺序)中找到(从不创建)属性。请务必使用the right EL keywords来访问它们。
回到你的问题,对于这两种策略,如果在范围中设置了student
对象,两者都将正确地获取它并处理其属性。
否则,useBean
标签会创建一个新对象并将其存储在指定的范围内,而EL只要知道该对象何时为空并且不尝试访问其属性就不会打印任何内容。 / p>