在MVC设计模式中常用JavaBeans来封装业务逻辑、数据库操作等等,从而很好地实现业务逻辑和表示逻辑的分离,使系统具有更好的健壮性和灵活性 。
1、什么是javabean。
JavaBean是Java平台的组件技术。
JavaBean就是使用Java语言定义的类,而这种类的设计需要遵循Sun制定的JavaBean规范文档中描述的有关约定。与EJB完全不是一回事。
在Java模型中,通过JavaBean可以无限扩充Java程序的功能。
对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等也有很大的意义。
在JSP程序中常用JavaBean来封装业务逻辑、数据库操作等等,可以很好地实现业务逻辑和表示逻辑的分离,使得系统具有更好的健壮性和灵活性。
遵循下面3个规范的Java类作为JavaBean
类必须是public的;类必须具有无参数的public构造方法,
JavaBeans类的成员变量一般称为属性(property)。对每个属性访问权限一般定义为private或protected,而不是定义为public的。注意:属性名必须以小写字母开头。
对每个属性,一般定义两个public方法,它们分别称为访问方法(getter)和修改方法(setter),允许容器访问和修改bean的属性。
public String getColor();
public void setColor(String);
一个例外是当属性是boolean类型时,访问器方法应该定义为isXxx()形式。
例如,假设JavaBean有一个boolean型属性valid,则访问器方法应该定义为
public boolean isValid()。
除了访问方法和修改方法外,类中还可以定义其他的方法实现某种业务逻辑。也可以只为某个属性定义访问器方法,这样的属性就是只读属性。
JavaBean命名惯例:UserBean、AccountBean 。
以区别一般的类,这样可以给协作的开发人员清晰的含义。
JavaBean类存放在
/WEB-INF/classes目录中
/WEB-INF/lib目录中的JAR文件中。
在JSP中使用这些类,使用page指令的import属性导入它们。
<%@ page import="com.model.CustomerBean" %>
2、javabean的优点。
在JSP页面中使用JavaBeans的代码简洁。
JavaBeans也有助于增强代码的可重用性。
它们是Java语言对象,充分利用该语言的面向对象的特征。
3、javabean的序列化
序列化的过程是通过Java标准的对象序列化机制实现的。
首先,JavaBean类必须实现java.io.Serializable接口使类能够被序列化;
然后通过使用java.io.ObjectOutputStream类对bean实例序列化。
序列化的beans被作为资源使用应该具有下面的要求:
存储序列化bean的文件扩展名必须是.ser。例如,
如John.ser或Mary.ser。
存储bean的文件必须存放在Web应用程序的类路径中。因/WEB-INF/ classes目录总是在web应用程序的类路径中,可以将创建的所有的bean存放在/WEB-INF/classes目录或其子目录中,例如:
/WEB-INF/classes/John.ser
/WEB-INF/classes/customerData/Mary.ser
存储bean的路径和文件名的组合被作为bean的名称,这与类和包的概念类似。
上面例子中的两个序列化beans的名称分别为John和customerData.Mary。
这些对象一旦作为序列化的bean保存,它们就可以使用java.beans.Beans类的instantiate()方法将bean装载到任何程序中。
案列:1、model层
package com.model;
import java.io.Serializable;
public class CustomerBean implements Serializable{
private String custName;
private String email;
private String phone;
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
2、业务逻辑层(control)
package com.demo;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.omg.CORBA.Request;
import com.model.CustomerBean;
public class SaveBeanServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String message ="";
try {
CustomerBean customer = new CustomerBean();
customer.setCustName(request.getParameter("custName"));
customer.setEmail(request.getParameter("email"));
customer.setPhone(request.getParameter("phone"));
String name = request.getParameter("custName");
String relativepath = "/WEB-INF/classes/customerData/"+name+".ser";
String realPath = getServletContext().getRealPath(relativepath);
FileOutputStream fos = new FileOutputStream(realPath);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(customer);
oos.close();
message = "Successfully saved the bean as
"+realPath;
request.setAttribute("msg", message);
} catch (Exception e) {
message ="fasle,Excaption
"+e;
request.setAttribute("msg", message);
}
getServletContext().getRequestDispatcher("/customer.jsp").forward(request, response);
}
}
3、视图层(view)
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ page contentType="text/html; charset=gb2312" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'customer.jsp' starting pagetitle>
head>
<body>
<%
String msg = (String)request.getAttribute("msg");
if(msg != null)
out.println(msg+"
");
%>
请输入客户信息:
<form action="savebean.do" method="post">
客户名:<input type="text" name="custName"><br>
Email 地址:<input type="text" name="email"><br>
电话:<input type="text" name="phone"><br>
<input type="submit" value="提交"><br>
form>
body>
html>