看了JavaBean感觉很困惑,不知道什么意思,直到查看了资料发现自己理解错误,把JavaBean误当成一种技术,其实Java Bean只是符合一定规范的Java类,便于封装重用。符合这种规范的Java类可以被其他程序员或框架使用。这些规范包括:
1、所有的属性都必须为private 2、提供默认构造方法 3、提供getter和setter 4、实现Serializable接口
我们下面就来看一个JavaBean的例子。
一般网页登陆都需要用户名和密码,我们可以把用户名和密码存放在JavaBean中。
代码如下:
package mytrain.formbean; public class userBean { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
有了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"/>
完整的代码:
标签访问法:
Html代码 <%@ page language="java" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>表单Bean例子2</title> <link rel="StyleSheet" href="../../CSS/style.css" type="text/css" /> </head> <body> <form action="" method="post"> <table> <tr> <td> <span class="blue10">用户名:</span> </td> <td> <input type="text" name="mUserName" size="20"><br> </td> </tr> <tr> <td> <span class="blue10">密 码:</span> </td> <td> <input type="password" name="mPassword" size="20"><br> </td> </tr> <tr> <td> </td> <td> <input type=submit value="submit"/> </td> </tr> </table> </form> <jsp:useBean id="user" class="mytrain.formbean.userBean"/> <jsp:setProperty name="user" property="name" param="mUserName"/> <jsp:setProperty name="user" property="password" param="mPassword"/> <hr/> 用户名:<jsp:getProperty name="user" property="name"/> <br> 密 码:<jsp:getProperty name="user" property="password"/> </body> </html>
直接访问法:
<%@ page language="java" pageEncoding="GBK"%> <%@ page import="mytrain.formbean.userBean" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>表单Bean例子3</title> <link rel="StyleSheet" href="../../CSS/style.css" type="text/css" /> </head> <body> <form action="" method="post"> <table> <tr> <td> <span class="blue10">用户名:</span> </td> <td> <input type="text" name="mUserName" size="20"><br> </td> </tr> <tr> <td> <span class="blue10">密 码:</span> </td> <td> <input type="password" name="mPassword" size="20"><br> </td> </tr> <tr> <td> </td> <td> <input type=submit value="submit"/> </td> </tr> </table> </form> <% userBean user = new userBean(); user.setName(request.getParameter("mUserName")); user.setPassword(request.getParameter("mPassword")); %> <hr/> 用户名:<%=user.getName()%> <br> 密 码:<%=user.getPassword()%> </body> </html>
举个例子,假如有人要用Java实现一个单向链表类,可能会这样写:
public final class JavaIntList { static class Node { public Node next; public int value; } public Node head; public int size; }
上述实现为了能够快速获取链表的大小,把链表大小缓存在size变量中。用法如下:
JavaIntList myList = new JavaIntList(); System.out.println(myList.size);
有一天,作者决定要节省内存,不要缓存size变量了,把代码改成这样:
public final class JavaIntList { static final class Node { public Node next; public int value; } public Node head; public int getSize() { Node n = head; int i = 0; while (n != null) { n = n.next; i++; } return i; } }
这个故事告诉我们,如果不想被暴打致死,你就必须保持向后兼容性。太阳公司在设计Java语言时,也懂得这个道理。所以Java标准库中,绝对不会出现public int size这样的代码,而一定会一开始就写成:
private int size; public int getSize() { return size; }
让用户一开始就使用getSize,以便有朝一日修改getSize实现时,不破坏向后兼容性。这种public int getSize() { return size; }的惯用手法,就是Java Bean。