JavaBean其实就是一个Java类,但是它必须遵守一定的编写规则。JavaBean从功能上来讲,我将它分为业务Bean和实体Bean两类,下面我通过一个实体Bean的开发示例,来讲述JavaBean开发中的一些基础技术。
实体Bean的主要作用是用来对系统中要用到的数据进行封装,这些数据包括用户从前台的输入和从数据库中读取的数据等等,是JavaBean中较简单的一类。
SimpleBean.java:
package com.myapp.beans;
public class SimpleBean {
private String name; private String password;
public SimpleBean() { System.out.println("*SimpleBean*"); }
public void setName(String name) { this.name = name; }
public void setPassword(String password) { this.password = password; }
public String getName() { return this.name; }
public String getPassword() { return this.password; }
} |
以上代码就是一个简单的JavaBean的示例,它严格遵守了JavaBean的编码规则,即:
⑴ JavaBean必须放在一个包中
⑵ JavaBean必须申明为public class
⑶ JavaBean的所有属性必须申明为private
⑷ 通过setter方法和getter方法设值和取值
⑸ 通过JSP调用时,则需一个无参的构造方法
⑹ 编写代码要严格遵守Java程序的命名规范
现在就可以在JSP页面里来调用这个JavaBean了。编写index.jsp页面如下:
<%@page contentType="text/html;charset=gb2312" import="com.myapp.beans.SimpleBean"%> <HTML> <HEAD> <TITLE>简单JavaBean</TITLE> </HEAD> <BODY> <% SimpleBean sb = new SimpleBean() ; sb.setName("聂鑫") ; sb.setPassword("123456") ; %> <h1>姓名:<%=sb.getName()%></h1> <h1>密码:<%=sb.getPassword()%></h1> </BODY> </HTML> |
通过page指令的import语句,就可以导入在classes文件夹里的所有的类,这里我导入了刚刚写好的JavaBean。然后就可以在JSP页面中使用它了,这里和我们通常使用Java的类的方式是一样的。
这种使用方式在实际开发中是不会使用到的,因为JavaBean对象的生成应该由容器来完成,而不是由程序员来手工完成,下面我们使用JSP标签来使用JavaBean,我们将index.jsp修改如下:
<%@page contentType="text/html;charset=gb2312"%> <jsp:useBean id="sb" scope="page" class="com.myapp.beans.SimpleBean"/> <HTML> <HEAD> <TITLE>简单JavaBean</TITLE> </HEAD> <BODY> <% sb.setName("聂鑫") ; sb.setPassword("123456") ; %> <h1>姓名:<%=sb.getName()%></h1> <h1>密码:<%=sb.getPassword()%></h1> </BODY> </HTML> |
<jsp:useBean>标签用来创建JavaBean对象,它通常使用到的属性有三个:id表示对象名;scope表示对象的作用范围;class表示该对象所属的包和类。
对于以上的代码,我们认为还是不满意,因为给JavaBean赋值和取值的这个过程,仍然是由程序员来完成的,这样还是会导致大量的Java代码与HTML代码混编在一起,于是我们应该掌握JavaBean在JSP中使用的最佳方式。
一种调用方式: <jsp:useBean id="对象" scope="作用范围" class="包.类"/>
四种设值方式: <jsp:setProperty name="对象" property="*"/> <jsp:setProperty name="对象" property="属性"/> <jsp:setProperty name="对象" property="属性" param="参数名"/> <jsp:setProperty name="对象" property="属性" value="值"/>
一种取值方式: <jsp:getProperty name="对象" property="属性"/> |
以上列出了JavaBean在JSP中的常用方式,最常用的就是四种设值方式中的第一种,它可以将表单中传来的值,全部自动填充到JavaBean里,例如:
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>简单JavaBean</TITLE> </HEAD> <BODY> <FORM METHOD=POST ACTION="show.jsp"> 帐号:<INPUT TYPE="text" NAME="name"><BR> 密码:<INPUT TYPE="password" NAME="password"><INPUT TYPE="submit" VALUE="确定"> </FORM> </BODY> </HTML> |
show.jsp:
<%@page contentType="text/html;charset=gb2312"%> <jsp:useBean id="sb" scope="page" class="com.myapp.beans.SimpleBean"/> <HTML> <HEAD> <TITLE>简单JavaBean</TITLE> </HEAD> <BODY> <%request.setCharacterEncoding("gb2312");%> <jsp:setProperty name="sb" property="*"/> <h1>姓名:<jsp:getProperty name="sb" property="name"/></h1> <h1>密码:<jsp:getProperty name="sb" property="password"/></h1> </BODY> </HTML> |
要实现值的自动填充,必须使表单元素名与JavaBean中的属性名保持一致,并且类型也要保持一致。
使用JavaBean的登录范例
LogBean.java:
package com.myapp.beans;
import java.util.*;
public class LogBean {
private String name; private String password; private Hashtable errors; //保存错误信息
public LogBean() { name = ""; password = ""; errors = new Hashtable(); }
public boolean validate(){ boolean ok=true; if(name.equals("")||name==null) { errors.put("name","请输入帐号"); name=" "; ok=false; } if(password.equals("")||password==null||password.length()<6) { errors.put("password","密码长度必须大于6位"); password=" "; ok=false; } return ok; }
public void setName(String name) { this.name = name; }
public void setPassword(String password) { this.password = password; }
public String getName() { return this.name; }
public String getPassword() { return this.password; }
public String getErrorMsg(String message){ String errorMsg=(String)errors.get(message.trim()); return((errorMsg==null) ? " ":errorMsg); }
} |
这个JavaBean里增加了表单数据校检功能。
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <jsp:useBean id="loginfo" class="com.myapp.beans.LogBean" scope="request"/> <HTML> <HEAD> <TITLE>简单JavaBean</TITLE> </HEAD> <BODY> <FORM METHOD=POST ACTION="login.jsp"> 帐号:<INPUT TYPE="text" NAME="name"> <%=loginfo.getErrorMsg("name") %><BR> 密码:<INPUT TYPE="password" NAME="password"> <%=loginfo.getErrorMsg("password") %><BR> <INPUT TYPE="submit" VALUE="确定"> </FORM> </BODY> </HTML> |
注意到这个登录页可以用来显示错误信息。
login.jsp:
<%@page contentType="text/html;charset=gb2312"%> <jsp:useBean id="loginfo" class="com.myapp.beans.LogBean" scope="request"/> <HTML> <HEAD> <TITLE>简单JavaBean</TITLE> </HEAD> <BODY> <%request.setCharacterEncoding("gb2312");%> <jsp:setProperty name="loginfo" property="*"/> <% if(loginfo.validate()) { %> <jsp:forward page="show.jsp"/> <% } else{ %> <jsp:forward page="index.jsp"/> <% } %> </BODY> </HTML> |
show.jsp:
<%@page contentType="text/html;charset=gb2312"%> <jsp:useBean id="loginfo" class="com.myapp.beans.LogBean" scope="request"/> <HTML> <HEAD> <TITLE>简单JavaBean</TITLE> </HEAD> <BODY> 表单数据符合要求! <h1>姓名:<jsp:getProperty name="loginfo" property="name"/></h1> <h1>密码:<jsp:getProperty name="loginfo" property="password"/></h1> </BODY> </HTML> |
这三个页面共用了一个在request范围内有效的JavaBean对象,index.jsp利用它来显示错误信息,show.jsp利用它来显示表单数据。