<jsp:useBean>元素使用全解

一. JSP动作元素useBean语法:

<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>元素各属性解析:

1. id="beanInstanceName" 
        
        一个用来标识你指定作用域的变量。可以在JSP文件的表达式或脚本小应
        用程序中使用该变量名称。
        
        该名称大小写敏感,必须符合JSP页面中脚本语言的命名规则。假如你使
        用的是Java语言,则该名称遵守的是Java命名规范。假如该Bean对象已由
        其它<jsp:useBean>元素创建,则该值必须和实例化该Bean对象
        的<jsp:useBean>元素id属性值一致,才能实现定位到该Bean对象。
        
2. 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对象在整个应用期间一直存在。应用中任意一个
页面均可使用它。

3. 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:useBean id="u" type="bean.User" beanName="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){
          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://chineseoa.iteye.com/blog/577256>

时间: 2024-10-15 18:01:36

<jsp:useBean>元素使用全解的相关文章

Jsp:useBean使用详解

<jsp:useBean>标签用来在jsp页面中创建一个Bean实例,定义语法如下: 一.<jsp:useBean>语法 <jsp:useBean id="id" scope="page|request|session|application" typeSpec/> 二.<jsp:setProperty>语法 <jsp:setProperty name="beanName" propertyD

jsp动作元素

复习: 1.jsp的指令 1)page 指定当前页面能做什么,必须出现在页面的第一行 2)Include 包含,这主要指的是静态包含,为了实现页面重用(或者代码重用):针对页面:让一个页面成为很多页面公用的一个banner.针对代码部分 jsp使用的javabean导入包 的类. 3)taglib 回头再说吧,现在一时半会儿找不到 2.jsp内置对象 1)什么是内置对象? 服务器加载的一堆类的对象,是service方法中得参数或者变量 2)内置对象:输入输出,作用域对象 servlet对象 异常

jsp usebean的使用

一般 jsp usebean的使用和  jsp:setProperty  使用 <jsp:useBean>语法 <jsp:useBean id="id" scope="page|request|session|application" typeSpec/> <jsp:setProperty>语法 <jsp:setProperty name="beanName" propertyDetail />其中

JSP 动作元素

JSP动作元素 1.  动作元素分类 用来动态的包含文件.网页跳转及使用JavaBean组件等. 语法:<jsp:XXX />或者<jsp:XXX></jsp:XXX> 第一类是与存取JavaBean有关的,包括<jsp:useBean>.<jsp:setProperty>  <jsp:getProperty> 第二类是基本动作元素,包括<jsp:include>.<jsp:forward>.<jsp:p

全解排序算法

全解排序算法 排序:就是重新排列表中的元素,是表中的元素满足按关键字递增或递减的过程.为了查找方便,通常要求计算机中的表是按关键字有序的.排序的确切定义如下: 输入:n个记录R1,R2, ...,Rn对应的关键字为k1,k2,...,kn. 输出:输入序列的一个重排R1',R2', ...,Rn',使得有k1'<=k2'<=...<=kn'(其中"<="办以换成其他的比较大小的符号). 算法的稳定性:如果待排序表中有两个元素Ri.Rj,其对应的关键字keyi=k

JSP动作元素——————理论篇

JSP动作元素的组成及作用 JSP使用Action来控制Servlet引擎的行为,可重复使用JavaBean组件. 常用Action: jsp:param       在 jsp:include.jsp:forward.jsp:params 块之间使用,指定一个将加入请求的当前参数组中的参数. jsp:include        在文件需要时包含一个文件. jsp:forward       将用户导向一个新的页面. jsp:plugin        在 JSP 页面中引入插件. jsp:p

Java Web学习(16):JSP动作元素(一)

一JSP动作元素概述 (1)JSP动作元素简介 与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的.利用JSP动作 可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面.为Java插件生成HTML代码. JSP动作元素(action elements),动作元素为请求处理阶段提供信息.动作元素遵循XML元素的语法,有一个包 含元素名的开始标签,可以有属性.可选的内容.与开始标签匹配的结束标签. 动作元素只有一种语法,它符合XML标准

JavaWeb学习(三)----JSP内置对象详解

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4065790.html 联系方式:[email protected] [系列]JSP学习系列文章:(持续更新) JavaWeb学习(一)----JSP简介及入门(含Tomcat的使用) JavaWeb学习(二)----JSP脚本元素.指令元素.动作元素 JavaWeb学习(三)----JSP内置对象

【Head First Servlets and JSP】笔记19:JavaBeans与JSP动作元素(&lt;jsp:setProperty.....&gt;、&lt;jsp:getProperty.....&gt;)

内容来自imooc. 1.什么是JSP动作元素 2.在JSP页面中如何使用Javabeans <jsp:......>表示这是一个JSP动作元素 3.使用JSP动作元素创建JavaBean的实例 <%@ page import="com.po.User" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html&g