六、 後台資料的實現
1. 資料結構的定義
這裡,我們主要有三個表。一個是組織圖表,一個是人員表person,一個組織人員關聯表orgPerson。組織圖表有OrgCode(組織代碼)、OrgName(組織名稱)、orgId(組織Id), parentOrgId(父Id)。人員表有personCode(人員代碼)、personName(人員名稱), sex(性別)、personId(人員Id)。orgPerson表有orgId, personId。
2. 資料庫的串連
WEB應用程式常用MySQL作後台資料庫,這是因為MySQL簡單、高效。這裡我們也用MySQL作為資料庫。Java中用jdbc串連資料庫。下面是串連資料庫的CODE:
public static Connection getConnectionFromPool() throws Exception {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/erpds");
return ds.getConnection();
}
/**
* 取資料庫連結化物件
* @return Connection 資料庫連結化物件
* @throws Exception
*/
/*
public static Connection getDirectConnection() throws Exception {
Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
String url = "jdbc:sybase:Tds:19.64.13.16:4100/wydb?charset=iso_1";
String user = "sa";
String password = "2860008";
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
*/
3. 商務邏輯層的實現
後台開發我們用Java類來實現。這裡我們開發了一個orgNew包,類名為orgManager。此類封裝了與資料庫操作有關的方法。通過main可偵錯工具的正確性。
這裡給出了新增加一個組織的全部代碼和通過XML取得樹結構資訊的代碼,樹結構通過遞迴實現。
package orgNew;// Java類所打的包
import tool.*;
import java.sql.*;
import java.util.*; // 引用Java類的
public class orgManager {
public orgManager() { }
public static void main(String[] args) throws Exception {
Connection conn = tool.ConnTool.getDirectConnection();// 引用資料訪問類
conn.setAutoCommit(false);
orgManager orgManager1 = new orgManager();
orgManager1.createOrg(0, conn); //測試建立組織是否正確
}
//建立一個組織
public static int createOrg(int parentOrgId, Connection conn) throws
Exception {
String sql = "insert into Org (OrgName, parentOrgId) values('新組織', ?)";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setInt(1, parentOrgId);
pstat.executeUpdate();
pstat.close();
Statement stat = conn.createStatement();
String sql2 = "select max(OrgId) from Org";
ResultSet rs = stat.executeQuery(sql2);
rs.next();
int OrgId = rs.getInt(1);
rs.close();
stat.close();
System.out.println(OrgId);
return OrgId;
}
}
//通過遞迴得到組織資訊的XML格式的資料
public static String getTree(Connection conn) throws
Exception {
StringBuffer ret = new StringBuffer();//定義可緩衝的字元流
ret.append("<?xml version='1.0' encoding='gb2312'?><tree id='0'>");//定義XML格式的頭資訊
ret.append(" <item child='1' text='組織' id='1' >");//插入結點體。注樹結點以item為標記
ret.append(getChildTree(1, conn));
ret.append("</item>");//結點體結束標記
ret.append("</tree>");//樹結束標記
return ret.toString();//返回字元流
}
public static String getChildTree(int OrgId, Connection conn) throws
Exception {
StringBuffer ret = new StringBuffer();
String sql = "select a.OrgId, a.OrgName, a.OrgCode,count(b.parentOrgId) from Org a " +
"left join Org b on a.OrgId = b.parentOrgId " +
"where a.parentOrgId = ? " +
"group by a.OrgId, a.OrgName";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setInt(1, OrgId);
ResultSet rs = pstat.executeQuery();
while (rs.next()) {
int childOrgId = rs.getInt(1);
String childOrgName = rs.getString(2);
String childOrgCode = rs.getString(3);
if (childOrgCode == null) {
childOrgCode = " ";
}
if (childOrgName == null) {
childOrgName = "新組織";
}
int childCount = rs.getInt(3);
if (childCount > 0) {
childCount = 1;
}
ret.append("<item child='" + childCount + "' text='" + childOrgName +
"' id='" +childOrgId + "' code='"+childOrgCode+"'>");
ret.append(getChildTree(childOrgId, conn));
ret.append("</item>");
}
rs.close();
pstat.close();
return ret.toString();
}
其它代碼見orgManager.java檔案。
七、 總結
本檔案通過一個執行個體全面介紹了Ajax開發的各個細節。通過與J2ee的結合來實現三層分布式開發的層次劃分,後台與前端的調用。資料的讀取、訪問及展現。
通過這個執行個體,我們可見,Ajax使WEB中的介面與應用分離。資料與呈現分離的分離,有利於分工合作、減少非技術人員對頁面的修改造成的WEB應用程式錯誤、提高效率、也更加適用於現在的發布系統。也可以把以前的一些伺服器負擔的工作轉嫁到用戶端,利於用戶端閑置的處理能力來處理。
Ajax是傳統WEB應用程式的一個轉變。以前是伺服器每次產生HTML頁面並返回給用戶端(瀏覽器)。Ajax理念的出現,揭開了無重新整理更新頁面時代的序幕,並有代替傳統web開發中採用form(表單)遞交方式更新web頁面的趨勢,可以算是一個裡程碑。
總之,Ajax適用於互動較多,頻繁讀資料,資料分類良好的WEB應用。
共7頁。 9 7
1
2
3
4
5
6
7