`
chineseoa
  • 浏览: 102904 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

<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对象。

 

分享到:
评论
1 楼 itway 2013-07-20  
专业。谢谢

相关推荐

    <jsp实用教程>书中所有例题代码.rar

    5. JSP动作标签:`&lt;jsp:useBean&gt;`用于实例化和查找JavaBean,`&lt;jsp:setProperty&gt;`和`&lt;jsp:getProperty&gt;`则用来设置和获取Bean的属性。此外,还有`&lt;jsp:include&gt;`、`&lt;jsp:forward&gt;`等用于页面操作。 6. JSP标签库:...

    Java Web程序设计任务驱动教程课后习题参考答案 - 蓝敏、周伟敏、杨茜

    * include 指令和&lt;jsp:include&gt;动作的区别:执行时间、引入内容等 * JSP 程序里有三种注释:HTML 注释、Java 注释、JSP 隐藏注释 服务器交互 * 使用 response 对象进行重定向的方法:sendRedirect * session 对象...

    JSP useBean连接 Access 数据库,不使用数据源

    在JSP页面中,我们使用`useBean`指令来实例化这个JavaBean: ```jsp &lt;%@ page language="java" %&gt; &lt;%@ page import="com.yourpackage.AccessDBBean" %&gt; &lt;% AccessDBBean dbBean = (AccessDBBean) session....

    JSP之访问JavaBean的一个简单例子

    JSP之访问JavaBean的一个简单例子 使用useBean,jsp:setProperty,jsp:getProperty使用的一个简单例子 博客参考地址:https://blog.csdn.net/qq_36631076/article/details/79693890

    JSP动态网页设计:第9章 JSP动作元素.ppt

    标准的动作元素包括`&lt;jsp:include&gt;`、`&lt;jsp:forward&gt;`、`&lt;jsp:param&gt;`、`&lt;jsp:plugin&gt;`、`&lt;jsp:useBean&gt;`、`&lt;jsp:setProperty&gt;`和`&lt;jsp:getProperty&gt;`。 2. **&lt;jsp:include&gt;**: 这个动作元素用于动态地将一个页面...

    jsp标准动作

    该标记的语法格式为:&lt;jsp:useBean id="bean name" class="class name" /&gt;,其中 id 属性指定了 Bean 的名称,class 属性指定了 JavaBean 的类名。 jsp:setProperty 标记用于设置 Bean 的属性。该标记的语法格式为...

    JSP动作元素.pptx

    标准动作元素是JSP提供的一些基本动作元素,例如&lt;jsp:include&gt;、&lt;jsp:param&gt;、&lt;jsp:forward&gt;、&lt;jsp:useBean&gt;、&lt;jsp:getProperty&gt;、&lt;jsp:setProperty&gt;和&lt;jsp:plugin&gt;等。自定义动作元素是开发者根据需求自定义的动作...

    JSP教材JSP语法

    - 使用`&lt;jsp:getProperty&gt;`之前需要先使用`&lt;jsp:useBean&gt;`标签创建Bean实例。 - 确保Bean类中提供了正确的getter方法以获取属性值。 - 如果Bean中的属性未设置或不存在,可能需要进行适当的异常处理。 总结来说...

    jsp大作业上机练习

    JSP的动作标签如`&lt;jsp:useBean&gt;`、`&lt;jsp:setProperty&gt;`、`&lt;jsp:forward&gt;`等,简化了页面操作。例如,`&lt;jsp:useBean&gt;`用于实例化JavaBean,`&lt;jsp:setProperty&gt;`设置JavaBean的属性。 **五、JSP与Servlet的关系** ...

    jsp.rar_jsp 登录界面_jsp界面

    JSP动作元素以`&lt;jsp:`开头,如`&lt;jsp:useBean&gt;`, `&lt;jsp:setProperty&gt;`, `&lt;jsp:getProperty&gt;`等,它们主要用于操作JavaBeans。例如,`&lt;jsp:useBean&gt;`用于实例化或查找一个JavaBean,`&lt;jsp:setProperty&gt;`和`&lt;jsp:...

    JSP的相关基础知识与语法

    5. **JSP动作**:以`&lt;jsp:`开头,如`&lt;jsp:include&gt;`、`&lt;jsp:forward&gt;`和`&lt;jsp:useBean&gt;`等,它们执行特定的动作,而不是执行Java代码。例如,`&lt;jsp:include&gt;`可以动态地包含一个页面,而`&lt;jsp:forward&gt;`则会将请求...

    JSP程序设计与案例实战

    exception)、JavaBean组件、JSP标准动作(&lt;jsp:forward&gt;,&lt;jsp:param&gt;,&lt;jsp:setProperty&gt;,&lt;jsp:plugin&gt;,&lt;jsp:include&gt;,&lt;jsp:useBean&gt;,&lt;jsp:getProperty&gt;)、JSP中使用数据库(JDBC常用API)、JSTL的配置步骤、核心...

    jsp中文手册.rar_jsp_jsp中文手册

    例如,`&lt;jsp:useBean&gt;`用来实例化或查找JavaBean,`&lt;jsp:setProperty&gt;`设置Bean的属性,`&lt;jsp:getProperty&gt;`读取Bean的属性。 5. **EL(Expression Language):** EL是一种简洁的表达式语言,用于从页面上下文中...

    第2讲JSP基本语法和访问数据库共44页.pdf.zip

    5. JSP动作元素:如`&lt;jsp:useBean&gt;`, `&lt;jsp:setProperty&gt;`, `&lt;jsp:getProperty&gt;`等,用于管理JavaBean对象。 二、JSP页面生命周期 JSP页面经历翻译、编译、初始化、服务和销毁五个阶段。在这些阶段中,JSP会被转换...

    jsp学习笔记——初学者的选择

    - `&lt;jsp:useBean&gt;`、`&lt;jsp:setProperty&gt;`、`&lt;jsp:getProperty&gt;`:管理JavaBean对象。 - **EL(Expression Language)元素**: - `${expression}`:表达式语言,用于在JSP中简便地访问JavaBean的属性。 3. **JSP...

    jsp常用标签

    * 在 jsp:useBean 后使用 jsp:setProperty:&lt;jsp:useBean id="myUser" … /&gt; … &lt;jsp:setProperty name="user" property="user" … /&gt; * jsp:setProperty 出现在 jsp:useBean 标签内:&lt;jsp:useBean id="myUser" … &gt;...

    jsp2.0基本语法

    - `&lt;jsp:useBean&gt;`:查找或实例化一个JavaBean。 - `&lt;jsp:setProperty&gt;`:设置JavaBean的属性。 - `&lt;jsp:getProperty&gt;`:获取JavaBean的属性。 7. **EL(Expression Language)** EL简化了JSP中的数据访问,...

    JSP技术知识点考查 jsp动态建站技术

    &lt;jsp:useBean&gt;标签用来在JSP页面中创建一个JavaBean实例并指定他的名字以及作用范围 &lt;jsp:setProperty&gt;此操作和setBean一起协作,用来设置JavaBean的属性 &lt;jsp:getProperty&gt;操作是对&lt;jsp:setProperty&gt;操作的补充,...

    JSP内建对象、使用JavaBean

    3. **动作标签**:如`&lt;jsp:useBean&gt;`用来实例化和管理JavaBean,`&lt;jsp:setProperty&gt;`设置JavaBean的属性,`&lt;jsp:getProperty&gt;`获取属性值。 **JSP内建对象** JSP提供了8个内建对象,无需声明即可直接使用: 1. **...

    jsp实现的用户登录模块

    - JSP脚本元素:如`&lt;jsp:useBean&gt;`、`&lt;jsp:setProperty&gt;`、`&lt;jsp:getProperty&gt;`等,用于管理Java对象。 2. **用户界面设计** 用户界面应包含两个输入字段(username和password),以及一个提交按钮。这些字段的...

Global site tag (gtag.js) - Google Analytics