zoukankan      html  css  js  c++  java
  • 浅析JavaBean

    一、概述

      JavaBean组件本质上是一个Java类,仅仅是这个类的编码要遵循一些约定。用户能够使用JavaBean将功能、处理、值、数据库訪问和其它不论什么能够用java代码创造的对象进行打包,而且其它的开发人员能够通过内部的JSP页面、Servlet、其它JavaBean、applet程序或者应用来使用这些对象。用户能够觉得JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心不论什么改变。本文将对JavaBean涉及的知识点和基本使用方法进行简单的总结。

    二、什么是JavaBean?

      JavaBean 是一种JAVA语言写成的可重用组件。本质上是一个类。具有下面特性:

    • 它是一个public类型的类,属性则为private类型的,通过public的方法暴露给其他程序
    • 必须具有一个无參的构造函数
    • 提供setXXX()方法和getXXX()方法让外部程序设置和获取JavaBean属性

      一个JavaBean主要由三个部分组成:

    1. 属性:是JavaBean组件内部状态的抽象表示
    2. 方法:就是通常的Java方法,默认情况下全部的方法都能够被外部调用
    3. 事件:Bean与其它软件组织交流信息的主要方式是发送和接收事件

      以下代码为一个典型的JavaBean:

    package com.test;
    
    public class Person
    {
        private String name="aaa";
        private int age;
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
        public int getAge()
        {
            return age;
        }
        public void setAge(int age)
        {
            this.age = age;
        }
        
    }

      JavaBean能够看成是一个黑盒子。即仅仅须要知道其功能而不必管其内部结构的软件设备。

    黑盒子仅仅介绍和定义其外部特征和与其它部分的接口,如button、窗体、颜色、形状、句柄等。通过将系统看成使用黑盒子关联起来的通讯网络,我们能够忽略黑盒子内部的系统细节。从而有效地控制系统的总体性能。

    三、JavaBean的使用

      在JSP中能够像使用普通类一样訪问JavaBean,在脚本元素中实例化类的对象。调用对象的方法,并提供了三个动作元素来訪问JavaBean。

      <jsp:useBean>:用于实例化JavaBean或者定位一个已经存在的JavaBean。并把实例的引用赋值给一个变量。

    <%@ page language="java" pageEncoding="UTF-8"%>
    <html>
        <head>
            <title>在此处插入标题</title>
        </head>
        <body>
            <jsp:useBean id="person" class="com.test.Person" scope="page"/>
            <%=person.getName() %>
        </body>
    </html>

      <jsp:setProperty>:和<jsp:userBean>一起使用用来设置JavaBean的属性。

    <%@ page language="java" pageEncoding="UTF-8"%>
    <html>
        <head>
            <title>在此处插入标题</title>
        </head>
        <body>
            <!-- userbean标签的标签提仅仅在userbean标签实例化bean时使用-->
            <jsp:useBean id="person" class="com.test.Person" scope="page"/>
            
            <jsp:setProperty property="name" name="person" value="xujian"/>
            <%=person.getName() %>
        </body>
    </html>

      还能够通过param指定请求对象中參数的名字:

    <jsp:setProperty property="name" name="person" param="name"/>

      在浏览器中输入http://localhost:8080/day_0623/1.jsp?name=songji,页面会显示属性name的值:songji。

      <jsp:getProperty>:用来訪问一个Bean的属性,并把属性的值转化成一个String。然后发送到输出流中

    <%@ page language="java" pageEncoding="UTF-8"%>
    <html>
        <head>
            <title>在此处插入标题</title>
        </head>
        <body>
            <!-- userbean标签的标签提仅仅在userbean标签实例化bean时使用-->
            <jsp:useBean id="person" class="com.test.Person" scope="page"/>
            
            <jsp:setProperty property="name" name="person" value="wangjian"/>
            
            <jsp:getProperty property="name" name="person"/>
        </body>
    </html>

      查看jsp转化的Servlet文件(文件文件夹:workSpace.metadata.pluginsorg.eclipse.wst.server.core mp2workCatalinalocalhostday_0623orgapachejsp)

          com.test.Person person = null;
          synchronized (_jspx_page_context) {
            person = (com.test.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);
            if (person == null){
              person = new com.test.Person();
              _jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
            }
          }
          out.write("
    ");
          out.write("		
    ");
          out.write("		");
          org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("person"), "name", "wangjian", null, null, false);
          out.write("
    ");
          out.write("		
    ");
          out.write("		");
          out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString((((com.test.Person)_jspx_page_context.findAttribute("person")).getName())));
          out.write("
    ");
          out.write("	</body>
    ");

      能够看到,<jsp:getProperty property="name" name="person"/>这是转换成上述代码红字体部分。调用了Person类的getName方法。假设该属性未定义该方法则会报错。

  • 相关阅读:
    c++ 虚继承与继承的差异 (转)
    主题:PageRank解释
    (转)开源爬虫larbin分析
    Django随笔
    原生爬虫小Demo
    SVN
    Python的正则表达式与JSON
    类库 方法 模块等
    笔记
    自动补全Typeahead
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7148936.html
Copyright © 2011-2022 走看看