看了JavaBean感觉很困惑,不知道什么意思,直到查看了资料发现自己理解错误,把JavaBean误当成一种技术,其实Java Bean只是符合一定规范的Java类,便于封装重用。符合这种规范的Java类可以被其他程序员或框架使用。这些规范包括:

1、所有的属性都必须为private  2、提供默认构造方法   3、提供getter和setter   4、实现Serializable接口

我们下面就来看一个JavaBean的例子。 
一般网页登陆都需要用户名和密码,我们可以把用户名和密码存放在JavaBean中。

代码如下:

  1. package mytrain.formbean;
  2.  
  3. public class userBean {
  4.  
  5. private String name;
  6. private String password;
  7.  
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14.  
  15. public String getPassword() {
  16. return password;
  17. }
  18. public void setPassword(String password) {
  19. this.password = password;
  20. }
  21. }

有了JavaBean以后,我们怎么在JSP页面中访问它呢?

方法有2种: 直接访问JSP标签访问        
(不过我们推荐通过标签来访问) 
1)直接访问

a) 声明bean

在页面顶部导入JavaBean类: <%@ page import="mytrain.formbean.userBean" %> 
在JSP段实例化类: <% userBean user = new userBean(); %>

b) 访问bean 
<% user.setXXX(aa); %> 
<%=user.getXXX();%> 

2)标签访问 
(推荐)

a) 声明bean

使用userBean标签: 
<jsp:useBean id="user" class="mytrain.formbean.userBean"/>

b) 访问bean

通过setProperty标签来设置: 
<jsp:setProperty name="user"  property="name" param="mUserName"/> 
通过getProperty标签来取得: 
<jsp:getProperty name="user" property="name"/>

完整的代码:

标签访问法:

  1. Html代码
  2. <%@ page language="java" pageEncoding="GBK"%>
  3.  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <title>表单Bean例子2</title>
  8. <link rel="StyleSheet" href="../../CSS/style.css" type="text/css" />
  9. </head>
  10.  
  11. <body>
  12.  
  13. <form action="" method="post">
  14. <table>
  15. <tr>
  16. <td>
  17. <span class="blue10">用户名:</span>
  18. </td>
  19. <td>
  20. <input type="text" name="mUserName" size="20"><br>
  21. </td>
  22. </tr>
  23. <tr>
  24. <td>
  25. <span class="blue10">密 码:</span>
  26. </td>
  27. <td>
  28. <input type="password" name="mPassword" size="20"><br>
  29. </td>
  30. </tr>
  31. <tr>
  32. <td>
  33. </td>
  34. <td>
  35. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  36. <input type=submit value="submit"/>
  37. </td>
  38. </tr>
  39. </table>
  40. </form>
  41.  
  42. <jsp:useBean id="user" class="mytrain.formbean.userBean"/>
  43. <jsp:setProperty name="user" property="name" param="mUserName"/>
  44. <jsp:setProperty name="user" property="password" param="mPassword"/>
  45.  
  46. <hr/>
  47.  
  48. 用户名:<jsp:getProperty name="user" property="name"/>
  49. <br>
  50. 码:<jsp:getProperty name="user" property="password"/>
  51.  
  52. </body>
  53. </html>

直接访问法:

  1. <%@ page language="java" pageEncoding="GBK"%>
  2. <%@ page import="mytrain.formbean.userBean" %>
  3.  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <title>表单Bean例子3</title>
  8. <link rel="StyleSheet" href="../../CSS/style.css" type="text/css" />
  9. </head>
  10.  
  11. <body>
  12.  
  13. <form action="" method="post">
  14.  
  15. <table>
  16. <tr>
  17. <td>
  18. <span class="blue10">用户名:</span>
  19. </td>
  20. <td>
  21. <input type="text" name="mUserName" size="20"><br>
  22. </td>
  23. </tr>
  24. <tr>
  25. <td>
  26. <span class="blue10">密 码:</span>
  27. </td>
  28. <td>
  29. <input type="password" name="mPassword" size="20"><br>
  30. </td>
  31. </tr>
  32. <tr>
  33. <td>
  34. </td>
  35. <td>
  36. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  37. <input type=submit value="submit"/>
  38. </td>
  39. </tr>
  40. </table>
  41. </form>
  42.  
  43. <%
  44. userBean user = new userBean();
  45. user.setName(request.getParameter("mUserName"));
  46. user.setPassword(request.getParameter("mPassword"));
  47. %>
  48.  
  49. <hr/>
  50.  
  51. 用户名:<%=user.getName()%>
  52. <br>
  53. 密 码:<%=user.getPassword()%>
  54.  
  55. </body>
  56. </html>
 
