在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 <br>"+realPath;
request.setAttribute("msg", message);
} catch (Exception e) {
message ="fasle,Excaption <br>"+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 page</title>
</head>
<body>
<%
String msg = (String)request.getAttribute("msg");
if(msg != null)
out.println(msg+"<br>");
%>
請輸入客戶信息:
<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>