当前位置: 首页 > news >正文

浅析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可以看成是一个黑盒子,即只需要知道其功能而不必管其内部结构的软件设备。黑盒子只介绍和定义其外部特征和与其他部分的接口,如按钮、窗口、颜色、形状、句柄等。通过将系统看成使用黑盒子关联起来的通讯网络,我们可以忽略黑盒子内部的系统细节,从而有效地控制系统的整体性能。

三、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\.plugins\org.eclipse.wst.server.core\tmp2\work\Catalina\localhost\day_0623\org\apache\jsp)

 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("\r\n");
      out.write("\t\t\r\n");
      out.write("\t\t");
      org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("person"), "name", "wangjian", null, null, false);
      out.write("\r\n");
      out.write("\t\t\r\n");
      out.write("\t\t");
      out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString((((com.test.Person)_jspx_page_context.findAttribute("person")).getName())));
      out.write("\r\n");
      out.write("\t</body>\r\n");

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

 

相关文章:

  • 根据不同省份读取配置文件
  • iostat 等运维命令用法
  • 单词最近距离
  • Eclipse安装SVN插件总结
  • 排序算法6--选择排序--简单选择排序
  • KVM安装配置
  • java中Random随机种子使用
  • linux启动顺序
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • Spring Cloud Sleuth使用简介
  • Android学习笔记:Handler初步
  • Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群
  • Google Spanner论文翻译
  • Node.js爬虫抓取数据 -- HTML 实体编码处理办法
  • 牛客网-约数的个数
  • .pyc 想到的一些问题
  • [译] React v16.8: 含有Hooks的版本
  • 【刷算法】从上往下打印二叉树
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 4. 路由到控制器 - Laravel从零开始教程
  • C++类中的特殊成员函数
  • CentOS 7 防火墙操作
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • cookie和session
  • Javascript设计模式学习之Observer(观察者)模式
  • js中forEach回调同异步问题
  • leetcode98. Validate Binary Search Tree
  • php的插入排序,通过双层for循环
  • Python进阶细节
  • socket.io+express实现聊天室的思考(三)
  • Spring Cloud Feign的两种使用姿势
  • Vim 折腾记
  • XForms - 更强大的Form
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 设计模式走一遍---观察者模式
  • 深度解析利用ES6进行Promise封装总结
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 用element的upload组件实现多图片上传和压缩
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (12)目标检测_SSD基于pytorch搭建代码
  • (day6) 319. 灯泡开关
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (三分钟)速览传统边缘检测算子
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)socket Aio demo
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福