淺談利用JSP系統(tǒng)開(kāi)發(fā)構(gòu)建三層管理信息系統(tǒng)
1、 利用JSP系統(tǒng)開(kāi)發(fā)構(gòu)建三層管理信息系統(tǒng)的引言
管理信息系統(tǒng)(MIS)是一個(gè)由人、計(jì)算機(jī)等組成的能進(jìn)行信息的收集、傳遞、存儲(chǔ)、加工和使用的系統(tǒng)。隨著科技的發(fā)展,信息的膨脹,企業(yè)信息化成了企業(yè)在競(jìng)爭(zhēng)中處于不敗地位的有效手段之一。而MIS不僅能夠及時(shí)全面地提供信息和數(shù)據(jù),簡(jiǎn)化統(tǒng)計(jì)工作,對(duì)不同的管理層次提出不同的報(bào)告之外,還能根據(jù)過(guò)去的數(shù)據(jù)預(yù)測(cè)未來(lái)的情況。因此,采用何種方法開(kāi)發(fā)出一種兼顧開(kāi)發(fā)效率和運(yùn)行效率,同時(shí)滿足分布式事件處理功能的管理信息系統(tǒng)就顯得尤為重要。本文闡述了一種利用JSP系統(tǒng)開(kāi)發(fā)構(gòu)建三層式管理信息系統(tǒng)的方法。
2、 系統(tǒng)的三層體系結(jié)構(gòu)
系統(tǒng)的三層體系結(jié)構(gòu)如圖1。
圖1基于JAVA技術(shù)的WEB應(yīng)用體系結(jié)構(gòu)
整個(gè)管理信息系統(tǒng)采用Browser/WEB/DataBASE的三層體系結(jié)構(gòu)。WEB服務(wù)器接受請(qǐng)求,通過(guò)應(yīng)用程序服務(wù)器執(zhí)行一個(gè)Java服務(wù)器端小程序Servlet并返回其輸出,從而實(shí)現(xiàn)與客戶機(jī)進(jìn)行信息資源的交互。數(shù)據(jù)庫(kù)服務(wù)器用來(lái)存儲(chǔ)管理信息系統(tǒng)中所用到的各種數(shù)據(jù),數(shù)據(jù)由數(shù)據(jù)庫(kù)管理程序直接錄入。系統(tǒng)的客戶端只需要一個(gè)瀏覽器即可。相關(guān)人員通過(guò)瀏覽器來(lái)查詢、增加、修改、刪除數(shù)據(jù),對(duì)信息進(jìn)行管理。
3、 JSP系統(tǒng)開(kāi)發(fā)的設(shè)計(jì)模式
設(shè)計(jì)模式是面向?qū)ο蟮某绦蛟O(shè)計(jì)人員用來(lái)解決編程問(wèn)題的一種形式化表示。目前,在大多數(shù)Browser/Server結(jié)構(gòu)的WEB應(yīng)用中,瀏覽器直接通過(guò)HTML或者JSP的形式與用戶交互,響應(yīng)用戶的請(qǐng)求。雖然很直觀,但是大多數(shù)管理信息系統(tǒng)操作的數(shù)據(jù)量都是驚人的,隨著代碼的增多會(huì)使JSP頁(yè)面臃腫不堪,WEB服務(wù)器的負(fù)荷過(guò)重。因此,在中間層上采用基于模型視圖控制器(MVC.Model-View-Controller)的設(shè)計(jì)模式。Model層用來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯,View層用來(lái)顯示用戶界面,Controller層主要負(fù)責(zé)View層和Model層之間的控制關(guān)系。具體實(shí)現(xiàn)時(shí),把Servlet用作應(yīng)用程序的控制器,把JSP文檔作為視圖,JavaBeans被用來(lái)表示模型。
所有的請(qǐng)求都被發(fā)送給作為控制器的Servlet,它接受請(qǐng)求,并根據(jù)請(qǐng)求信息將它們分發(fā)給適當(dāng)?shù)腏SP來(lái)響應(yīng)。同時(shí),Servlet還根據(jù)JSP的需求生成JavaBeans的實(shí)例并輸出給JSP環(huán)境。JSP可以通過(guò)直接調(diào)用方法或使用UseBean的自定義標(biāo)簽得到JAVABeans中的數(shù)據(jù)。這種設(shè)計(jì)模式很好地實(shí)現(xiàn)了數(shù)據(jù)層與表示層的分離,使開(kāi)發(fā)工作更加容易和迅速。在這種設(shè)計(jì)模式下,各層次之間的數(shù)據(jù)傳遞如圖2。
圖2 MVC設(shè)計(jì)模式的數(shù)據(jù)傳遞圖
4、 數(shù)據(jù)存取技術(shù)
數(shù)據(jù)庫(kù)是管理信息系統(tǒng)的核心內(nèi)容。目前,WEB與數(shù)據(jù)庫(kù)接口技術(shù)有很多,其中JDBC是Java程序連接和存取數(shù)據(jù)庫(kù)的應(yīng)用程序接口,由一組用Java語(yǔ)言編寫(xiě)的類與接口組成,是執(zhí)行SQL語(yǔ)句的Java API。本文介紹的管理信息系統(tǒng)中,在數(shù)據(jù)的存取方面,采用了 JSP/Servlet+JDBC的技術(shù),即客戶端不產(chǎn)生數(shù)據(jù)庫(kù)查詢命令,客戶端上的瀏覽器通過(guò)URL和中間層的Web服務(wù)器建立連接。WEB服務(wù)器主要負(fù)責(zé)接收本地或遠(yuǎn)程瀏覽器的HTTP數(shù)據(jù)請(qǐng)求,然后中間層的Servlet收到請(qǐng)求后,通過(guò)執(zhí)行程序中的SQL語(yǔ)句,利用JDBC提供的標(biāo)準(zhǔn)API對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)和相應(yīng)的操作處理。Servlet再將查詢的數(shù)據(jù)傳給JSP,***生成標(biāo)準(zhǔn)的JSP頁(yè)面將結(jié)果返回給提出請(qǐng)求的瀏覽器。這樣,不僅將客戶端與數(shù)據(jù)庫(kù)服務(wù)器端分開(kāi),同時(shí)提高了數(shù)據(jù)庫(kù)的訪問(wèn)效率。
5、JSP系統(tǒng)開(kāi)發(fā)實(shí)例
為了更好地說(shuō)明用
JSP/Servlet構(gòu)建三層式管理信息系統(tǒng)的方法,作者將舉例分析設(shè)計(jì)一個(gè)商品郵購(gòu)管理信息系統(tǒng)。這個(gè)商品郵購(gòu)管理信息系統(tǒng)利用JAVA語(yǔ)言進(jìn)行服務(wù)器端應(yīng)用程序的開(kāi)發(fā),使用IBM公司的WEBshpere作為應(yīng)用服務(wù)器,數(shù)據(jù)庫(kù)管理系統(tǒng)選用SQL Server7.0,數(shù)據(jù)庫(kù)接口程序使用JDBC2接口。整個(gè)系統(tǒng)使用基于WEB的方式來(lái)實(shí)現(xiàn)郵購(gòu)業(yè)務(wù)的客戶管理、職員管理、訂單管理、商品管理、出庫(kù)管理、入庫(kù)管理等業(yè)務(wù)處理、流程控制、權(quán)限控制、查詢統(tǒng)計(jì)以及打印等功能。其中詳細(xì)分析訂單管理部分的查詢功能。
5.1數(shù)據(jù)庫(kù)設(shè)計(jì)
對(duì)于訂單部分,需要定義訂單信息表Db_order,表中的字段有訂單編號(hào)(ddbh),客戶編號(hào)(khbh),商品編號(hào)(sPBh),商品單價(jià)(spdj),定購(gòu)數(shù)量(dgsl),合計(jì)總價(jià)(hjzj),收到金額(sdje),收到日期(sdrq)。為了能夠在應(yīng)用中使用Db_order表,必須建立數(shù)據(jù)庫(kù)連接。這個(gè)功能由SQL_data.JAVA來(lái)實(shí)現(xiàn)。其部分代碼如下。
- public class SQL_data {
- String url = "jdbc:odbc:PostOrder"; // use your hostname and port number here
- String login = "sa"; // use your login here
- String password ="zh12345"; // use your password here
- public Connection connection = null;
- public Statement st = null;
- public ResultSet rs = null;
- try
- {
- Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
- conn =DriverManager.getConnection(url, user, password);
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- }
5.2中間層設(shè)計(jì)
在商品郵購(gòu)管理信息系統(tǒng)的開(kāi)發(fā)過(guò)程中,基于MVC設(shè)計(jì)模式的思想,結(jié)合系統(tǒng)的實(shí)際情況,我們將Model層按照分工進(jìn)行了進(jìn)一步劃分。Model層一般來(lái)說(shuō)由許多JAVABeans組成,根據(jù)這些Beans在系統(tǒng)中起的不同的作用,將它們分為Command Beans、Data Beans、View Beans三種類型。其中Command Beans用來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯即對(duì)對(duì)象實(shí)例的處理;Data Beans是用來(lái)描述和定義從現(xiàn)實(shí)世界中抽象出來(lái)的對(duì)象模型;而 View Beans則是用來(lái)將處理完的對(duì)象實(shí)例進(jìn)一步封裝并返回到客戶端。
首先,Command Beans獲得Servlet傳遞過(guò)來(lái)的信息,并將這些業(yè)務(wù)信息封裝在Data Beans定義的對(duì)象實(shí)例中,根據(jù)業(yè)務(wù)邏輯對(duì)信息進(jìn)行處理。當(dāng)需要進(jìn)行調(diào)用數(shù)據(jù)庫(kù)的存取操作時(shí),Command Beans將對(duì)象實(shí)例以及相應(yīng)的控制信息通過(guò)數(shù)據(jù)庫(kù)接口方法完成對(duì)數(shù)據(jù)庫(kù)的操作。數(shù)據(jù)庫(kù)操作完成后,再將返回的記錄集封裝成Data Beans的對(duì)象實(shí)例,進(jìn)行一定的處理后,將這些需要返回到界面的信息再封裝到事先定義的View Beans中去,通過(guò)View Beans將信息返回到界面上。
以下是對(duì)訂單進(jìn)行查詢處理的OrderGl.JAVA的部分代碼。
- public class OrderGl {
- ……
- //定義如下的方法完成對(duì)訂單的查詢操作
- public final String currentMultiQuery(
- JAVAx.servlet.http.HttpServletRequest request,
- JAVAx.servlet.http.HttpServletResponse response)
- throws com.goods.exception.GoodsException
- {
- //從JSP頁(yè)面獲得相應(yīng)查詢信息
- com.goods.view.OrderView view = getView(request, response);
- String ddbh = view.getDdbh(); //訂單編號(hào)
- //生成SQL語(yǔ)句
- String SQLQuery = "select ddbh,khbh,sPBh,spdj,dgsl,hjzj,sdje,sdrq from db_order ";
- //執(zhí)行查詢操作
- java.util.Vector vector = new JAVA.util.Vector();
- com.goods.sjk.sql_data per = new com.goods.sjk.SQL_data();
- try
- {
- JAVA.sql.ResultSet rs = per.executeQuery(SQLQuery);
- while (rs.next())
- {
- com.goods.dx.Db_order temp = new com.goods.dx.Db_order();
- temp.setDdbh(rs.getString("ddbh"));
- temp.setKhbh(rs.getString("khbh"));
- temp.setSpbh(rs.getString("sPBh"));
- temp.setSpdj(rs.getString
- ("spdj"));
- temp.setDgsl(rs.getString("dgsl"));
- temp.setHjzj(rs.getString("hjzj"));
- temp.setSdje(rs.getString("sdje"));
- temp.setSdrq(rs.getString("sdrq"));
- vector.addElement(temp);
- }
- rs.close();
- per.close();
- } catch (Throwable e)
- {
- e.printStackTrace();
- per.close();
- cxyw.printErrorToWEB(request, response, e.toString());
- return e.toString();
- }
- //將相關(guān)信息回顯給界面
- view.setVCt(vector);
- request.setAttribute("view", view);
- return "1";
- }
- }
5.3客戶端設(shè)計(jì)
視圖是向用戶顯示信息的應(yīng)用程序的一部分,也就是用戶發(fā)出請(qǐng)求之后返回給用戶的WEB頁(yè)面。當(dāng)單擊"查詢"按鈕時(shí),將顯示根據(jù)訂單編號(hào)得到的訂單信息結(jié)果頁(yè)面ordercx.jsp。這是用JSP頁(yè)面中如下語(yǔ)法完成的:
- <JSP:useBean id="view" class="com.goods.view.OrderView" scope="request" />
- <JSP:useBean id="temp" class="com.goods.dx.Db_order" scope="page" />
< JSP:useBean >動(dòng)作用id和scope發(fā)現(xiàn)存在的各個(gè)對(duì)象,再通過(guò)<%=view.getDdbh()
和<%=temp.getDdbh()%>來(lái)獲取相關(guān)數(shù)據(jù)。
6、 利用JSP系統(tǒng)開(kāi)發(fā)構(gòu)建三層管理信息系統(tǒng)小結(jié)
本文提出了一個(gè)開(kāi)發(fā)基于WEB的利用JSP/Servlet技術(shù)的三層管理信息系統(tǒng)的解決方案。該方案實(shí)現(xiàn)了表示層和邏輯層的分離,使得系統(tǒng)具有很好的擴(kuò)展性,同時(shí),給管理信息系統(tǒng)的開(kāi)發(fā)提供了一個(gè)完整的思路和方法。
【編輯推薦】