Java语言欠缺属性、事件、多重继承功能。所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码。Java Bean正是编写这套胶水代码的惯用模式或约定。这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述约定的类可以用于若干工具或库。
举个例子,假如有人要用Java实现一个单向链表类,可能会这样写:
  1. public final class JavaIntList {
  2. static class Node {
  3. public Node next;
  4. public int value;
  5. }
  6. public Node head;
  7. public int size;
  8. }

上述实现为了能够快速获取链表的大小,把链表大小缓存在size变量中。用法如下:

  1. JavaIntList myList = new JavaIntList();
  2. System.out.println(myList.size);
JavaIntList的作者很满意,于是开源了java-int-list库的1.0版。文件名是java-int-list_1.0.jar。发布后,吸引了许多用户来使用java-int-list_1.0.jar。
有一天,作者决定要节省内存,不要缓存size变量了,把代码改成这样:
  1. public final class JavaIntList {
  2. static final class Node {
  3. public Node next;
  4. public int value;
  5. }
  6. public Node head;
  7. public int getSize() {
  8. Node n = head;
  9. int i = 0;
  10. while (n != null) {
  11. n = n.next;
  12. i++;
  13. }
  14. return i;
  15. }
  16. }
然后发布了2.0版:java-int-list_2.0.jar。发布后,原有java-int-list_1.0.jar的用户纷纷升级版本到2.0。这些用户一升级,就发现自己的程序全部坏掉了,说是找不到什么size变量。于是这些用户就把作者暴打一顿,再也不敢用java-int-list库了。
这个故事告诉我们,如果不想被暴打致死,你就必须保持向后兼容性。太阳公司在设计Java语言时,也懂得这个道理。所以Java标准库中,绝对不会出现public int size这样的代码,而一定会一开始就写成:
  1. private int size;
  2. public int getSize() { return size; }

让用户一开始就使用getSize,以便有朝一日修改getSize实现时,不破坏向后兼容性。这种public int getSize() { return size; }的惯用手法,就是Java Bean。

JavaBean入门笔记的更多相关文章

  1. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  2. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  3. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  4. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  5. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  6. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

  7. OpenGLES入门笔记四

    原文参考地址:http://www.cnblogs.com/zilongshanren/archive/2011/08/08/2131019.html 一.编译Vertex Shaders和Fragm ...

  8. OpenGLES入门笔记三

    在入门笔记一中比较详细的介绍了顶点着色器和片面着色器. 在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Sha ...

  9. unity入门笔记

    我于2010年4月1日硕士毕业加入完美时空, 至今5年整.刚刚从一家公司的微端(就是端游技术+页游思想, 具体点就是c++开发, directX渲染, 资源采取所需才会下载)项目的前端主程职位离职, ...

随机推荐

  1. javascript设计模式——迭代器模式

    前面的话 迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示.迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也 ...

  2. html5的结构

    目录 一.新增的主体结构元素 1.1.article元素 1.2.section元素 1.3.nav元素 1.4.aside元素 1.5.time元素 1.6.pubdate元素 二.新增的非主体结构 ...

  3. 【Java入门提高篇】Day8 Java内部类——匿名内部类

    今天来看看另一个更加神奇的类--匿名内部类. 就像它的名字表示的那样,这个类是匿名的,用完之后,深藏功与名,就像扫地僧那样默默潜藏于深山之中.匿名内部类不仅没有名字,连class关键字都省掉了,而且匿 ...

  4. 本地创建Duplicate数据库

    本地创建Duplicate数据库,新创建的文件路径与目标数据库不同,并且辅助实例的初始化參数DB_NAME与目标数据库不能同样. 1.创建辅助实例的秘钥文件 [oracle@linux5 dbs]$ ...

  5. POJ-1250

    #include<iostream> #include<string> #include<list> #include<algorithm> using ...

  6. 机器学习——深度学习(Deep Learning)

    Deep Learning是机器学习中一个非常接近AI的领域,其动机在于建立.模拟人脑进行分析学习的神经网络,近期研究了机器学习中一些深度学习的相关知识,本文给出一些非常实用的资料和心得. Key W ...

  7. Matlab 2014b For Mac安装破解

    1.Matlab 2014b 的安装和破解文件下载: 安装文件:http://www.cncrk.com/downinfo/80718.html 破解文件:http://pan.baidu.com/s ...

  8. redis 报Operation against a key holding the wrong kind of value警告的解决方法

    WRONGTYPE Operation against a key holding the wrong kind of value github:https://github.com/antirez/ ...

  9. spring boot利用swagger和spring doc生成在线和离线文档

    参考博客地址: 在线文档:http://blog.didispace.com/springbootswagger2/ 离线文档:http://www.jianshu.com/p/af7a6f29bf4 ...

  10. 数据分析与展示——NumPy数据存取与函数

    NumPy库入门 NumPy数据存取和函数 数据的CSV文件存取 CSV文件 CSV(Comma-Separated Value,逗号分隔值)是一种常见的文件格式,用来存储批量数据. np.savet ...