The important thing in life is to have a great aim , and the determination

          常用鏈接

          統(tǒng)計(jì)

          IT技術(shù)鏈接

          保險(xiǎn)相關(guān)

          友情鏈接

          基金知識(shí)

          生活相關(guān)

          最新評(píng)論

          利用AJAX+J2EE開發(fā)組織機(jī)構(gòu)管理系統(tǒng)(轉(zhuǎn)載)五

          五、 數(shù)據(jù)接口的實(shí)現(xiàn)(見Org.jpg文件)

            Org.JSP文件用來在服務(wù)器上運(yùn)行Java的類與前臺(tái)web頁(yè)之間架起一座橋。取到中間件的接口作用。

            這里分析部分代碼:

          <%@ page contentType="text/html; charset=GBK" %>
          <%@ page import="java.sql.*" %>
          <%@ page import="javax.naming.*" %>
          <%@ page import="javax.sql.*" %>
          <%@ page import="tool.*" %>
          <%@ page import="orgNew.*" %>
          <%@ page import="org.w3c.dom.*" %>
          //上面主要是引用一些java類
          <%
          try{
           //request.setCharacterEncoding("GBK");
           Document doc = XmlTool.createDocumentFromRequest(request);
           //建立web面文檔請(qǐng)求的文檔對(duì)象
           Connection conn = ConnTool.getConnectionFromPool();
           //獲取請(qǐng)求的方法名
           String mode=request.getParameter("mode");
           //out.println("ccc");
           //如果方法中沒有其它參數(shù)則讀取組織樹數(shù)據(jù)
           if(mode == null){
            /* int OrgId = Integer.parseInt(request.getParameter("id"));
            String str = orgManager.getChildOrg(OrgId, conn);
            out.println(str);
            */
           String str = orgManager.getTree(conn);
           //out.println(str);
           out.println(str);
          }else if(mode.equals("createOrg")){
           //如果是createOrg方法則建立一個(gè)組織
           int parentOrgId = Integer.parseInt(request.getParameter("parentOrgId"));
           //取出傳遞來的第一個(gè)參數(shù)parentOrgId
           int OrgId = orgManager.createOrg(parentOrgId, conn);
           //調(diào)用orgManager 類的createOrg方法來建立一個(gè)組織
           out.println(OrgId);
           //返回結(jié)果
          }
          conn.close();
          }
          catch(Exception e){
           e.printStackTrace();
          }
          %>

            六、 后臺(tái)數(shù)據(jù)的實(shí)現(xiàn)

            1. 數(shù)據(jù)結(jié)構(gòu)的定義

            這里,我們主要有三個(gè)表。一個(gè)是組織結(jié)構(gòu)表,一個(gè)是人員表person,一個(gè)組織人員關(guān)聯(lián)表orgPerson。組織結(jié)構(gòu)表有OrgCode(組織代碼)、OrgName(組織名稱)、orgId(組織Id), parentOrgId(父Id)。人員表有personCode(人員代碼)、personName(人員名稱), sex(性別)、personId(人員Id)。orgPerson表有orgId, personId。

            2. 數(shù)據(jù)庫(kù)的連接

            WEB應(yīng)用程序常用MySQL作后臺(tái)數(shù)據(jù)庫(kù),這是因?yàn)镸ySQL簡(jiǎn)單、高效。這里我們也用MySQL作為數(shù)據(jù)庫(kù)。Java中用jdbc連接數(shù)據(jù)庫(kù)。下面是連接數(shù)據(jù)庫(kù)的CODE:

          public static Connection getConnectionFromPool() throws Exception {
           Context ctx = new InitialContext();
           DataSource ds = (DataSource) ctx.lookup("java:/erpds");
           return ds.getConnection();
          }

          /**
          * 取數(shù)據(jù)庫(kù)鏈接對(duì)象
          * @return Connection 數(shù)據(jù)庫(kù)鏈接對(duì)象
          * @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. 業(yè)務(wù)邏輯層的實(shí)現(xiàn)

            后臺(tái)開發(fā)我們用Java類來實(shí)現(xiàn)。這里我們開發(fā)了一個(gè)orgNew包,類名為orgManager。此類封裝了與數(shù)據(jù)庫(kù)操作有關(guān)的方法。通過main可調(diào)試程序的正確性。

            這里給出了新增加一個(gè)組織的全部代碼和通過XML取得樹結(jié)構(gòu)信息的代碼,樹結(jié)構(gòu)通過遞歸實(shí)現(xiàn)。

          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();// 引用數(shù)據(jù)訪問類
            conn.setAutoCommit(false);

            orgManager orgManager1 = new orgManager();
            orgManager1.createOrg(0, conn); //測(cè)試建立組織是否正確
           }
           //建立一個(gè)組織
           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格式的數(shù)據(jù)
          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' >");//插入結(jié)點(diǎn)體。注樹結(jié)點(diǎn)以item為標(biāo)記
           ret.append(getChildTree(1, conn));
           ret.append("</item>");//結(jié)點(diǎn)體結(jié)束標(biāo)記
           ret.append("</tree>");//樹結(jié)束標(biāo)記
           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文件。

            七、 總結(jié)

            本文件通過一個(gè)實(shí)例全面介紹了Ajax開發(fā)的各個(gè)細(xì)節(jié)。通過與J2ee的結(jié)合來實(shí)現(xiàn)三層分布式開發(fā)的層次劃分,后臺(tái)與前端的調(diào)用。數(shù)據(jù)的讀取、訪問及展現(xiàn)。

            通過這個(gè)實(shí)例,我們可見,Ajax使WEB中的界面與應(yīng)用分離。數(shù)據(jù)與呈現(xiàn)分離的分離,有利于分工合作、減少非技術(shù)人員對(duì)頁(yè)面的修改造成的WEB應(yīng)用程序錯(cuò)誤、提高效率、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)。也可以把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利于客戶端閑置的處理能力來處理。

            Ajax是傳統(tǒng)WEB應(yīng)用程序的一個(gè)轉(zhuǎn)變。以前是服務(wù)器每次生成HTML頁(yè)面并返回給客戶端(瀏覽器)。Ajax理念的出現(xiàn),揭開了無刷新更新頁(yè)面時(shí)代的序幕,并有代替?zhèn)鹘y(tǒng)web開發(fā)中采用form(表單)遞交方式更新web頁(yè)面的趨勢(shì),可以算是一個(gè)里程碑。

          posted on 2006-12-05 21:38 鴻雁 閱讀(183) 評(píng)論(0)  編輯  收藏

          主站蜘蛛池模板: 论坛| 五常市| 时尚| 莱西市| 孙吴县| 凤翔县| 星子县| 文昌市| 廊坊市| 乳山市| 丹凤县| 房山区| 华池县| 平罗县| 佛学| 曲周县| 广饶县| 赣州市| 清苑县| 丽水市| 宁陕县| 西昌市| 苍山县| 凤山市| 钟祥市| 四子王旗| 黎城县| 梓潼县| 玉龙| 泸州市| 巴彦县| 莱芜市| 扎囊县| 天台县| 象州县| 西乌| 安义县| 济阳县| 石门县| 武定县| 临潭县|