Jsp+JavaBean的組合已經(jīng)成為開發(fā)小型B/S應(yīng)用的最佳選擇,使用JavaBean可以把業(yè)務(wù)處理功能從jsp頁面分離,從而減少jsp頁面中間的java代碼量,使jsp頁面更專注處理數(shù)據(jù)的顯示,從而使頁面的邏輯變得十分清晰。套用一句廣告語:“自從采用jsp+JavaBean的組合,編寫jsp的程序不頭疼啦,維護(hù)jsp也變的簡單可行了。”

為什么要在jsp中使用JavaBean?

Jsp本質(zhì)就是把java代碼嵌套在靜態(tài)的HTML頁面中,從而使靜態(tài)的HTML頁面有了動(dòng)態(tài)的功能,從原理說,僅僅用jsp就可以實(shí)現(xiàn)所有動(dòng)態(tài)功能,既然這樣采用JavaBean的原因何在?

先看代碼

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <title>JSP示例程序</title>
  </head>  
  <body>
    <%
    	Date firstDate=new Date();
    	Date secondDate=new Date(107,6,23);
    %>
    <font size="1"><strong>本頁面戰(zhàn)士的功能式比較兩個(gè)日時(shí)間的前后:</strong><br>
    第一個(gè)時(shí)間為:<%out.print(firstDate); %><br>
    第二個(gè)時(shí)間為:<%out.print(secondDate); %><br>
    <%
    	if(firstDate.before(secondDate))
    		out.println("第一個(gè)時(shí)間早于第二個(gè)時(shí)間");
    	else if(firstDate.after(secondDate))
    		out.println("第二個(gè)時(shí)間早于第一個(gè)時(shí)間");
    	else
    		out.println("兩個(gè)時(shí)間相等");
    %>
    </font>
  </body>
</html>


上面的這個(gè)程序的功能非常簡單,這只是為了說明問題舉得一個(gè)簡單例子,實(shí)際開發(fā)中的邏輯和數(shù)據(jù)顯示要比這個(gè)例子復(fù)雜的多。然而盡管這么簡單的一個(gè)程序,但是還存在一些問題。還是上面文章提到的

可定制性差:如果需要比較的時(shí)間變化就不得不再次編寫頁面代碼。

可維護(hù)性差:如果頁面美工人員不懂Java代碼那么頁面的維護(hù)將變得異常困難。

復(fù)用性差:如果其他頁面也需要用到比較時(shí)間的功能就不得不從頭再次寫一遍及其相似的代碼。

對(duì)于上面的這個(gè)程序來說,上述的幾個(gè)問題都是無法解決的,這正是jsp開發(fā)在初期的致命傷,把所有的業(yè)務(wù)邏輯都放在jsp頁面處理從而導(dǎo)致頁面邏輯混亂不堪,不僅代碼不可重用,美工而已無法對(duì)頁面進(jìn)行視覺方面的美化,就連開發(fā)人員自己都有可能看不懂自己寫的代碼,這樣的無難題導(dǎo)致初期的jsp開發(fā)成為一件勞神費(fèi)力地苦差事。

然而JavaBean的出現(xiàn)解決掉了這樣的令人頭疼的問題,利用JavaBean可以把頁面上復(fù)雜的業(yè)務(wù)邏輯處理抽象成一個(gè)JavaBean利用JavaBean封裝負(fù)責(zé)的業(yè)務(wù)邏輯,在jsp頁面上只需要簡單調(diào)用這個(gè)實(shí)現(xiàn)業(yè)務(wù)邏輯這個(gè)實(shí)現(xiàn)業(yè)務(wù)的JavaBean即可,這樣就實(shí)現(xiàn)了業(yè)務(wù)處理和數(shù)據(jù)暫時(shí)的分離,而且封裝起來的JavaBean也成了可以重復(fù)利用的組件,不僅在其他別的頁面可以重復(fù)利用,而且其他的開發(fā)人員也可以不用考慮其具體的實(shí)現(xiàn),像調(diào)用一般java類一樣調(diào)用別人已經(jīng)寫好的JavaBean,與此同時(shí),剝離了業(yè)務(wù)邏輯的jsp頁面邏輯更加清晰,即便是美工人員對(duì)java一竅不通也絲毫不影響對(duì)頁面的沒貨工作,而開發(fā)人員面對(duì)這樣清晰的頁面邏輯輕松的讀懂當(dāng)然是不費(fèi)吹灰之力了。

Jsp+JavaBean實(shí)現(xiàn)上面代碼的功能

頁面代碼部分:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSP示例程序</title>
</head>
<body>
	<jsp:useBean id="date" class="beans.Compare" scope="page"></jsp:useBean>
	<%
		date.setFirstDate(new Date());
		date.setSecondDate(new Date(107, 6, 23));
	%>
	<font size="1"><strong>本頁面展示的功能式比較兩個(gè)日時(shí)間的前后</strong><br>
		第一個(gè)時(shí)間為:<jsp:getProperty property="firstDate" name="date" /><br>
		第二個(gè)時(shí)間為:<jsp:getProperty property="secondDate" name="date" /><br>
		<%
			out.println(date.compare());
		%> </font>
</body>
</html>


JavaBean代碼部分:

package beans;
import java.util.Date;
public class Compare {
	//設(shè)置兩個(gè)日期屬性
	private Date firstDate;
	private Date secondDate;
	//判斷兩個(gè)時(shí)間的前后
	public String compare(){
		if(firstDate.before(secondDate))
    		return "第一個(gè)時(shí)間早于第二個(gè)時(shí)間";
    	else if(firstDate.after(secondDate))
    		return "第二個(gè)時(shí)間早于第一個(gè)時(shí)間";
    	else
    		return "兩個(gè)時(shí)間相等";
	}
	//取得第一個(gè)時(shí)間
	public Date getFirstDate(){
		return firstDate;
	}
	//設(shè)置第一個(gè)時(shí)間
	public void setFirstDate(Date firstDate){
		this.firstDate =firstDate;
	}
	//取得第二個(gè)時(shí)間
		public Date getSecondDate(){
			return secondDate;
		}
		//設(shè)置第二個(gè)時(shí)間
		public void setSecondDate(Date secondDate){
			this.secondDate =secondDate;
		}
}


這個(gè)頁面的運(yùn)行效果和上面的第一個(gè)代碼是一致的,但是很明顯這個(gè)JSP頁面上的Java代碼少了很多。雖然把邏輯代碼封裝成JavaBean增加了編碼的工作量,但是其帶來的便捷和高效式顯而易見的。

使用JavaBean其樂無窮~~

作者:beijiguangyong 發(fā)表于2012-2-29 23:34:58 原文鏈接
閱讀:1947 評(píng)論:11 查看評(píng)論