详解JSP动作元素useBean语法
2017-03-28 21:22
531 查看
一. JSP动作元素useBean语法:
二. JSP动作元素useBean使用示例:
三. JSP动作元素useBean执行步骤:
首先会尝试定位Bean实例,如果其不存在,则会依据class名称(class属性指定)或序
列化模板(beanName属性指定)进行实例化。
步骤1: 尝试在scope属性指定的作用域使用你指定的名称(id属性值)定位Bean对
象;
步骤2: 使用你指定的名称(id属性值)定义一个引用类型变量;
步骤3: 假如找到Bean对象,将其引用给步骤2定义的变量。假如你指定类型(type属性),赋予该Bean对象该 类型;
步骤4: 假如没找到,则实例化一个新的Bean对象,并将其引用给步骤2定义的变量。假如该类名(由beanName属性指定的类名)代表的是一个序列化模板(serialized template),该Bean对象由java.beans.Beans.instantiate初始化;
步骤5: 假如
我们可以使用
四.
id=”beanInstanceName”
scope=”page | request | session | application”
3) session: 你可以在同一次会话的任意一个页面使用该JavaBean对象,该
JavaBean对象在整个会话期间一直存在。使用
页面的<%@page %>指令元素的session属性值必须设置为true;
4) application: 你可以在创建该JavaBean对象的同一个应用的任意一个页面
使用该JavaBean对象,该JavaBean对象在整个应用期间一直存在。应用中任意一个
页面均可使用它。
class=”package.class”
4. type=”package.class”
5. class=”package.class” type=”package.class”
使用class属性指定的类实例化JavaBean对象,并声明其数据类型为type
属性指定的类型;type属性值可和class属性值同,或为其超类、接口。
6.beanName=”{package.class | <%= expression %>}” type=”package.class”
使用java.beans.Beans.instantiate方法实例化beanName属性指定的类或序列
化模板对应的Bean对象,赋予JavaBean对象type属性指定的数据类型。
Beans.instantiate方法会检查beanName属性指定的名称是类名称还是序列化模板
的名称。假如该JavaBean对象已被序列化,则Beans.instantiate使用类加载器读
取序列化的内容,更多信息可参考JavaBeans.
beanName属性值要么是一个完整类名,要么是一个可以转化为完整类名的表达式。
用来传给Beans.instantiate方法。type属性值可和beanName属性值同,或为其超
类、接口。
beanName和type属性所指定的包名,类名均大小写敏感。
五. JSP动作元素useBean使用剖析:
对于
完成。以下给出二段示意代码, 可参阅之前步骤进行深化理解:
1) 通过beanName指定要实例化的JavaBean类名:
JSP源码 :
------------------------------------
-------
JSP转译成Servlet的源码 :
------------------------------------
-------
2) 通过class指定要实例化的JavaBean类名:
JSP源码 :
------------------------------------
-------
JSP转译成Servlet的源码 :
------------------------------------
-------
六. 注意几点:
1) class或beanName不能同时存在;它们用来指定实例化的类名称或序列化模板;如果确信JavaBean对象已存在,class和beanName属性均可无须指定, 可只须指定type属性。
2) class可以省去type独自存在,beanName必须和type一起使用;
3) class指定的是类名,beanName指定的是类名或序列化模板的名称;
4) class指定的类名必须包含public、无参的构造方法;在对象已实例化时,beanName指定的名称可以为其接口、父类;
5) 如果JavaBean对象已存在,
6) class或beanName指定的类名必须包括包名称,type可以省去包名,通过<%@page import=”“%>指定所属包亦可。
7) class通过new创建JavaBean对象;beanName通过java.beans.Beans.instantiate初始化JavaBean对象。
原作者出处:http://www.cnblogs.com/nearor/p/4525415.html
<jsp:useBean id="beanInstanceName" scope="page | request | session | application" { class="package.class" | type="package.class" | class="package.class" type="package.class" | beanName="{package.class | <%= expression %>}" type="package.class" } { /> | > other elements </jsp:useBean> }
二. JSP动作元素useBean使用示例:
<jsp:useBean id="cart" scope="session" class="session.Carts" /> <jsp:setProperty name="cart" property="*" /> <jsp:useBean id="checking" scope="session" class="bank.Checking" > <jsp:setProperty name="checking" property="balance" value="0.0" /> </jsp:useBean>
三. JSP动作元素useBean执行步骤:
<jsp:useBean>元素用来定位或初始化一个JavaBeans组件。<jsp:useBean>
首先会尝试定位Bean实例,如果其不存在,则会依据class名称(class属性指定)或序
列化模板(beanName属性指定)进行实例化。
进行定位或初始化Bean对象时,<jsp:useBean>按照以下步骤执行。
步骤1: 尝试在scope属性指定的作用域使用你指定的名称(id属性值)定位Bean对
象;
步骤2: 使用你指定的名称(id属性值)定义一个引用类型变量;
步骤3: 假如找到Bean对象,将其引用给步骤2定义的变量。假如你指定类型(type属性),赋予该Bean对象该 类型;
步骤4: 假如没找到,则实例化一个新的Bean对象,并将其引用给步骤2定义的变量。假如该类名(由beanName属性指定的类名)代表的是一个序列化模板(serialized template),该Bean对象由java.beans.Beans.instantiate初始化;
步骤5: 假如
<jsp:useBean>此次是实例化Bean对象而不是定位Bean对象,且它有体标记(body tags)或元素 (位于
<jsp:useBean>和
</jsp:useBean>之间的内容,则执行该体标记。
<jsp:useBean>和
</jsp:useBean>之间经常包含
<jsp:setProperty>,用来设置该Bean的属性值。正如步骤5所描述的,该元素仅在
<jsp:useBean>实例化Bean对象时处理。假如Bean对象早已存在,
<jsp:useBean>是定位到它,则体标记毫无用处。
我们可以使用
<jsp:useBean>元素来定位或实例化一个JavaBean对象,但不能是EJB。对于EJB,我们可以通过创建自定义标记来直接调用彧采用其它方式。
四.
<jsp:useBean>元素各属性解析:
id=”beanInstanceName”
一个用来标识你指定作用域的变量。可以在JSP文件的表达式或脚本小应 用程序中使用该变量名称。 该名称大小写敏感,必须符合JSP页面中脚本语言的命名规则。假如你使 用的是Java语言,则该名称遵守的是Java命名规范。假如该Bean对象已由 其它<jsp:useBean>元素创建,则该值必须和实例化该Bean对象 的<jsp:useBean>元素id属性值一致,才能实现定位到该Bean对象。
scope=”page | request | session | application”
Bean对象存在的作用范围,默认值为 page. 不同作用域解释如下: 1) page: 你可以在<jsp:useBean>元素所在JSP页面或其静态包含页面使 用该JavaBean对象,直到该页面发送响应回客户端或跳转(forwards)至其 它页面。 2) request: 你可以在处理同一个请求的任意一个页面使用该JavaBean对 象,直到该页面发送响应回客户端或产生新的请求。你可以使用request 对象访问该JavaBean对象,示例: request.getAttribute(beanInstanceName).
3) session: 你可以在同一次会话的任意一个页面使用该JavaBean对象,该
JavaBean对象在整个会话期间一直存在。使用
<jsp:useBean/>创建JavaBean对象的
页面的<%@page %>指令元素的session属性值必须设置为true;
4) application: 你可以在创建该JavaBean对象的同一个应用的任意一个页面
使用该JavaBean对象,该JavaBean对象在整个应用期间一直存在。应用中任意一个
页面均可使用它。
class=”package.class”
从一个class实例化Bean对象,使用new关键字调用class的构造方法完 成。 该 class 必须不能是抽象,必须有一个 public、无参的构造器。包名和 类名称大小写敏感。
4. type=”package.class”
用来指定该Bean对象的数据类型,假如既没有指定 class 或 beanBean, 没有Bean对象能被实例化。包和类名称大小写敏感。
5. class=”package.class” type=”package.class”
使用class属性指定的类实例化JavaBean对象,并声明其数据类型为type
属性指定的类型;type属性值可和class属性值同,或为其超类、接口。
class属性中所指定类名称必须不能为抽象的,必须包含有public,无参的 构造方法。class和type属性所指定的包名,类名均大小写敏感。
6.beanName=”{package.class | <%= expression %>}” type=”package.class”
使用java.beans.Beans.instantiate方法实例化beanName属性指定的类或序列
化模板对应的Bean对象,赋予JavaBean对象type属性指定的数据类型。
Beans.instantiate方法会检查beanName属性指定的名称是类名称还是序列化模板
的名称。假如该JavaBean对象已被序列化,则Beans.instantiate使用类加载器读
取序列化的内容,更多信息可参考JavaBeans.
beanName属性值要么是一个完整类名,要么是一个可以转化为完整类名的表达式。
用来传给Beans.instantiate方法。type属性值可和beanName属性值同,或为其超
类、接口。
beanName和type属性所指定的包名,类名均大小写敏感。
五. JSP动作元素useBean使用剖析:
对于
<jsp:useBean>执行步骤的理解,我们可以通过阅读JSP转化成的Servlet源码
完成。以下给出二段示意代码, 可参阅之前步骤进行深化理解:
1) 通过beanName指定要实例化的JavaBean类名:
JSP源码 :
------------------------------------
-------
JSP转译成Servlet的源码 :
------------------------------------
-------
bean.User u = null; synchronized (_jspx_page_context) { u = (bean.User) _jspx_page_context.getAttribute("u", PageContext.PAGE_SCOPE); if (u == null){ try { u = (bean.User)java.beans.Beans.instantiate(this.getClass().getClassLoader(),"bean.User"); } catch (ClassNotFoundException exc) { throw new InstantiationException(exc.getMessage()); } catch (Exception exc) { throw new ServletException("Cannot create bean of class " + "bean.User", exc); } _jspx_page_context.setAttribute("u", u, PageContext.PAGE_SCOPE); } }
2) 通过class指定要实例化的JavaBean类名:
JSP源码 :
------------------------------------
-------
<jsp:useBean id="u" type="bean.User" class="bean.User"/>
JSP转译成Servlet的源码 :
------------------------------------
-------
bean.User u = null; synchronized (_jspx_page_context) { u = (bean.User) _jspx_page_context.getAttribute("u",PageContext.PAGE_SCOPE); if (u == null){ u = new bean.User(); _jspx_page_context.setAttribute("u", u,PageContext.PAGE_SCOPE); } }
六. 注意几点:
1) class或beanName不能同时存在;它们用来指定实例化的类名称或序列化模板;如果确信JavaBean对象已存在,class和beanName属性均可无须指定, 可只须指定type属性。
2) class可以省去type独自存在,beanName必须和type一起使用;
3) class指定的是类名,beanName指定的是类名或序列化模板的名称;
4) class指定的类名必须包含public、无参的构造方法;在对象已实例化时,beanName指定的名称可以为其接口、父类;
5) 如果JavaBean对象已存在,
<jsp:useBean>只是用来定位JavaBean,则只需使用type属性即可,class和beanName这时舍去不影响使用。
6) class或beanName指定的类名必须包括包名称,type可以省去包名,通过<%@page import=”“%>指定所属包亦可。
7) class通过new创建JavaBean对象;beanName通过java.beans.Beans.instantiate初始化JavaBean对象。
原作者出处:http://www.cnblogs.com/nearor/p/4525415.html
相关文章推荐
- JSP动作元素useBean语法
- JSP动作元素详解
- JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
- 复习:JSP基本语法(JSP注释 + JSP指令 + JSP脚本元素 + JSP动作元素)
- JSP动作元素详解(俗称小脚本)
- JSP动作元素详解
- JSP的语法、指令、动作元素、隐含对象知识回顾
- JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)
- JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
- JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
- JSP(2)jsp语法之指令元素、脚本元素、动作元素forward、注释方法
- JSP动作元素详解
- JSP动作元素详解
- JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
- JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
- 复习:JSP基本的语法(JSP凝视 + JSP指令 + JSP脚本元素 + JSP动作元素)
- jsp语法,指令,动作元素,内置对象
- JSP入门第二章——Jsp语法之脚本、指令、动作元素
- Jsp语法、指令及动作元素