<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    pingpang

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      21 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

    2012年7月30日 #

    這幾天自己琢磨起來javascript,以前都是看看沒有實(shí)戰(zhàn)過,現(xiàn)在覺得實(shí)戰(zhàn)起來果然錯(cuò)誤多多,以后要不斷總結(jié)錯(cuò)誤,關(guān)鍵可以減少調(diào)試時(shí)間,菜鳥啊:

    1.js通常有一個(gè)地方錯(cuò)誤了, 下邊的函數(shù)都不會(huì)再繼續(xù)執(zhí)行啦(本來覺得很正常的事,但是...)

    2.為什么open()請(qǐng)求服務(wù)器的時(shí)候,請(qǐng)求的servlet后邊要加一個(gè)參數(shù)變化,告知服務(wù)器這是一個(gè)新的請(qǐng)求???否則在IE8中請(qǐng)求失敗

    var bojingNum = 0;
    //定義一個(gè)變量用來存儲(chǔ)xmlHttpRequest對(duì)象
      var xmlHttp=null;
      //該函數(shù)用于創(chuàng)建一個(gè)xmlHttpRequest對(duì)象
      function createXMLHttpRequest()
      {
        if (window.ActiveXObject)//ActiveXObject這個(gè)對(duì)象是IE瀏覽器提供的控件,所以有的網(wǎng)銀只支持這樣的控件的IE瀏覽器
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //IE瀏覽器生成的對(duì)象
            
        } else if (window.XMLHttpRequest)//除了IE外的其他瀏覽器
        {
            xmlHttp = new XMLHttpRequest();
        }
      }
      //這是一個(gè)通過ajax刷新統(tǒng)計(jì)圖的方法
      function  autoFlush()
      {
          //創(chuàng)建日期變量時(shí)間變量
          var tempTime = new Date();
          var tempParameter = tempTime.getTime();
          //創(chuàng)建一個(gè)xmlHttpRequest對(duì)象
          createXMLHttpRequest();
          if(xmlHttp!=null)
          {
          //這里放置一個(gè)時(shí)間參數(shù)是為了讓服務(wù)器知道這是一個(gè)新的請(qǐng)求
          xmlHttp.open("GET", "SerialDataSvt?tmd="+tempParameter);
           //將狀態(tài)觸發(fā)器綁定到一個(gè)函數(shù)
          xmlHttp.onreadystatechange=processor;
          
          //請(qǐng)求發(fā)送
          xmlHttp.send(null);
          }
         
          
      }
      //處理從服務(wù)器返回的xml文檔
      function processor()
      {
          //定義一個(gè)變量用于存儲(chǔ)從服務(wù)器返回的結(jié)果
          var  result;
          if(xmlHttp.readyState==4)//如果響應(yīng)完成
              {
                 if(xmlHttp.status==200)//如果返回成功
                     {
                    
                       //取出服務(wù)器返回的xml文檔的所有counter標(biāo)簽的子節(jié)點(diǎn)
                     result = xmlHttp.responseXML.getElementsByTagName("data");//alert(result);
                
                    //解析xml中的數(shù)據(jù)并更新統(tǒng)計(jì)圖狀態(tài)
                    
                     for(var i = 0 ; i < result.length; i++)
                         {
                              //用于統(tǒng)計(jì)數(shù)據(jù)更新統(tǒng)計(jì)圖片狀態(tài)
                         var id =result[i].getAttribute("id");//alert(id);
                         var dir =result[i].getAttribute("dir"); //alert(dir);
                        
                        var  datas =xmlHttp.responseXML.getElementsByTagName("dataContent")[0].childNodes[0].nodeValue;
                        var  addTime =xmlHttp.responseXML.getElementsByTagName("addTime")[0].childNodes[0].nodeValue;
                        
                        
                            if(datas.substring(17,18)=="1")
                                { 
                                 document.getElementById("yujing"+(i+1)).innerHTML="<embed   src='video/wartgroud.mp3'  type=audio/x-ms-wma autostart='true' loop='true'>報(bào)警中</embed> ";
                                 document.getElementById("yujingPic"+(i+1)).style.display = 'block';
                                bojingNum++;
                                document.getElementById("yujingNum"+(i+1)).innerHTML="預(yù)警次數(shù):"+bojingNum;
                                }
                            else
                                {
                                document.getElementById("yujing"+(i+1)).innerHTML="暫無報(bào)警";
                                 document.getElementById("yujingPic"+(i+1)).style.display = 'none';
                                }
                         document.getElementById("n_nodeID"+i).innerHTML= id+dir;
                         document.getElementById("n_nodeData"+i).innerHTML= datas; 
                         document.getElementById("n_nodeTime"+i).innerHTML= addTime; 
                         
                         document.getElementById("s_nodeID"+i).innerHTML= id+dir;
                         document.getElementById("s_nodeData"+i).innerHTML= datas; 
                         document.getElementById("s_nodeTime"+i).innerHTML= addTime; 
                         
                         document.getElementById("e_nodeID"+i).innerHTML= id+dir;
                         document.getElementById("e_nodeData"+i).innerHTML= datas; 
                         document.getElementById("e_nodeTime"+i).innerHTML= addTime; 
                         
                         document.getElementById("w_nodeID"+i).innerHTML= id+dir;
                         document.getElementById("w_nodeData"+i).innerHTML= datas; 
                         document.getElementById("w_nodeTime"+i).innerHTML= addTime; 
              
                         }
                     }
              }  
      }
      //每隔一秒就執(zhí)行一次autoFlush方法
     setInterval(autoFlush, 2000);

    posted @ 2012-08-16 22:41 往事隨風(fēng) 閱讀(2089) | 評(píng)論 (1)編輯 收藏

    昨天看到C#群里有人問一個(gè)投票功能如何實(shí)現(xiàn)...

    我對(duì)此很感興趣,為了練習(xí)一下,就有了以下代碼。

    投票功能使用jQuery實(shí)現(xiàn)..純html代碼...數(shù)據(jù)通過json字符串傳遞,通過 eval轉(zhuǎn)換為json對(duì)象

    投票功能分為:

    1.設(shè)置投票內(nèi)容:



    2.投票:



    3.投票結(jié)果:


    文件列表:



    傳值:

    {
        info: 
    "   由京東針對(duì)國(guó)美蘇寧發(fā)起的新一輪電商大戰(zhàn)隨著當(dāng)當(dāng)、易訊等企業(yè)的“亂入”,正演變?yōu)檎麄€(gè)國(guó)內(nèi)電商行業(yè)的混戰(zhàn)。電商“8.15”價(jià)格戰(zhàn)誰會(huì)是最后的贏家?今年的電商排位戰(zhàn),誰能笑到最后?<br/><br/>1.今年是電商排位戰(zhàn),你最看好誰?<br/>--------------------isea533----------------------",
        choices: [{
            name: 
    "choice0",
            value: 
    "京東商城",
            num: 
    6,
            percent: 
    0.25
        },
        {
            name: 
    "choice1",
            value: 
    "蘇寧易購(gòu)",
            num: 
    5,
            percent: 
    0.20833333333333334
        },
        {
            name: 
    "choice2",
            value: 
    "國(guó)美商城",
            num: 
    4,
            percent: 
    0.16666666666666666
        },
        {
            name: 
    "choice3",
            value: 
    "當(dāng)當(dāng)網(wǎng)",
            num: 
    2,
            percent: 
    0.08333333333333333
        },
        {
            name: 
    "choice4",
            value: 
    "亞馬遜中國(guó)",
            num: 
    3,
            percent: 
    0.125
        },
        {
            name: 
    "choice5",
            value: 
    "天貓(原淘寶商城)",
            num: 
    4,
            percent: 
    0.16666666666666666
        }]
    }


    posted @ 2012-08-16 22:39 往事隨風(fēng) 閱讀(2550) | 評(píng)論 (0)編輯 收藏

    jQuery對(duì)象初始化的傳參方式包括:
    1.$(DOMElement)
    2.$('<h1>...</h1>'), $('#id'), $('.class') 傳入字符串, 這是最常見的形式, 這種傳參數(shù)經(jīng)常也傳入第二個(gè)參數(shù)context指定上下文,其中context參數(shù)可以為$(...), DOMElement
    3.$(function() {}); <===> $(document).ready(function() { });
    4.$({selector : '.class', context : context}) <===> $('.class', context)

    jQuery.fn = jQuery.prototype = {
        constructor: jQuery,
        init: function( selector, context, rootjQuery ) {
            var match, elem, ret, doc;

            // 處理$(""), $(null), $(undefined), $(false)這幾種參數(shù),直接返回this
            if ( !selector ) {
                return this;
            }

            // 當(dāng)傳參selector為DOM結(jié)點(diǎn)時(shí),將context置為selector
            if ( selector.nodeType ) {
                this.context = this[0] = selector;
                this.length = 1;
                return this;
            }

            // Handle HTML strings
            // 當(dāng)傳入的selector參數(shù)為字符串時(shí),
            if ( typeof selector === "string" ) {
                if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
                    // Assume that strings that start and end with <> are HTML and skip the regex check
                    match = [ null, selector, null ];

                } else {
                    match = rquickExpr.exec( selector );
                }

                // Match html or make sure no context is specified for #id
                if ( match && (match[1] || !context) ) {

                    // HANDLE: $(html) -> $(array)
                    if ( match[1] ) {
                        context = context instanceof jQuery ? context[0] : context;
                        doc = ( context && context.nodeType ? context.ownerDocument || context : document );

                        // scripts is true for back-compat
                        selector = jQuery.parseHTML( match[1], doc, true );
                        if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
                            this.attr.call( selector, context, true );
                        }

                        return jQuery.merge( this, selector );

                    // HANDLE: $(#id)
                    } else {
                        elem = document.getElementById( match[2] );

                        // Check parentNode to catch when Blackberry 4.6 returns
                        // nodes that are no longer in the document #6963
                        if ( elem && elem.parentNode ) {
                            // Handle the case where IE and Opera return items
                            // by name instead of ID
                            if ( elem.id !== match[2] ) {
                                return rootjQuery.find( selector );
                            }

                            // Otherwise, we inject the element directly into the jQuery object
                            this.length = 1;
                            this[0] = elem;
                        }

                        this.context = document;
                        this.selector = selector;
                        return this;
                    }

                // HANDLE: $(expr, $(...))
                } else if ( !context || context.jquery ) {
                    return ( context || rootjQuery ).find( selector );

                // HANDLE: $(expr, context)
                // (which is just equivalent to: $(context).find(expr)
                } else {
                    return this.constructor( context ).find( selector );
                }

            // HANDLE: $(function)
            // Shortcut for document ready
            // 當(dāng)selector為function時(shí)相當(dāng)于$(document).ready(selector);
            } else if ( jQuery.isFunction( selector ) ) {
                return rootjQuery.ready( selector );
            }

            // 當(dāng)selector參數(shù)為{selector:'#id', context:document}之類時(shí),重置屬性selector和context
            if ( selector.selector !== undefined ) {
                this.selector = selector.selector;
                this.context = selector.context;
            }

            return jQuery.makeArray( selector, this );
        }
    }; 
    posted @ 2012-08-16 22:39 往事隨風(fēng) 閱讀(1803) | 評(píng)論 (0)編輯 收藏

    最近項(xiàng)目任務(wù)繁重,更新博客會(huì)較慢,不過有時(shí)間希望可以把自己的積累分享出來。

       JavaScript正則實(shí)戰(zhàn)(會(huì)根據(jù)最近寫的不斷更新)

    1、javascript 正則對(duì)象替換創(chuàng)建 和用法: /pattern/flags  先簡(jiǎn)單案例學(xué)習(xí)認(rèn)識(shí)下replace能干什么

        正則表達(dá)式構(gòu)造函數(shù): new RegExp("pattern"[,"flags"]); 

        正則表達(dá)式替換變量函數(shù):stringObj.replace(RegExp,replace Text);

    參數(shù)說明: 
    pattern -- 一個(gè)正則表達(dá)式文本 
    flags -- 如果存在,將是以下值: 
    g: 全局匹配 
    i: 忽略大小寫 
    gi: 以上組合 

    //下面的例子用來獲取url的兩個(gè)參數(shù),并返回urlRewrite之前的真實(shí)Url
    var
     reg=new RegExp("(http://www.qidian.com/BookReader/)(\\d+),(\\d+).aspx","gmi");
    var url="http://www.qidian.com/BookReader/1017141,20361055.aspx";

    //方式一,最簡(jiǎn)單常用的方式
    var rep=url.replace(reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");
    alert(rep);

    //方式二 ,采用固定參數(shù)的回調(diào)函數(shù)
    var rep2=url.replace(reg,function(m,p1,p2,p3){return p1+"ShowBook.aspx?bookId="+p3+"&chapterId="+p3});
    alert(rep2);

    //方式三,采用非固定參數(shù)的回調(diào)函數(shù)
    var rep3=url.replace(reg,function(){var args=arguments; return args[1]+"ShowBook.aspx?bookId="+args[2]+"&chapterId="+args[3];});
    alert(rep3);

    //方法四
    //方式四和方法三很類似, 除了返回替換后的字符串外,還可以單獨(dú)獲取參數(shù)
    var bookId;
    var chapterId;
    function capText()
    {
        var args=arguments; 
        bookId=args[2];
        chapterId=args[3];
        return args[1]+"ShowBook.aspx?bookId="+args[2]+"&chapterId="+args[3];
    }

    var rep4=url.replace(reg,capText);
    alert(rep4);
    alert(bookId);
    alert(chapterId);

    //使用test方法獲取分組
    var reg3=new RegExp("(http://www.qidian.com/BookReader/)(\\d+),(\\d+).aspx","gmi");
    reg3.test("http://www.qidian.com/BookReader/1017141,20361055.aspx");
    //獲取三個(gè)分組
    alert(RegExp.$1); 
    alert(RegExp.$2);
    alert(RegExp.$3);

    2、 學(xué)習(xí)最常用的 test exec match search  replace  split 6個(gè)方法

    1) test  檢查指定的字符串是否存在
    var data = “123123″;
    var reCat = /123/gi;
    alert(reCat.test(data));  //true
    //檢查字符是否存在  g 繼續(xù)往下走  i 不區(qū)分大小寫

    2) exec 返回查詢值
    var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
    var reCat = /cat/i;
    alert(reCat.exec(data));  //Cat

    3)match  得到查詢數(shù)組
    var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
    var reCat = /cat/gi;
    var arrMactches = data.match(reCat)
    for (var i=0;i < arrMactches.length ; i++)
    {
    alert(arrMactches[i]);   //Cat  cat
    }

    4) search  返回搜索位置  類似于indexof
    var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
    var reCat = /cat/gi;
    alert(data.search(reCat));  //23

    5) replace  替換字符  利用正則替換
    var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
    var reCat = /cat/gi;
    alert(data.replace(reCat,”libinqq”));

    6)split   利用正則分割數(shù)組
    var data = “123123,213,12312,312,3,Cat,cat,dsfsdfs,”;
    var reCat = /\,/;
    var arrdata = data.split(reCat);
    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]);
    }

    3、常用表達(dá)式收集:

    "^\\d+$"  //非負(fù)整數(shù)(正整數(shù) + 0)
    "^[0-9]*[1-9][0-9]*$"  //正整數(shù)
    "^((-\\d+)|(0+))$"  //非正整數(shù)(負(fù)整數(shù) + 0)
    "^-[0-9]*[1-9][0-9]*$"  //負(fù)整數(shù)
    "^-?\\d+$"    //整數(shù)
    "^\\d+(\\.\\d+)?$"  //非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)
    "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"
    //正浮點(diǎn)數(shù)
    "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
    "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"
    //負(fù)浮點(diǎn)數(shù)
    "^(-?\\d+)(\\.\\d+)?$"  //浮點(diǎn)數(shù)
    "^[A-Za-z]+$"  //由26個(gè)英文字母組成的字符串
    "^[A-Z]+$"  //由26個(gè)英文字母的大寫組成的字符串
    "^[a-z]+$"  //由26個(gè)英文字母的小寫組成的字符串
    "^[A-Za-z0-9]+$"  //由數(shù)字和26個(gè)英文字母組成的字符串
    "^\\w+$"  //由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串
    "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
    "^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url
    "^[A-Za-z0-9_]*$"。

    ============================================正則表達(dá)式基礎(chǔ)知識(shí)==============================================

    ^ 匹配一個(gè)輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a" 
    $ 匹配一個(gè)輸入或一行的結(jié)尾,/a$/匹配"An a",而不匹配"an A" 
    * 匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa 
    + 匹配前面元字符1次或多次,/ba+/將匹配ba,baa,baaa 
    ? 匹配前面元字符0次或1次,/ba?/將匹配b,ba 
    (x) 匹配x保存x在名為$1...$9的變量中 
    x|y 匹配x或y 
    {n} 精確匹配n次 
    {n,} 匹配n次以上 
    {n,m} 匹配n-m次 
    [xyz] 字符集(character set),匹配這個(gè)集合中的任一一個(gè)字符(或元字符) 
    [^xyz] 不匹配這個(gè)集合中的任何一個(gè)字符 
    [\b] 匹配一個(gè)退格符 
    \b 匹配一個(gè)單詞的邊界 
    \B 匹配一個(gè)單詞的非邊界 
    \cX 這兒,X是一個(gè)控制符,/\cM/匹配Ctrl-M 
    \d 匹配一個(gè)字?jǐn)?shù)字符,/\d/ = /[0-9]/ 
    \D 匹配一個(gè)非字?jǐn)?shù)字符,/\D/ = /[^0-9]/ 
    \n 匹配一個(gè)換行符 
    \r 匹配一個(gè)回車符 
    \s 匹配一個(gè)空白字符,包括\n,\r,\f,\t,\v等 
    \S 匹配一個(gè)非空白字符,等于/[^\n\f\r\t\v]/ 
    \t 匹配一個(gè)制表符 
    \v 匹配一個(gè)重直制表符 
    \w 匹配一個(gè)可以組成單詞的字符(alphanumeric,這是我的意譯,含數(shù)字),包括下劃線,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9] 
    \W 匹配一個(gè)不可以組成單詞的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。 

    posted @ 2012-08-12 23:07 往事隨風(fēng) 閱讀(55043) | 評(píng)論 (0)編輯 收藏

    在瀏覽網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)看到分頁(yè)顯示的頁(yè)面。如果想把大量的數(shù)據(jù)提供給瀏覽者,分頁(yè)顯示是個(gè)非常實(shí)用的方法。分頁(yè)顯示數(shù)據(jù)能夠幫助瀏覽者更好地查看信息,能夠有條理的顯示信息。
    在傳統(tǒng)的web技術(shù)中,分頁(yè)顯示的相關(guān)操作都是在服務(wù)器端進(jìn)行的,服務(wù)器端獲取客戶端的請(qǐng)求分頁(yè),并根據(jù)請(qǐng)求頁(yè)數(shù)獲取指定的結(jié)果集。最后把結(jié)果集中的數(shù)據(jù)返回到客戶端,這時(shí)返回結(jié)果中不但包含了數(shù)據(jù),還可能包含了數(shù)據(jù)的顯示樣式。客戶端的每一次數(shù)據(jù)更新,都會(huì)重新打開一個(gè)網(wǎng)頁(yè),如果網(wǎng)頁(yè)中包含了很多html元素,就會(huì)造成網(wǎng)頁(yè)打開速度較慢的情況。
    為了顯示部分?jǐn)?shù)據(jù),而需要加載整個(gè)頁(yè)面的數(shù)據(jù),顯得有點(diǎn)得不償失。使用Ajax技術(shù)可以很好的彌補(bǔ)這些問題,服務(wù)器端只傳輸數(shù)據(jù)庫(kù)表中的數(shù)據(jù),客戶端獲取這些數(shù)據(jù)只更新局部?jī)?nèi)容,與數(shù)據(jù)無關(guān)的其他元素保持不變。
    現(xiàn)在創(chuàng)建一個(gè)實(shí)例,以演示使用Ajax技術(shù)實(shí)現(xiàn)數(shù)據(jù)的分頁(yè)顯示。該實(shí)例的代碼實(shí)現(xiàn)分為服務(wù)器端和客戶端。

    1,準(zhǔn)備工作


    我們這里使用Mysql數(shù)據(jù)庫(kù),我在shop數(shù)據(jù)庫(kù)中創(chuàng)建了一張mobileshop表,這張表有兩個(gè)字段name,model。
    打開記事本,輸入下列代碼:

    <%@ page language="java" import="java.util.*,java.sql.*,java.io.*" pageEncoding="GBK"%>
    <%
     class DBManager{
         
    String userName="root";
        
    String password="123456";
        Connection conn
    =null;
        Statement stmt
    =null;
        
    String url="jdbc:mysql://localhost:3306/shop";
        ResultSet rst;
    public DBManager(String sql){

        try {
            Class.forName(
    "com.mysql.jdbc.Driver");
            conn
    =DriverManager.getConnection(url,userName,password);
            stmt
    =conn.createStatement();
            rst
    =stmt.executeQuery(sql);
        } catch (Exception e) {
            
    // TODO Auto-generated catch block
            e.printStackTrace();
        }    
    }
    public ResultSet getResultSet(){
    return rst;
    }
    }

    %>

    將上述代碼保存為Conn.jsp,用于返回查詢結(jié)果集。

    2,服務(wù)器端代碼


         在本實(shí)例中,服務(wù)器端代碼具有獲取客戶端請(qǐng)求頁(yè)數(shù)和產(chǎn)生指定記錄集的功能。打開記事本,輸入下列代碼:


    <%@ page contentType="text/html; charset=utf-8" import="java.sql.*" errorPage="" %>
    <%@ include file="Conn.jsp" %>
    <%@ page import="java.util.*" %>
    <%@ page import="java.io.*" %>
    <%
     try
     {
    ResultSet rs
    =new DBManager("select name,model from mobileshop").getResultSet();
    int intPageSize;      //一頁(yè)顯示的記錄數(shù)
    int intRowCount;      //記錄的總數(shù)
    int intPageCount;     //總頁(yè)數(shù)
    int intPage;         //待顯示的頁(yè)碼
    String strPage;
    int i;
    intPageSize
    =2;       //設(shè)置一頁(yè)顯示的記錄數(shù)
    strPage
    =request.getParameter("page");         //取得待顯示的頁(yè)碼
    if(strPage==null)             //判斷strPage是否等于null,如果是,則顯示第一頁(yè)數(shù)據(jù)
    {
    intPage
    =1;
    }
    else{
    intPage
    =java.lang.Integer.parseInt(strPage);   //將字符串轉(zhuǎn)化為整形
    }
    if(intPage<1)
    {
    intPage
    =1;
    }
    //獲取記錄總數(shù)
    rs.last();
    intRowCount
    =rs.getRow();
    //計(jì)算總頁(yè)數(shù)
    intPageCount
    =(intRowCount+intPageSize-1)/intPageSize;
    //調(diào)整顯示的頁(yè)碼
    if(intPage>intPageCount) intPage=intPageCount;
    if(intPageCount>0)
    {
    //將記錄指針定位到待顯示頁(yè)的第一條記錄上
    rs.absolute((intPage
    -1)*intPageSize+1);
    }
    //下面用于顯示數(shù)據(jù)
    i
    =0;
      StringBuffer content
    =new StringBuffer(""); 
      response.setContentType(
    "text/xml"); 
      response.setHeader(
    "Cache-Control","no-cache");
      content.append(
    "<?xml version=\"1.0\"   encoding=\"UTF-8\" ?>");
      content.append(
    "<contents>");
    while(i<intPageSize && !rs.isAfterLast())
    {
         
         
    String name=rs.getString("name");
         
    String email=rs.getString("model");
         content.append(
    "<content>");
         content.append(
    "<name>"+ name +"</name>");
         content.append(
    "<model>"+email+"</model>");
         content.append(
    "</content>");
     rs.next();
     i
    ++;
     }
     content.append(
    "</contents>");
     System.out.print(content);
     out.print(content);
     }
     catch(Exception e)
     {
     e.printStackTrace();
     }
     
    %>

    posted @ 2012-08-12 23:05 往事隨風(fēng) 閱讀(1979) | 評(píng)論 (2)編輯 收藏

    網(wǎng)頁(yè)自動(dòng)刷新功能在web網(wǎng)站上已經(jīng)屢見不鮮了,如即時(shí)新聞信息,股票信息等,都需要不斷獲取最新信息。在傳統(tǒng)的web實(shí)現(xiàn)方式中,想要實(shí)現(xiàn)類似的效果,必須進(jìn)行整個(gè)頁(yè)面的刷新,在網(wǎng)絡(luò)速度受到一定限制的情況下,這種因?yàn)橐粋€(gè)局部變動(dòng)而牽動(dòng)整個(gè)頁(yè)面的處理方式顯得有些得不償失。Ajax技術(shù)的出現(xiàn)很好的解決了這個(gè)問題,利用Ajax技術(shù)可以實(shí)現(xiàn)網(wǎng)頁(yè)的局部刷新,只更新指定的數(shù)據(jù),并不更新其他的數(shù)據(jù)。
       現(xiàn)在創(chuàng)建一個(gè)實(shí)例,以演示網(wǎng)頁(yè)的自動(dòng)刷新功能,該實(shí)例模擬火車侯票大廳的顯示字幕。

    1,服務(wù)器端代碼


    該實(shí)例服務(wù)器端代碼的功能比較簡(jiǎn)單,即產(chǎn)生一個(gè)隨機(jī)數(shù),并以XML文件形式返回給客戶端。打開記事本,輸入下列代碼:

    <%@ page contentType="text/html; charset=gb2312" %>
    <%
    response.setContentType(
    "text/xml; charset=UTF-8");//設(shè)置輸出信息的格式及字符集
    response.setHeader(
    "Cache-Control","no-cache");
    out.println(
    "<response>"); 
    for(int i=0;i<2;i++){
        out.println(
    "<name>"+(int)(Math.random()*10)+"</name>");
        out.println(
    "<count>" +(int)(Math.random()*100)+ "</count>");
    }
    out.println(
    "</response>");
    out.close();
    %> 

     


    保存上述代碼,名稱為auto.jsp。在該文件中,使用java.lang包中的Math類,產(chǎn)生一個(gè)隨機(jī)數(shù)。

    2,客戶端代碼


    本實(shí)例客戶端代碼主要利用服務(wù)器端返回的數(shù)字,指定顯示樣式。打開記事本,輸入下列代碼

    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    <head>
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    </head>
    <script language="javascript">


    var XMLHttpReq;
      
    //創(chuàng)建XMLHttpRequest對(duì)象       
        function createXMLHttpRequest() {
      
    if(window.XMLHttpRequest) { //Mozilla 瀏覽器
       XMLHttpReq = new XMLHttpRequest();
      }
      
    else if (window.ActiveXObject) { // IE瀏覽器
       try {
        XMLHttpReq 
    = new ActiveXObject("Msxml2.XMLHTTP");
       } 
    catch (e) {
        
    try {
         XMLHttpReq 
    = new ActiveXObject("Microsoft.XMLHTTP");
        } 
    catch (e) {}
       }
      }
     }
     
    //發(fā)送請(qǐng)求函數(shù)
     function sendRequest() {
      createXMLHttpRequest();
            
    var url = "auto.jsp";
      XMLHttpReq.open(
    "GET", url, true);
      XMLHttpReq.onreadystatechange 
    = processResponse;//指定響應(yīng)函數(shù)
      XMLHttpReq.send(null);  // 發(fā)送請(qǐng)求
     }
     
    // 處理返回信息函數(shù)
        function processResponse() {
         
    if (XMLHttpReq.readyState == 4) { // 判斷對(duì)象狀態(tài)
             if (XMLHttpReq.status == 200) { // 信息已經(jīng)成功返回,開始處理信息
        DisplayHot();
        setTimeout(
    "sendRequest()"1000);
                } 
    else { //頁(yè)面不正常
                    window.alert("您所請(qǐng)求的頁(yè)面有異常。");
                }
            }
        }
        
    function DisplayHot() {
         
    var name = XMLHttpReq.responseXML.getElementsByTagName("name")[0].firstChild.nodeValue;
         
    var count = XMLHttpReq.responseXML.getElementsByTagName("count")[0].firstChild.nodeValue;

               document.getElementById(
    "cheh").innerHTML = "T-"+name+"次列車"
        document.getElementById(
    "price").innerHTML = count+""
     }


    </script> 
    <body onload =sendRequest()>
    <table style="BORDER-COLLAPSE: collapse" borderColor=#5555555 cellSpacing=0 cellPadding=0 width=200     border=0>

    <TR>
       <TD align=middle bgColor=#abc2d0 height=19 colspan="2"><B>開往北京的列車</B> </TD>
    </TR>
    <tr>
       <td height="20"> 車號(hào):</td>
       <td height="20" id="cheh"> </td>
    </tr>
    <tr>
       <td height="20"> 價(jià)格:</td>
       <td height="20" id="price"> </td>
    </tr>
    </table> 
    </body> 
     

    將上述代碼保存,名稱為autoRefresh.jsp。在該文件中,createXMLHttpRequest()函數(shù)用于創(chuàng)建異步調(diào)用對(duì)象;sendRequest()函數(shù)用于發(fā)送請(qǐng)求到客戶端;processResponse()函數(shù)用于處理服務(wù)器端的響應(yīng),在處理過程中調(diào)用DisplayHot()函數(shù)設(shè)定數(shù)據(jù)的顯示樣式。其中,setTimeout(“sendRequest()”,1000)函數(shù)的含義為每隔1秒的時(shí)間調(diào)用sendRequest()函數(shù),該函數(shù)在Ajax頁(yè)面刷新中起了一個(gè)主導(dǎo)作用。DisplayHot()函數(shù)主要用于從服務(wù)器端返回的XML文件進(jìn)行解析,并獲取返回?cái)?shù)據(jù),顯示在當(dāng)前頁(yè)面。

    posted @ 2012-08-12 23:03 往事隨風(fēng) 閱讀(2101) | 評(píng)論 (0)編輯 收藏

    機(jī)房收費(fèi)系統(tǒng)完成了已經(jīng)有很長(zhǎng)一段時(shí)間了,本以為就此結(jié)束了。可是,前幾天突然要求對(duì)其進(jìn)行驗(yàn)收了。

    開始的時(shí)候,感覺驗(yàn)收就驗(yàn)收沒什么。可是,有小道消息稱,做的不好的有可能重構(gòu)。如果是因?yàn)楫?dāng)初的設(shè)計(jì)思路或者是邏輯錯(cuò)誤而重構(gòu),那無話可說,必須要重構(gòu)。但是如果是因?yàn)橐恍┳⑨尅ML圖、命名規(guī)范等而重構(gòu),都會(huì)讓大家笑話。

    于是,在前面人驗(yàn)收的時(shí)候,后面的人都在討論驗(yàn)收人員的側(cè)重點(diǎn)。然后大家在修改自己的收費(fèi)系統(tǒng)。

    通過這次驗(yàn)收,雖然我沒有被要求重構(gòu),但是,在驗(yàn)收過程中還是出現(xiàn)了很多的問題,驗(yàn)收人員也給提出了很多的寶貴意見。

    首先就是出現(xiàn)的問題。

    命名不規(guī)范。尤其是參數(shù)的命名,當(dāng)初以為參數(shù)只是使用在某一個(gè)方法或者函數(shù)中,不會(huì)和其他的類、函數(shù)產(chǎn)生關(guān)系,不用太在意它的命名。可是,這種代碼只適合與自己看,其他人看你的代碼就會(huì)感覺不舒服,同時(shí)給人一種外行的感覺。

    注釋不全。雖說對(duì)于類、方法和函數(shù)都做了注釋,但是,不是很完整。例如,所有的remarks都是空著的。通過驗(yàn)收人員的講解,理解了它的作用,記錄版本號(hào),編寫時(shí)間以及修改時(shí)間。還有就是,對(duì)于注釋的代碼,不要?jiǎng)h除,而應(yīng)該保留并完整寫明修改人,以及修改的時(shí)間。雖說是個(gè)人版的,但對(duì)于注釋,都是被刪除了。

    文檔不全。當(dāng)時(shí)做收費(fèi)系統(tǒng)的時(shí)候,只寫了需求、概要、數(shù)據(jù)庫(kù)設(shè)計(jì)以及詳細(xì)設(shè)計(jì)文檔。其他的則沒有寫。當(dāng)初就是由于惰性的原因吧,感覺寫文檔太枯燥了,就急于編寫代碼了,當(dāng)系統(tǒng)實(shí)現(xiàn)之后,就以為系統(tǒng)實(shí)現(xiàn)了就行了,至于其他文檔就算了吧。

    對(duì)UML圖理解不深。當(dāng)初在畫UML圖的時(shí)候,對(duì)用例圖理解的不是太深,以至于我的用例圖中的用例都是窗體。在驗(yàn)收過程中,自己都不禁問自己,當(dāng)初是怎么想的呢?怎么會(huì)出現(xiàn)那種用例圖呢?

    再說一些個(gè)別人出現(xiàn)的問題吧(也算是給自己提個(gè)醒)

    文檔、數(shù)據(jù)庫(kù)沒了。在做完機(jī)房收費(fèi)系統(tǒng)到現(xiàn)在有很長(zhǎng)的時(shí)間了,有的同學(xué)重裝了系統(tǒng)。有的沒有提前把數(shù)據(jù)庫(kù)中的數(shù)據(jù)備份,導(dǎo)致現(xiàn)在沒有了原先的數(shù)據(jù)。而文檔,有的是在第一遍的基礎(chǔ)上修改的,原先的也沒有備份。導(dǎo)致現(xiàn)在的文檔是合作版的時(shí)候,自己第三次修改的文檔,前兩次的文檔都沒了。

    UML圖不知道哪一個(gè)是最新版本。有的同學(xué)UML圖畫了好幾遍,但是在文件保存的時(shí)候,沒有注意到命名,沒有表明版本號(hào)。以至于尋找的時(shí)候花費(fèi)了很長(zhǎng)時(shí)間,有的甚至就找不到了。

    應(yīng)該說,通過這次驗(yàn)收,讓我們認(rèn)識(shí)到了當(dāng)初所做的系統(tǒng)存在著很大的不足。這次要求我們都要補(bǔ)全文檔、注釋,規(guī)范命名等等,讓我們長(zhǎng)了一個(gè)記性。對(duì)我們來說沒有壞處。同時(shí)通過這次驗(yàn)收,也讓我們認(rèn)識(shí)到,文件備份、管理、保存的重要性。在以后大家都會(huì)記住這次的驗(yàn)收來提醒自己。

    posted @ 2012-07-30 23:23 往事隨風(fēng) 閱讀(929) | 評(píng)論 (0)編輯 收藏

    為了檢查八期分層重要階段學(xué)習(xí)成果,老師,七期全體成員參與驗(yàn)收工作。

    在提高班,四年的學(xué)習(xí)中,分了幾個(gè)重要的模塊。其中在重要的關(guān)鍵的方向性的學(xué)習(xí)上是需要把控的,是需要及時(shí)檢驗(yàn)以及驗(yàn)收的。

    在驗(yàn)收八期學(xué)習(xí)的過程中,不僅發(fā)現(xiàn)他們的問題,同時(shí)也發(fā)現(xiàn)自己的問題。

    驗(yàn)收工作,不僅是驗(yàn)收他們,同時(shí)也是驗(yàn)收自己對(duì)此知識(shí)點(diǎn)掌握的情況。

     

    首先說一下驗(yàn)收過程中,八期普遍存在的問題。

    1.   對(duì)文檔的認(rèn)識(shí)不夠,導(dǎo)致文檔與程序不對(duì)應(yīng)。

    包圖與程序集的對(duì)應(yīng),這個(gè)沒意識(shí)到。命名是其中一方面,還有就是其中包圖中的每條線的作用,意義,以及在代碼中體現(xiàn)。

    2.   UML認(rèn)識(shí)不夠,需要進(jìn)步學(xué)習(xí)。

       UML中的共九種圖,常用的像用例圖,類圖,對(duì)象圖,時(shí)序圖,包圖,活動(dòng)圖,狀態(tài)圖這幾種,每種圖的符號(hào)以及畫法掌握不夠。并且對(duì)每種圖的概念以及適合什么場(chǎng)景有所欠缺。并且圖中的關(guān)系需要進(jìn)步掌握。比如用例之間的包含關(guān)系、擴(kuò)展關(guān)系等,還有UML中的五種關(guān)系以及在代碼中的體現(xiàn)。

    3.   對(duì)分層的認(rèn)識(shí)不夠,導(dǎo)致假隔離真耦合。

       不僅僅把程序分成了UI,BLL,DAL,但是最主要的是各個(gè)層之間的隔離。比如因?yàn)镈AL生成的路徑的原因,導(dǎo)致了明明UI與DAL隔離,卻因?yàn)槁窂絾栴}而再次耦合,結(jié)果確是一種假隔離真耦合。還有就是BLL,DAL引入UI中的某個(gè)包,導(dǎo)致了后面與前面分層再次耦合。

    4.   規(guī)范問題。命名規(guī)范,注釋規(guī)范。

    5.   對(duì)文檔中的內(nèi)容理解不到位,導(dǎo)致人云亦云。

      常寫的幾種需求說明書,概要說明書,詳細(xì)說明書。對(duì)其中的內(nèi)容不了解,不知道文檔中應(yīng)該寫什么。也不知道那些圖應(yīng)該放在那個(gè)文檔中。導(dǎo)致了結(jié)果,每個(gè)文檔中都有重復(fù)的東西。

    6.   項(xiàng)目驅(qū)動(dòng)未做到。

      大家著急開發(fā),忽略文檔。在開發(fā)過程中,文檔一直沒有起到任何作用,所以對(duì)文檔沒有深度認(rèn)識(shí)。

    八期出現(xiàn)的問題,確實(shí)可以理解。當(dāng)時(shí)的七期,也翻過如此的錯(cuò)誤。這畢竟是八期第一次的個(gè)人版。做到這種程度,已經(jīng)是相當(dāng)好了。當(dāng)初的七期,幾乎每人重構(gòu)了三四遍。對(duì)這個(gè)分層,文檔才有了今天的理解以及重視。

    然后說一下驗(yàn)收過程中,自己的收獲問題。

    1.   發(fā)言溝通交流。通過這次發(fā)言機(jī)會(huì),鍛煉與他人溝通,交流。

    2.   在驗(yàn)收他們的過程中,進(jìn)一步考驗(yàn)自己的對(duì)過去知識(shí)點(diǎn)的理解。

    提問他們,促進(jìn)他們的思考,同時(shí)與自己所學(xué)的知識(shí)進(jìn)行比對(duì),補(bǔ)充自己的欠缺。

      其中有個(gè)學(xué)生的包圖,自己也理解錯(cuò)了,對(duì)工廠模式,抽象工廠模式,反射,以及接口,多態(tài)這些應(yīng)用有了進(jìn)一步認(rèn)識(shí)。

    3.   對(duì)某個(gè)知識(shí)點(diǎn)的問題學(xué)習(xí)。

    其中有個(gè)學(xué)生用了單例模式。單利模式的作用,以及好處都是可以理解的,但是當(dāng)時(shí)的他利用的嵌套類實(shí)現(xiàn)的單例模式,對(duì)嵌套類,靜態(tài)塊有了進(jìn)一步認(rèn)識(shí)。

    另一個(gè)是錯(cuò)誤處理。Trycatch,throw,throws知識(shí)點(diǎn)的學(xué)習(xí)。

    4.   對(duì)文檔中的內(nèi)容進(jìn)一步補(bǔ)充。

         全體七期發(fā)言,正好補(bǔ)充自己對(duì)文檔的認(rèn)識(shí)不足的問題。

    5.   驗(yàn)收中記錄下自己的不懂的問題。

       對(duì)UML中活動(dòng)圖,狀態(tài)圖,構(gòu)件圖,部署圖的概念理解,但是畫出某一個(gè)圖,無法確定對(duì)與錯(cuò),說明自己對(duì)這方面欠缺。

    6.   再次加深文檔的問題。規(guī)范問題。

       當(dāng)把問題提給八期的學(xué)生時(shí),同時(shí)也在提給自己。嚴(yán)格要求自己,以專業(yè)程序猿的身份要求自己。各種文檔,代碼規(guī)范化。

    驗(yàn)收別人,也在驗(yàn)收自己。抓住一切可以提升自己的機(jī)會(huì)。

    posted @ 2012-07-30 23:23 往事隨風(fēng) 閱讀(783) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 91在线视频免费播放| 亚洲尹人九九大色香蕉网站| 亚洲欧美日本韩国| **实干一级毛片aa免费| 亚洲国产精品福利片在线观看 | 午夜一区二区免费视频| 亚洲免费观看在线视频| 最近最好最新2019中文字幕免费 | 亚洲国产精品成人综合久久久 | 最近中文字幕mv免费高清视频8| 国产亚洲婷婷香蕉久久精品| 国产精品成人69XXX免费视频| 四虎影视在线永久免费观看| 久久亚洲精品11p| 日本最新免费不卡二区在线| 亚洲欧洲精品成人久久曰| 毛片免费观看的视频在线| 亚洲黄页网在线观看| 免费A级毛片无码无遮挡内射| 亚洲天堂电影在线观看| 99久久久国产精品免费牛牛四川| 亚洲av无码专区国产乱码在线观看| 中文字幕永久免费视频| 亚洲综合网站色欲色欲| 中国在线观看免费的www| 亚洲人成人一区二区三区| AAAAA级少妇高潮大片免费看| 奇米影视亚洲春色| 国产午夜无码片免费| 好看的电影网站亚洲一区| 国产午夜精品免费一区二区三区| 亚洲国产精品无码中文字| 国产精品区免费视频| 久久久亚洲欧洲日产国码是AV| 在线免费中文字幕| 亚洲AV综合色区无码二区爱AV| 国产卡一卡二卡三免费入口| 亚洲午夜精品久久久久久app| 精品免费国产一区二区三区| 国产精品观看在线亚洲人成网| 亚洲av无码专区在线观看素人|