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

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

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

    Sugo

    Goof off ? no way: never
    posts - 20, comments - 8, trackbacks - 73, articles - 1
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2005年10月15日

    JTable如果在編輯狀態(tài)下,當(dāng)要保存的時(shí)候,比如直接點(diǎn)保存按鈕,得到的數(shù)據(jù)不是編輯狀態(tài)下的數(shù)據(jù),琢磨出一個(gè)方法,記錄一下:
          i和j表示正在被編輯的行號(hào)列號(hào)
           CellEditor   ce   =   md.getCellEditor(i,j);
           //CellEditor   ce   =   md.getCellEditor(md.getEditingRow(), md.getEditingColumn());    
           ce.stopCellEditing();  
           Object   value   =   ce.getCellEditorValue();  
          // model.setValueAt(value,md.getEditingRow(), md.getEditingColumn());
           model.setValueAt(value,i,j);

    posted @ 2008-01-14 21:30 sugo 閱讀(1400) | 評(píng)論 (0)編輯 收藏

         獲取網(wǎng)卡物理地址:
             String cmd="ipconfig /all";
             Process p=Runtime.getRuntime().exec(cmd);
             BufferedReader bis=new BufferedReader(new InputStreamReader(p.getInputStream()));
             String line="";
             while((line=bis.readLine())!=null){
               if(line.indexOf("Physical Address")!=-1){
                 Pattern ptn=Pattern.compile("((\\w{2})|(\\d{2})|(\\w+\\d+)|(\\d+\\w+))-.*");
                  Matcher m=ptn.matcher(line.trim());
                  while(m.find()){
                    System.out.println("get mac  "+m.group());
                  }
               }
              }

    posted @ 2007-12-25 16:47 sugo 閱讀(369) | 評(píng)論 (0)編輯 收藏

    閑暇之余寫的坦克小游戲,源碼貼出來(lái),有意見(jiàn)和疑問(wèn)請(qǐng)留言,共同進(jìn)步

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    </HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
     var missleno=0;
     var energy=100;
     var enemytimer;
     function document.onkeydown()

      if (window.event.keyCode==37)   // 方向鍵 <-
      { 
        var temp=document.getElementById("sg");
     temp.style.pixelLeft-=10;
       }
      else if (window.event.keyCode==39)   // 方向鍵 ->
      { 
        var temp=document.getElementById("sg");
     temp.style.pixelLeft+=10;
       }
       else if (window.event.keyCode==40){
         var temp=document.getElementById("sg");
      temp.style.pixelTop+=10;
     // temp.style.height=66px;

       }
       else if(window.event.keyCode==38){  //  up ^
         //alert(window.event.keyCode);
      var temp=document.getElementById("sg");
      temp.style.pixelTop-=10;
       }
       else if(window.event.keyCode==32){
         fire(missleno);
         missleno++;
       }
       // else{
     // var temp=document.getElementById("missle1000");
     // if(temp==null){
     //  alert('null');
     // }
     //}
    }
     function fire(mno){
       var no=mno;
       var temp=document.getElementById("sg");
       tt=document.createElement("div");
       cont=document.createTextNode("=");
       tt.appendChild(cont);
       tt.id="missle"+no;
       // missleno++;
       tt.style.position="absolute";
       // var obj=eval("sg"+num);
       tt.style.pixelTop=temp.style.pixelTop+15;
       tt.style.pixelLeft=temp.style.pixelLeft+60;
       document.body.appendChild(tt);
       move(no);
     }
     function move(mno){
       var no=mno;
       var temp=document.getElementById("missle"+no);
       // var temphn=document.getElementById("hn");
       temp.style.pixelLeft+=5;
       var result=monitor_missle(no); //監(jiān)控子彈是否打中
       //alert(result);
       if(result!='stop'){
         if(temp.style.pixelLeft!=1000){
          setTimeout("move("+no+")",20);
         }
         else if(temp.style.pixelLeft==1000){ //消除子彈
           temp.parentNode.removeChild(temp);
         }
       }
     }
      function showpos(){
       var temp=document.getElementById("hn");
       alert(temp.style.pixelLeft);
      }
      function flush(){
       var temp=document.getElementById("hn");
       //temp.parentNode.removeChild(temp);
       temp.style.display="none";
       temp=document.getElementById("missle"+missleno);
       temp.parentNode.removeChild(temp);
      }
      function initEnemy(){
        tt=document.createElement("div");
        cont=document.createTextNode("enemy");
        tt.appendChild(cont);
        tt.id="enemy";
        tt.style.position="absolute";
        // var obj=eval("sg"+num);
        tt.style.pixelTop=390;
        tt.style.pixelLeft=900;
     tt.style.border="dashed thick #008022";
     tt.style.width="36px";
     tt.style.padding="2px 4px 0px 4px";
     tt.style.background="#ff3303";
     tt.style.color="#FFFFEE";
        document.body.appendChild(tt);
     enemy_move();
      }
      function monitor(){
       var enemy=document.getElementById("enemy");
       for(var t=0;t<missleno;t++){
         var temp=document.getElementById("missle"+t);
      if(temp==null)
       continue;
         else{
      if(((enemy.style.pixelTop-10)<temp.style.pixelTop) &&((enemy.style.pixelTop+10)>temp.style.pixelTop) &&  (temp.style.pixelLeft>=enemy.style.pixelLeft)){
        energy--;
        temp.parentNode.removeChild(temp);
        alert(energy);
       }
      }
       }
     
      }
      function monitor_missle(mno){
       var t=mno;
       var enemy=document.getElementById("enemy");
       var temp=document.getElementById("missle"+t);
      if((temp!=null)&&(enemy!=null)){
       if(((enemy.style.pixelTop-10)<temp.style.pixelTop) &&((enemy.style.pixelTop+10)>temp.style.pixelTop) &&  (temp.style.pixelLeft>=enemy.style.pixelLeft)){
        energy--;
        var blood=document.getElementById("bld");
        blood.innerHTML=energy;
        temp.parentNode.removeChild(temp);
        if(energy==0){
        enemy.parentNode.removeChild(enemy);
        clearTimeout(enemytimer);
       // enemy.style.display="none";
        alert("YOU WIN,CONGRATULATIONS!");
        }
        return 'stop';
       }
      }
      return 'continue';
      }
      function enemy_move(){
     
      var enemy=document.getElementById("enemy");
      enemy.style.pixelLeft-=10;
      enemytimer=setTimeout("enemy_move()",1000);
      }
     
    //-->
    </SCRIPT>
    <BODY>
    <div style="border: dashed thick #008000; width:36px; text-align:center;  padding:2px 4px 0px 4px; background:#ff3300; color:#FFFFFF;position:absolute" id="sg" >sugo</div>
    <!-- <div style="border: dashed thick #008000; width:36px; text-align:center;  padding:2px 4px 0px 4px; background:#ff3300; color:#FFFFFF;position:absolute;left=1000;top=500" id="hn">hanna</div>  -->
    <SCRIPT LANGUAGE="JavaScript">
    <!--
      initEnemy();
     // setInterval("monitor()",500);
    //-->
    </SCRIPT>
    <div id="bld"></div>
    </BODY>
    </HTML>

    posted @ 2007-11-22 18:10 sugo 閱讀(450) | 評(píng)論 (0)編輯 收藏

         實(shí)現(xiàn)了控制隨機(jī)生成的一個(gè)六位字符串下落,可以向左、向右、向下加速。實(shí)現(xiàn)的功能仿照俄羅斯方塊來(lái)做,本來(lái)想實(shí)現(xiàn)上下兩行相同字母消除功能,但想起一個(gè)方法(代碼中的erase()方法),感覺(jué)沒(méi)問(wèn)題,但一直沒(méi)有實(shí)現(xiàn),后來(lái)也懶得想了。現(xiàn)將代碼貼在這里,希望讀到這篇文章的朋友如果感興趣的話提出寶貴意見(jiàn),并可以隨意拷貝代碼完善功能:)
     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="Sugo">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    </HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var incx=10;//每次下落的高度
    var sty=20; //開(kāi)始時(shí)候的縱坐標(biāo)
    var stx=500; //開(kāi)始時(shí)候的橫坐標(biāo)
    var num=0; //每個(gè)div標(biāo)號(hào),同時(shí)也起到確定下一個(gè)div元素停止的位置
    var len=10;
    var timer;//定時(shí)器
    //var arr0,arr1,arr2,arr3,arr4,arr5,arr6,arr7,arr8,arr9,arr10,arr11,arr12,arr13,arr14,arr15; //用于字母消除作用的數(shù)組,此功能沒(méi)實(shí)現(xiàn),這些變量可以不用
    //初始字符串初始位置
    function firstshow(){ 
     //temp=document.getElementById("sg");
     sg0.style.pixelTop=sty;
     sg0.style.pixelLeft=stx;
     
    }
    //增加字符串
    function addDiv(){
     tt=document.createElement("div");
     divcontent=randomString(6);
     cont=document.createTextNode(divcontent);
     tt.appendChild(cont);
     tt.id="sg"+num;
     tt.style.position="absolute";
    // var obj=eval("sg"+num);
     tt.style.pixelTop=10;
     tt.style.pixelLeft=500;
     document.body.appendChild(tt);
     
    }

    //字符串下落方法
     function fall(id){
       var obj=eval("sg"+id);
      
      obj.style.pixelTop+=incx;
      obj.style.pixelLeft=stx;
      if(obj.style.pixelTop==(610-len*num)){   //到達(dá)目的地址時(shí)(下落到610處,此處可隨意改動(dòng))
       obj.style.pixelTop=610-len*num;
       //erase(); 功能沒(méi)有實(shí)現(xiàn)
       num++;
       addDiv();
       fall(num);
      }
      else if(obj.style.pixelTop<(610-len*num)) //沒(méi)有到達(dá)目的地址時(shí)
      timer = setTimeout('fall(num)',1000); //1000可以換成任意數(shù)字,越小下落速度越快
      else if(obj.style.pixelTop>(610-len*num)) //處理出現(xiàn)地址大于目的地址時(shí)
      {
      }
     }
     //當(dāng)使用方向鍵操作時(shí)使用的下落方法
     function fall1(id,sx,sy){
       var obj=eval("sg"+id);
      
      obj.style.pixelTop=sy+incx;
      obj.style.pixelLeft=sx;
      y=obj.style.pixelTop;
      x=obj.style.pixelLeft;
      if(obj.style.pixelTop==(610-len*num)){   //到達(dá)目的地址時(shí)
       obj.style.pixelTop=610-len*num;
       //erase(); 功能沒(méi)有實(shí)現(xiàn)
       num++;
       addDiv();
       fall(num);
      }
      else if(obj.style.pixelTop<(610-len*num)) //沒(méi)有到達(dá)目的地址時(shí)
      timer = setTimeout('fall1(num,x,y)',1000); //1000可以換成任意數(shù)字,越小下落速度越快
      else if(obj.style.pixelTop>(610-len*num)) //處理出現(xiàn)地址大于目的地址時(shí)
      {
      }
     }
    //產(chǎn)生隨機(jī)六位字符串
     function randomString(leng){
       var source="abcdefghijklmnopqrstuvwxyz";
       var result="";
       for(var i=0;i<leng;i++){
      
        result+=source.charAt(Math.random()*source.length)
       }
       return result;
     }
     //鍵盤控制
     function document.onkeydown()

      if (window.event.keyCode==37)   // 方向鍵 <-
      { 
        var temp=document.getElementById("sg"+num);
     temp.style.pixelLeft-=8;
     x=temp.style.pixelLeft;
     y=temp.style.pixelTop;
     clearTimeout(timer);
        fall1(num,x,y-10);
       }
      else if (window.event.keyCode==39)   // 方向鍵 ->
      { 
        var temp=document.getElementById("sg"+num);
     temp.style.pixelLeft+=8;
     x=temp.style.pixelLeft;
     y=temp.style.pixelTop;
     clearTimeout(timer);
        fall1(num,x,y-10);
       }
       else if (window.event.keyCode==40){ //方向鍵 |
         var temp=document.getElementById("sg"+num);
      temp.style.pixelTop+=10;
         x=temp.style.pixelLeft;
      y=temp.style.pixelTop;
      clearTimeout(timer);
         fall1(num,x,y-10);
       }
    }
    //字母消除程序,暫時(shí)不能實(shí)現(xiàn)功能
     function erase(){
      var pos=new Array();
      for(var i=0;i<=num;i++){ //得到所有存在的div每個(gè)字符的位置值
        dpos=document.getElementById("sg"+i);
     x=dpos.style.pixelLeft;
     //content=dpos.value;
        obj=eval("arr"+i);
     obj=new Array();
     for(var j=0;j<6;j++){
       obj[j]=x+j;
     }
     pos[i]=obj;
      }
     //alert(num);
      if(num>=1){
       
        for(t=num-1;t<num;t++){
       for(tt=0;tt<6;tt++){
         for(ttt=0;ttt<6;ttt++){
      // alert(pos[t][ttt]);
        if(pos[t][tt]==pos[t+1][ttt]){
        // alert("here"+tt+"  "+ttt);
          mod1=document.getElementById("sg"+t);
       mod2=document.getElementById("sg"+(t+1));
          var rep1="",rep2="";
       for(var l=0;l<mod1.innerHTML.length;l++){
         if(l!=tt){
         rep1+=mod1.innerHTML.charAt(l);
         }
         else{
         rep1+="-";
         }
       }
       mod1.innerHTML=rep1;
       //rep1='';
       //alert(mod1.innerHTML);
       for(var ll=0;ll<mod2.innerHTML.length;ll++){
         if(ll!=ttt){
          rep2+=mod2.innerHTML.charAt(ll);
         }
         else{
          rep2+="-";
                  }
       }
       mod2.innerHTML=rep2;
       //rep2='';
        }
      }
          }
        }
      }
     }
    //-->
    </SCRIPT>
    <BODY onload="firstshow();" >

    <div id="sg0" style="position:absolute"><SCRIPT LANGUAGE="JavaScript">
    <!--
    document.write(randomString(6));  //6可以改為任意數(shù)字,數(shù)字即是字符串的長(zhǎng)度
    //-->
    </SCRIPT></div>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
      fall(0);
    //-->
    </SCRIPT>
    </BODY>
    </HTML>

    posted @ 2007-07-30 16:48 sugo 閱讀(374) | 評(píng)論 (0)編輯 收藏

    ? ?? 訪問(wèn)某論壇時(shí),發(fā)現(xiàn)論壇全是html頁(yè)面。今天搞明白了,原來(lái)是重寫了頁(yè)面的url。通俗的說(shuō)就是雖然地址欄里的是html結(jié)尾的url,但實(shí)際上訪問(wèn)的是后臺(tái)動(dòng)態(tài)jsp(php、asp)頁(yè)面。好像是一種視覺(jué)欺騙。
    ???? 實(shí)現(xiàn)這個(gè)技術(shù)也很容易,一般都會(huì)使用國(guó)外的一個(gè)urlrewriter過(guò)濾器。
    ???? 1、下載:
    ???? 下載地址為http://tuckey.org/urlrewrite/#download
    ???? 2、解壓和基本配置
    ???? 使用的為2.6版本,解壓后,包中含有一個(gè)urlrewrite.xml,此為關(guān)鍵的配置文件。還有l(wèi)ib文件夾下的urlrewrite-2.6.0.jar這個(gè)包。將此包放到web應(yīng)用程序的web-inf/lib下面,urlrewrite.xml放到web-inf下。
    ???? 3、修改應(yīng)用程序web-inf文件夾下的web.xml文件,添加如下內(nèi)容:
    ????? <filter>
    ???????? ??? <filter-name>UrlRewriteFilter</filter-name>
    ???????????? <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    ????? </filter>
    ????? <filter-mapping>
    ??????? ???? <filter-name>UrlRewriteFilter</filter-name>
    ???????????? <url-pattern>/*</url-pattern>
    ????? </filter-mapping>
    ???? 4、修改應(yīng)用程序web-inf文件夾下的urlrewrite.xml文件,添加rule,內(nèi)容如下:
    ??????? <rule>
    ?????????? <name>html rule</name>
    ?????????? <from>/test/thread([0-9]+)_([0-9]+).html</from>
    ?????? ??? <to>/show.jsp?id=$1&amp;order=$2</to>
    ?????? </rule>
    ???????? 其中要求對(duì)正則表達(dá)式有所了解,以上的語(yǔ)句可以實(shí)現(xiàn)當(dāng)你訪問(wèn)http://localhost/test/thread12_56.html時(shí),會(huì)轉(zhuǎn)向http://localhost/show.jsp?id=12&order=56這個(gè)動(dòng)態(tài)頁(yè)面。
    ???????? 個(gè)人覺(jué)得需要開(kāi)發(fā)人員對(duì)頁(yè)面參數(shù)非常熟悉。這個(gè)技術(shù)還是值得大家來(lái)嘗試一下的。個(gè)人論壇可以使用此技術(shù):),讓別人看不出你是使用什么編寫的。

    posted @ 2007-03-22 14:11 sugo 閱讀(2268) | 評(píng)論 (3)編輯 收藏

    ????? 實(shí)現(xiàn)了基本的網(wǎng)絡(luò)圖片、mp3、影片下載,原理為首先根據(jù)要下載的圖片(mp3、影片)的url,將它的信息寫入一個(gè)臨時(shí)文件。然后再?gòu)倪@個(gè)臨時(shí)文件將信息導(dǎo)入到真正你想要存儲(chǔ)的圖片(mp3、影片)。第一步為網(wǎng)絡(luò)到本地,第二步為本地到本地。
    ???????//網(wǎng)絡(luò)到本地代碼:
    ?????? ?java.net.URL l_url = new java.net.URL("http://localhost/rlzy/photo/"+addition); //圖片url地址
    ??????? java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
    ??????? int randomnum=(int)(Math.random()*100);
    ??????? System.out.println(randomnum);
    ??????? File f1=new File(photopath+randomnum);
    ??????? FileOutputStream o=new FileOutputStream(f1);
    ??????? l_connection.connect();
    ??????? java.io.InputStream l_urlStream;
    ???????
    ??????? l_urlStream = l_connection.getInputStream();

    ?????? byte b[]=new byte[1000];
    ?????? int n;
    ????????? while( (n=l_urlStream.read(b))!=-1)
    ????????????? {
    ????????? ??? o.write(b,0,n);
    ????????????? }
    ????????? o.close();
    ????????? l_urlStream.close();
    ????????
    ?????????
    ????????? //本地到本地
    ????????? RandomAccessFile random=new RandomAccessFile(f1,"r");
    ????????? long? forthEndPosition=0;
    ???????????File tfolder1=new File("E:/111/);//存儲(chǔ)圖片路徑
    ???????? ? tfolder1.mkdirs();//如果不存在就創(chuàng)建此文件夾,如果沒(méi)有這個(gè)步驟將會(huì)出現(xiàn)FileNotFoundException
    ??????????File f2=new File("e:/111/"+name);
    ?????????????
    ??????????RandomAccessFile random2=new RandomAccessFile(f2,"rw");?
    ????????????
    ????????? random.seek(random.length());
    ???????? ?long endPosition=random.getFilePointer();
    ??????????random.seek(forthEndPosition);
    ??????????long startPoint=random.getFilePointer();
    ????????????while(startPoint<endPosition) //開(kāi)始拷貝文件信息
    ????????????????? { n=random.readByte();
    ??????????????????? random2.write(n);
    ??????????????????? startPoint=random.getFilePointer();
    ????????????????? }
    ?????????? random2.close();random.close();
    ?????????? f1.delete(); //刪除臨時(shí)文件?????
    ????????? 程序?qū)懥艘粋€(gè)簡(jiǎn)單的GUI界面?,使其看起來(lái)更像一個(gè)下載器了。如果提高下載速度還需進(jìn)一步的學(xué)習(xí)和研究。有興趣的朋友可以點(diǎn)擊下載研究
    ????????? http://sugo.gnway.net/test/FreeDown.jar(申請(qǐng)的一個(gè)免費(fèi)二級(jí)域名,速度可能不快 :-) ,另外需要sun公司的jre環(huán)境,Windows、Linux下均能運(yùn)行)
    ?????????

    posted @ 2007-01-26 14:04 sugo 閱讀(322) | 評(píng)論 (0)編輯 收藏

    ????? 報(bào)表中有這個(gè)需求,當(dāng)報(bào)表很大需要下拉時(shí),但表頭在正上方,看不到對(duì)應(yīng)的是哪一項(xiàng)的數(shù)據(jù)。此功能可以使用虛擬一個(gè)表頭來(lái)實(shí)現(xiàn)。具體的靈感來(lái)自網(wǎng)站隨著鼠標(biāo)移動(dòng)的圖片。當(dāng)鼠標(biāo)下移時(shí),圖片跟著走。對(duì)于這個(gè)需求來(lái)說(shuō)只需把圖片換成一個(gè)表格即可。
    ?????? 網(wǎng)頁(yè)中加入如下代碼:
    ??????<DIV id="thead" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; FILTER: progid:DXImageTransform.Microsoftpadding:8px; ; LEFT: expression(eval(document.body.scrollLeft)+eval(document.body.clientWidth)-980); BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; POSITION: absolute; ; TOP: expression(eval(document.body.scrollTop)+eval(document.body.clientHeight)-500); TEXT-ALIGN: center">
    <TABLE cellSpacing=0 cellPadding=0 align=center border=0>
    <TBODY>
    <TR>
    <TD>
    <EMBED style="LEFT: -73px; POSITION: absolute; TOP: 125px" align=right>
    <table bgcolor="red"? border=1>
    <tr>
    <td>sdfsd</td><td>sdfsd</td><td>sdfsd</td>
    </tr>
    </table>
    </EMBED>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </DIV>
    ?????? 紅色代碼部分可以更替為任意html標(biāo)記,比如img、input等等。
    ?????? 注:內(nèi)嵌的表格顏色最好深一些,不然會(huì)出現(xiàn)重疊現(xiàn)象。調(diào)整虛擬表頭相對(duì)屏幕上方的位置在藍(lán)色粗體的地方,可根據(jù)需要修改。
    ?????? 當(dāng)需要打印報(bào)表時(shí),可以添加一個(gè)button來(lái)控制這個(gè)表頭的顯示 js方法為
    ?????? function control(){?
    ???????? var temp=document.getElementById("thead");
    ????????? if(temp.style.display=='none')
    ????????????? temp.style.display='' ;
    ????????? else
    ????????????? temp.style.display='none';
    ?????? }

    posted @ 2007-01-24 18:53 sugo 閱讀(1510) | 評(píng)論 (0)編輯 收藏

    ???? 使用hibernate的hql查詢,當(dāng)指定某些字段時(shí),一行數(shù)據(jù)此時(shí)得到的是相應(yīng)的一個(gè)數(shù)組。而字段全部查詢得到的是一個(gè)pojo對(duì)象。
    ???? 使用struts的邏輯標(biāo)簽顯示時(shí),如果得到的是一個(gè)pojo對(duì)象,可以使用<logic:iterate>,也可以使用<logic present>使用的時(shí)候不用再定義id,name屬性即為request或者session里存儲(chǔ)的對(duì)象的別名。然后使用<bean:write>定義兩個(gè)屬性name和logic標(biāo)簽的name一樣,property為對(duì)應(yīng)的類中定義的成員變量名字。
    ???? 如果得到的是數(shù)組的集合,則需要<logic:iterate>嵌套。例如:
    ??? <logic:iterate name="du" id="indiv" scope="session">
    ??? ???? <logic:iterate name="indiv" id="tiny">
    ????????????? <bean:write name="tiny" />
    ??????? </logic:iterate>
    ??? </logic:iterate>
    ???? 注(個(gè)人認(rèn)為):可以看到規(guī)律,下一層的name為上層的id。
    ??? 得到的是集合,如List 或者Vector等。例如:
    ?? <logic:iterate scope="session" id="du" name="dlist">
    ????? <bean:write name="du" property="wdate" />&nbsp;
    ????? <bean:define id="text" name="du" property="content" type="String"/>
    ??????<html:link href="modify.do" paramId="id" paramName="du" paramProperty="id" linkName="mod"? />
    ????? <html:button property="modify" onclick="mod.click()" value="modify" />
    ????? <html:textarea property="content" value="<%= text %>"></html:textarea><br>
    ????? <bean:write name="du" property="username" />&nbsp;
    ????? <bean:write name="du" property="weather" />&nbsp;<br>
    ????? <html:link href="modify.do?manipulate=delete" paramId="id" paramName="du" paramProperty="id"??????? linkName="del"? />
    ????? <html:button property="delete" onclick="del.click()" value="delete" />
    ??? </logic:iterate>
    ??? 例子中還包括在一個(gè)組件中填值,使用<bean:define>標(biāo)簽,可以得到一個(gè)對(duì)象,id就是對(duì)象的引用。
    ????<html:link>的linkName相當(dāng)于超鏈接<a href="">中的id屬性,<html:link>的page和href的不同,page需要相對(duì)路徑,url前面需要加上/,href則不用。<html:link>參數(shù)傳遞,如果確定需要傳遞的參數(shù),直接跟在url后面即可。如果是動(dòng)態(tài)的,則需要paramId, paramName, paramProperty 。第一個(gè)為參數(shù)名稱,第二個(gè)為存儲(chǔ)的對(duì)象的名字,如在request、session中存儲(chǔ)的名字,第三個(gè)就是這個(gè)對(duì)象里面的成員變量。多個(gè)參數(shù)一般使用HashMap。
    ??? Struts中的action,即便是不想用ActionForm,也需要在action的配置屬性里寫入,否則會(huì)出現(xiàn)空值的問(wèn)題,今天遇到了,所以定義DynaActionForm還是必要的。
    ??? hibernate一般的數(shù)據(jù)庫(kù)操作都通過(guò)session來(lái)進(jìn)行,我把所有涉及的操作都寫成了一個(gè)ObjectDAO,比較方便操作。

    posted @ 2007-01-15 20:39 sugo 閱讀(312) | 評(píng)論 (0)編輯 收藏

    ??? 當(dāng)提交表單時(shí),此時(shí)操作人員只需等待結(jié)果返回,這里,我實(shí)現(xiàn)了一個(gè)覆蓋網(wǎng)頁(yè)的方法,使得整個(gè)網(wǎng)頁(yè)被一個(gè)很大的div覆蓋,這樣操作人員就不能點(diǎn)擊頁(yè)面的內(nèi)容了。實(shí)現(xiàn)很簡(jiǎn)單,一個(gè)div
    ??? <div id="doing"? style="Z-INDEX: 12000; LEFT: 0px; WIDTH: 100%; CURSOR: wait; POSITION: absolute; TOP: 0px; HEIGHT: 100%; display:none ">
    ??????????? <table width="100%" height="100%">
    ??????????????? <tr align="center" valign="middle">
    ??????????????????? <td>
    ??????????????????????? <table width="169" height="62" bgcolor="#99cccc" style="FILTER: Alpha(Opacity=75); WIDTH: 169px; HEIGHT: 62px">
    ??????????????????????????? <tr align="center" valign="middle">
    ??????????????????????????????? <td>頁(yè)面提交中.<br>
    ??????????????????????????????????? Loading.</td>
    ??????????????????????????? </tr>
    ??????????????????????? </table>
    ??????????????????? </td>
    ??????????????? </tr>
    ??????????? </table>
    ??????? </div>
    ???? 頁(yè)面最初載入時(shí)把它隱藏起來(lái),當(dāng)按下提交按鈕時(shí)讓它顯示。結(jié)果返回后再次讓它隱藏。jsp代碼:
    ???? <%
    ???????? ?String content=request.getParameter("tc");
    ????????? if(content==null){
    ??? %>
    ??????? <form action="#" method="post" onsubmit="return show()">
    ????????? <textarea name="tc">dfdfsdf
    ???????????? dfdaf</textarea>
    ??????????<input type=submit value=" go "? >
    ?????? </form>
    ?? <%
    ???? }
    ?????? else{
    ????????? ?if(content.indexOf("\n")==-1)
    ??????????? ?out.println("haha");
    ??????????? // content=content.replaceAll("\n","<br>");
    ?? %>
    ????????? <textarea> <% out.println(content); %>
    ?????? ?</textarea>
    ?? <%
    ???? ?}
    ?? %>
    ?? show方法:
    ??? function show(){
    ???????? document.getElementById('doing').style.display=''
    ??????? ?return true;
    ?? }
    ??? 當(dāng)表單提交并返回結(jié)果時(shí),頁(yè)面重新加載,div的display屬性自動(dòng)又變?yōu)閚one。達(dá)到了想要的效果。

    posted @ 2007-01-14 23:31 sugo 閱讀(2072) | 評(píng)論 (2)編輯 收藏

    ? ? 幻燈片大家都非常熟悉了,我以雅虎幻燈片為靈感,開(kāi)發(fā)了自己的幻燈片。
    ?? ?首先,這個(gè)幻燈片程序是在我的jsp圖片查看器上加上去的,算是滿足自己的需求吧,哈。因?yàn)橛袝r(shí)候看幻燈片對(duì)我來(lái)說(shuō)是一種享受。。。嗯
    ??? 首先是做一個(gè)基本的圖片自動(dòng)播放的程序,這個(gè)純javascript就可以實(shí)現(xiàn),實(shí)現(xiàn)需要的javascript方法也很簡(jiǎn)單,代碼如下:
    ???? function rotateBanner(frameNumber,interval){
    ????? document.banner.src=fn[frameNumber].src;//為頁(yè)面中的id為banner的圖片標(biāo)記動(dòng)態(tài)定義圖片的鏈接地址
    ????? var imageChoice=frameNumber+1;
    ???? ?if(imageChoice==fn.length){
    ???????? imageChoice=0;
    ????? }
    ????? player=window.setTimeout("rotateBanner("+imageChoice+","+inv+")",inv);
    ?? }
    ?? 其中frameNumber為圖片路徑數(shù)組的下標(biāo),interval為顯示下一幅圖片的間隔時(shí)間。
    ?? 首先,我們要定義一個(gè)全局?jǐn)?shù)組,數(shù)組各個(gè)元素的值為圖片的url。(一般我們都把一類的圖片放在一個(gè)目錄中,這種情況可以通過(guò)動(dòng)態(tài)生成的方法來(lái)動(dòng)態(tài)的為這個(gè)全局?jǐn)?shù)組的各個(gè)元素賦值)
    ?? js方法的使用也很簡(jiǎn)單,在這個(gè)頁(yè)面的body標(biāo)簽加入onload=“rotateBanner(0,5000)”即可,在這里0為數(shù)組的第一個(gè)元素下標(biāo),5000為播放的間隔時(shí)間5秒。
    ?? 一個(gè)不能被我們控制的幻燈片頁(yè)面就產(chǎn)生了。下面我們就要開(kāi)始對(duì)其進(jìn)行控制了,首先,我們實(shí)現(xiàn)讓幻燈片停止?jié)L動(dòng)播放圖片。這個(gè)很簡(jiǎn)單,上面的js方法我們定義了一個(gè)定時(shí)器player變量,這個(gè)player是個(gè)全局的,當(dāng)不停的遞歸調(diào)用的時(shí)候,都是它自己在不停的被賦值。停止它我們只需把這個(gè)定時(shí)器去處即可。在頁(yè)面中加上一個(gè)超鏈接,在它的onclick事件中觸發(fā)一個(gè)js方法,不妨我們?cè)賹懸粋€(gè)方法,代碼為:
    ?? function stop(){
    ?????? window.clearTimeout(player);
    ?? }
    ??? 這樣就把圖片循環(huán)顯示的player定時(shí)器去除了。
    ??? 有停止就要有開(kāi)始,開(kāi)始就容易了,在開(kāi)始超鏈接的onclick事件調(diào)用rotateBanner()方法就行了,但這里有個(gè)問(wèn)題,這個(gè)一會(huì)再說(shuō)。
    ??? 我們?cè)偬砑由弦环乱环溄樱覀兛梢酝ㄟ^(guò)手工點(diǎn)擊來(lái)顯示下一頁(yè),這里就要又要定義一個(gè)全局變量了,它用來(lái)記錄顯示圖片的數(shù)組下標(biāo)。代碼如下:其中的firstno變量我們后面再說(shuō)它的作用
    ?? function previous(){
    ??? if(imgno==0)
    ?????? imgno=fn.length;
    ?????? imgno=imgno-1;
    ?????? firstno=imgno;
    ?????? document.banner.src=fn[imgno].src;
    ? }
    ?? function next(){
    ??? ?if(imgno==fn.length-1)
    ?????? imgno=-1;
    ?????? imgno=imgno+1;
    ?????? firstno=imgno;
    ????? document.banner.src=fn[imgno].src;
    }
    ? imgno就是我們定義的全局變量,來(lái)記錄當(dāng)前圖片的數(shù)組下標(biāo)。但這樣有個(gè)問(wèn)題,那就是imgno的初值為多少?現(xiàn)在的代碼中并沒(méi)初始化。好,我們分析一下,從頁(yè)面打開(kāi)開(kāi)始,onload事件調(diào)用rotateBanner方法,這是最初的入口,下一幅上一幅按鈕也是當(dāng)執(zhí)行了這個(gè)事件后才會(huì)有作用,所以我們需要在rotateBanner方法中記錄圖片的下標(biāo)。其實(shí)也可以在聲明的時(shí)候初始化為0。
    ?? 所以我們?cè)邳c(diǎn)擊開(kāi)始的時(shí)候,rotateBanner(firstno,firstclock)函數(shù)里面的參數(shù)要傳入當(dāng)前圖片的下標(biāo),不然我們點(diǎn)開(kāi)始后幻燈片是開(kāi)始幻燈顯示了,但它又從0開(kāi)始了,不會(huì)從我們停止定時(shí)器時(shí)候的顯示的圖片的位置開(kāi)始。在此firstno全局變量也是起到記錄的作用,但注意它和imgno變量的不同,它記錄的是目前顯示的圖片的下標(biāo),而imgno在previous和next方法中已經(jīng)不是當(dāng)前圖片的下標(biāo)。firstclock是下面我要說(shuō)明的內(nèi)容。
    ?? 要控制每張圖片顯示間隔的時(shí)間,通過(guò)一個(gè)下拉選擇框來(lái)操作,取得每個(gè)選項(xiàng)相應(yīng)的值很簡(jiǎn)單。當(dāng)選項(xiàng)改動(dòng)時(shí)觸發(fā)一個(gè)事件,我們?nèi)∶麨閟etclock()方法,firstclock就是來(lái)獲得間隔時(shí)間的,代碼為:
    ?? function setclock(clock){
    ???? ?firstclock=clock;
    ????? rotateBanner1(imgno,clock);
    ?? }
    ?? rotateBanner1()的代碼為:
    ?? function rotateBanner1(frameNumber,interval){
    ???? window.clearTimeout(player);
    ??? ?document.banner.src=fn[frameNumber].src;
    ???? var inv=interval;
    ?????var imageChoice=frameNumber+1;
    ???? ?if(imageChoice==fn.length){
    ??????? ?imageChoice=0;
    ???? }
    ???? imgno=frameNumber;
    ???? firstno=imgno;
    ???? player1=window.setTimeout("rotateBanner("+imageChoice+","+inv+")",inv);
    ?? }
    ?? 通過(guò)代碼可以看出,rotateBanner1方法其實(shí)在下拉框選項(xiàng)改變觸發(fā)的時(shí)候只執(zhí)行了一次,因?yàn)樽詈笠恍姓{(diào)用的還是原來(lái)的rotateBanner()方法,這個(gè)代碼的當(dāng)時(shí)寫的時(shí)候很有戲劇性,嘻嘻。
    ?? 其實(shí)這個(gè)幻燈片還是很簡(jiǎn)單的,大家只要?jiǎng)觿?dòng)腦,不難寫出來(lái)。。。那天看一個(gè)人物傳記,sun公司的前任首席科學(xué)家Bill Joy,一天編程能編14個(gè)小時(shí)。。。。:)。。。腦子越用越靈活,啥也不說(shuō)了,向他學(xué)習(xí),學(xué)習(xí),再學(xué)習(xí)。
    ?? 哈哈,明年再接著blog了。。。。。

    posted @ 2006-12-31 20:28 sugo 閱讀(791) | 評(píng)論 (1)編輯 收藏

    ?????? ?今天無(wú)意中發(fā)現(xiàn)了一個(gè)叫做Apusic的應(yīng)用服務(wù)器,仔細(xì)一看,是中國(guó)自己開(kāi)發(fā)的應(yīng)用服務(wù)器,想到是中國(guó)自己開(kāi)發(fā)的東西,一定要支持一下。不過(guò)在搜索Apusic的時(shí)候,發(fā)現(xiàn)了不少負(fù)面的消息。先不管那么多了,通過(guò)一個(gè)鏈接下載了最新的5.0的版本,不過(guò)是個(gè)免安裝的試用版。配置很簡(jiǎn)單,只需在bin目錄的setenv.cmd中編輯APUSIC_HOME(解壓后所在目錄)和 JAVA_HOME(jdk所在目錄),不過(guò)還需要把jdk目錄下lib文件夾的tools.jar復(fù)制到APUSIC_HOME的lib目錄下面,網(wǎng)上沒(méi)有這么介紹,但如果不這樣做的話,運(yùn)行不成功。至少我是這樣。
    ???????? 地址欄輸入http://localhost:6888/就可以訪問(wèn)了。
    ???????? 想要發(fā)布自己的web應(yīng)用,我是先把web應(yīng)用打包為war文件,然后放入到applications目錄下面。然后在config目錄的server.xml中添加了部署這個(gè)web應(yīng)用的一段話--<application name="test.war" base="解壓目錄\applications\test.war" start="auto"/>。地址欄輸入http://localhost:6888/test 就能成功訪問(wèn)了。
    ??????? 運(yùn)行了一下,速度還可以。性能方面還需要長(zhǎng)期的測(cè)試和觀察。

    posted @ 2006-09-12 21:34 sugo 閱讀(540) | 評(píng)論 (0)編輯 收藏

    ??????? 忙了一天裝的Redhat Linux8.0,裝好了之后發(fā)現(xiàn)鼠標(biāo)一直到處亂竄,重啟不行,關(guān)機(jī)重開(kāi)電腦也不行。一氣之下卸載了它重裝。但卸載的問(wèn)題隨之而來(lái)了。。。。
    ??????? 刪除分區(qū)比較容易,在windows用pqmagic就可以刪除。刪除之后呢〉?。。。。。
    ??????? 重啟電腦后,原來(lái)安裝時(shí)候安裝的grub開(kāi)始搞鬼了,系統(tǒng)啟動(dòng)就要加載這個(gè)引導(dǎo)程序,直接不會(huì)出現(xiàn)讓你選擇進(jìn)入windows的界面。只有一個(gè)grub提示符,光標(biāo)在一直閃,好像是在嘲笑我。。。。。。:(
    ??????? 不要著急,在提示符下輸入 rootnoverify (hd0,0) 命令成功之行后,然后輸入 chainloader +1 最后是boot,(注意前兩個(gè)命令之后要有空格)。系統(tǒng)將執(zhí)行我們剛才輸入命令的參數(shù)(hd0,0)對(duì)應(yīng)的所在磁盤分區(qū)的啟動(dòng)程序,這時(shí)候就能看到熟悉的windows啟動(dòng)界面了。之后要進(jìn)入dos界面下(可以使用光盤引導(dǎo),或者裝一個(gè)虛擬軟驅(qū)),在命令提示符下輸入 fdisk /mbr。? 好了,到此,卸載問(wèn)題解決了。。。。
    ????????第二遍總算沒(méi)有鼠標(biāo)的問(wèn)題了,但又來(lái)了adsl撥號(hào)的問(wèn)題了。網(wǎng)上的文章講的內(nèi)容都差不多,但都不行。adsl-setup配置好之后,輸入adsl-start的時(shí)候老是返回錯(cuò)誤。不知道哪里錯(cuò)了。不行,還是得接著研究。。。。
    ??????? 搞了一晚上也最終沒(méi)能撥號(hào)成功。放放吧。其實(shí)我用linux主要目的在兩個(gè),學(xué)習(xí)linux系統(tǒng)的操作和配置,最重要的就是架設(shè)web服務(wù)器。
    ??????? 第二天,我想既然我上不了網(wǎng),我用能上網(wǎng)的電腦把jdk、tomcat、mysql下載到u盤,然后再拷到linux系統(tǒng)這個(gè)辦法總可以吧,結(jié)果也證實(shí)我這個(gè)想法是明智的。首先查資料看看linux系統(tǒng)下如何掛載u盤。首先,打開(kāi)終端后,輸入命令fdisk -l? /dev/sda?,這個(gè)命令最主要目的是看看u盤是不是真正被識(shí)別了還有就是u盤對(duì)應(yīng)的設(shè)備名,一般就是sda1了。?敲入命令 mount -t?vfat /dev/sda1 /mnt/usbhd。如果命令正確執(zhí)行,那么不會(huì)有什么錯(cuò)誤提示。你去/mnt的usbhd里查看,里面的內(nèi)容就是u盤里面的東西了。
    ?????? jdk安裝比較簡(jiǎn)單,下載linux下的jdk安裝包,是個(gè).bin文件。執(zhí)行這個(gè)文件,將生成一個(gè)rpm安裝包。然后使用 rpm命令就可以安裝了,并且jdk自動(dòng)安裝到了/usr/java文件夾下了。
    ?????? tomcat是個(gè)tar.gz文件,使用tar命令就解壓了。就解壓在了此文件所在的路徑。
    ?????? 關(guān)于mysql的安裝是最讓我頭疼的,一直到了晚上才安裝好。參考的這篇文章http://blog.azsq.net/archives/2006/03/31/36.html,成功安裝,在此也謝謝這篇文章的作者了。安裝包我下載的4.0.27版的。
    ?????? 配置開(kāi)發(fā)環(huán)境我使用了大多數(shù)人的做法,修改了/etc/profile文件,加入了和在windows下一樣的環(huán)境變量。
    ?????? 這個(gè)周末完全獻(xiàn)身了linux,我覺(jué)得挺值得。linux下運(yùn)行jsp程序感覺(jué)很快,心情也變得異常的好。。。。。

    posted @ 2006-09-09 20:51 sugo 閱讀(194) | 評(píng)論 (0)編輯 收藏

    1、啟動(dòng)eclipse彈出錯(cuò)誤對(duì)話框,讓你查看日志文件。
    ????? 此錯(cuò)誤一般發(fā)生在安裝了oracle9i之后,安裝后,oracle自帶的jdk將其jdk所在目錄的bin路徑寫入了path環(huán)境變量。此jdk版本為1.3,如果你安裝的jdk版本為1.4以上的話,就會(huì)發(fā)生這個(gè)錯(cuò)誤。解決方法很簡(jiǎn)單,把這個(gè)環(huán)境變量去掉就可以了。
    2、在web.xml文件中配置<error-page>
    ????? 當(dāng)輸入不存在的url時(shí),tomcat通常會(huì)出現(xiàn)404錯(cuò)誤的頁(yè)面,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),這件事情無(wú)所謂。而對(duì)于用戶來(lái)說(shuō),可能看到這樣不太友好的界面,可能會(huì)不很舒服。所以配置<error-page>還是必要的,一般加入這段文字就可以了:
    ????? <error-page>
    ???????????? <error-code>404</error-code>
    ??????????? ?<location>/error.html</location>
    ???? </error-page>
    ???? <error-page>
    ?????????????<exception-type>javax.servlet.ServletException</exception-type>
    ??????????? ?<location>/error.html</location>
    ? </error-page>
    ??????? 必須要注意的一點(diǎn)是,指定的出錯(cuò)后轉(zhuǎn)向的文件,其大小至少為512bytes,否則不會(huì)跳轉(zhuǎn)到你指定的文件。(可以讓用戶設(shè)置客戶端ie的internet選項(xiàng),但我想哪個(gè)用戶也不想自己手工設(shè)置吧)。
    ???????? 還想說(shuō)的是,此配置最好是webMIS或者網(wǎng)站開(kāi)發(fā)完畢后之后再配置。因?yàn)槲以陂_(kāi)發(fā)過(guò)程中,調(diào)試出現(xiàn)錯(cuò)誤也轉(zhuǎn)向了錯(cuò)誤頁(yè)面。不利于發(fā)現(xiàn)程序中出現(xiàn)的錯(cuò)誤。
    ????????有的人想通過(guò)欺騙手段,response.setStatus(200)來(lái)達(dá)到此目的。我個(gè)人覺(jué)得沒(méi)什么意思了。。。。

    posted @ 2006-09-07 20:57 sugo 閱讀(183) | 評(píng)論 (0)編輯 收藏

    1、當(dāng)在一個(gè)文本框輸入內(nèi)容時(shí),下一個(gè)文本框自動(dòng)填寫上一個(gè)文本框輸入的內(nèi)容。簡(jiǎn)單代碼如下:
    ????? <form name="fm" >
    ???????<input name="first" onpropertychange="fm.second.value=fm.first.value">
    ???????<input name="second">
    ????? </form>
    2、enter鍵代替tab鍵。在控件的onkeydown事件中使用簡(jiǎn)單的一行代碼即可:
    ????? if (window.event.keyCode==13) window.event.keyCode=9
    3、強(qiáng)迫用戶讀取注冊(cè)協(xié)議的計(jì)時(shí)按鈕。主要是使用window.setTimeout()這個(gè)方法:
    ??????? var secs = 180;
    ??????? document.agree.agreeb.disabled=true;
    ??????? for(i=1;i<=secs;i++)
    ?????? {
    ????????????? window.setTimeout("update(" + i + ")",i*1000);//這里的計(jì)時(shí)嚴(yán)格來(lái)說(shuō)不是很準(zhǔn)確
    ???????? }
    ???????? function update(num) {
    ?????????? if(num == secs) {
    ????????????? document.agree.agreeb.value ="同意";
    ????????????? document.agree.agreeb.disabled=false;
    ???????? }
    ??????? else {
    ??????????? printnr = secs-num;
    ?????????? document.agree.agreeb.value = "請(qǐng)認(rèn)真閱讀協(xié)議(" + printnr +" 后才能繼續(xù)注冊(cè))";
    ???? }
    4、文本框和file控件一起提交
    ????? 如果還是像原來(lái)的表單提交一樣,此操作是不可行的。什么原因不太清楚,錯(cuò)誤提示好像是語(yǔ)法方面的錯(cuò)誤。解決方法就得靠javascript了。另外就是提交按鈕換成一般的button,通過(guò)button調(diào)用一個(gè)函數(shù),最后通過(guò)表單名.submit()方法來(lái)提交。代碼簡(jiǎn)單如下:
    ????? <form? method="post" name="fm">
    ???????? <input name="picname">
    ???????? <input type="file" name="pic">
    ???????? <input type="button" onclick="go()">
    ???? </form>
    ???? function go(){
    ???? var? picturename=fm.picname.value;
    ???? var? filename=fm.pic.value;
    ???? fm.action="test.jsp?pname="+picturename+"&fname="+filename;
    ???? fm.submit();
    ??? }
    ?5、兩個(gè)html頁(yè)面?zhèn)鬟f參數(shù)
    ?????? 使用js來(lái)接受 通過(guò)一個(gè)location.search就可以獲得后面的參數(shù)值
    ???? (to be continued)

    posted @ 2006-09-05 21:42 sugo 閱讀(150) | 評(píng)論 (0)編輯 收藏

    ?????? 關(guān)于word文檔操作, 網(wǎng)上不少這樣的例子,好像都是一篇文章。word文檔嵌入到網(wǎng)頁(yè)中好像比較簡(jiǎn)單一些。加個(gè)報(bào)文頭基本上就可以實(shí)現(xiàn)此功能。而導(dǎo)出數(shù)據(jù)到word文檔中,我可費(fèi)了不少的腦細(xì)胞。閑話少說(shuō),步入正題。。。:)
    ????? 網(wǎng)頁(yè)中嵌入word文檔,在jsp程序開(kāi)頭部分加入<%@ page contentType="application/msword;charset=GBK"%>這些代碼,即可實(shí)現(xiàn)。比較簡(jiǎn)單,相信很多人都知道這一點(diǎn)了。
    ???? ?費(fèi)腦筋的是將一張報(bào)表或者一張登記表導(dǎo)入到word文檔中。報(bào)表(登記表)都是動(dòng)態(tài)生成的。那么首先的問(wèn)題是如何獲得一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)中的內(nèi)容。我以前使用的BufferedReader,PrintWriter,BufferedInputStream,BufferedOutputSteam都不起作用了,原因就是他們不能讀取動(dòng)態(tài)生成的網(wǎng)頁(yè)內(nèi)容。因此,我想到了URL這個(gè)類,獲得內(nèi)容的代碼如下:
    ????? ?java.net.URL l_url = new java.net.URL("http://localhost:9000/rlzy/employee/employee_resume.jsp?id="+emp_id);

    ?????? java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();

    ????? ?l_connection.connect();

    ????? ?l_urlStream = l_connection.getInputStream();

    ???????java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));

    ?????? while ((sCurrentLine = l_reader.readLine()) != null)

    ??????? {

    ??????????content+=sCurrentLine;

    ???????? }?
    ?????? content即為我們想要得到的動(dòng)態(tài)內(nèi)容。
    ?????? 導(dǎo)出數(shù)據(jù)的話,使用BufferedInputStream?和?BufferedOutputStream 。但前提是把得到的動(dòng)態(tài)內(nèi)容先輸出到一個(gè)臨時(shí)的html網(wǎng)頁(yè)中,即把它先變成一個(gè)靜態(tài)文件。這樣BufferedInputStream 和BufferedOutputStream 就可以獲得要讀取和輸出的內(nèi)容。讀取完畢,再把這個(gè)臨時(shí)的html網(wǎng)頁(yè)刪除。這是網(wǎng)上流傳的代碼:
    ?????? BufferedInputStream bis = null;
    ?????? BufferedOutputStream bos = null;
    ?????? try {
    ???????????? ?bis = new BufferedInputStream(new FileInputStream(內(nèi)容資源的路徑));
    ????????????? bos = new BufferedOutputStream(response.getOutputStream());

    ???????????? ?byte[] buff = new byte[2048];
    ??????????? ? int bytesRead;

    ???????????? ?while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
    ??????????????bos.write(buff,0,bytesRead);
    ??????????? }

    ???????? ?} catch(final IOException e) {
    ??????? System.out.println ( "出現(xiàn)IOException." + e );
    ????????? } finally {
    ???????? ?if (bis != null)
    ??????????? bis.close();
    ????????? if (bos != null)
    ??????????? bos.close();
    ?????? }
    ?????? 此外,導(dǎo)出內(nèi)容到word文檔后,還可能會(huì)出現(xiàn)格式不正確的問(wèn)題。我就遇到了html表格導(dǎo)出到word就發(fā)生變化的情況。這種情況具體原因應(yīng)該是兩種不同文件編碼的問(wèn)題。我是通過(guò)修改源html文件解決的問(wèn)題。至于以后如果還碰到類似問(wèn)題的話,首先看一下word文檔和html文檔是從哪個(gè)地方格式開(kāi)始變化了,找到之后再對(duì)癥下藥。如果你覺(jué)得這種解決方法沒(méi)什么技術(shù)含量的話,你可以根據(jù)內(nèi)容手動(dòng)輸出。。。哈
    ????????????????????????????????????????????????? ? 。。。。。。。。。。。學(xué)到了一些東西。。。。。。。。。。。。

    posted @ 2006-08-31 23:11 sugo 閱讀(3957) | 評(píng)論 (0)編輯 收藏

    ??????? 終于把自己的朝思?jí)粝氲腖inux裝上了,興奮,亢奮。。。 從決定,下載,分區(qū),找資料,安裝前前后后總共4天的時(shí)間呢。不過(guò)我覺(jué)得挺值得的,因?yàn)槲覍W(xué)到了很多以前很模糊的東西。可謂收獲頗豐啊
    ??????? 我是下載的安裝光盤鏡像iso文件。在清華大學(xué)ftp服務(wù)器上下載得到。同時(shí)還學(xué)到了關(guān)于md5方面的知識(shí)。一共三個(gè)iso文件,一天下載一個(gè),下載的同時(shí)找一些安裝資料和相關(guān)資料。同時(shí)分區(qū)也是一塊難啃的骨頭,好在啃下來(lái)了。它要求至少需要2個(gè)分區(qū)。一個(gè)ext2或者ext3分區(qū),還有一個(gè)內(nèi)存大小的swap分區(qū)。現(xiàn)在的電腦內(nèi)存都很大了,swap分區(qū)可以不要,但我認(rèn)為最好還是分出這個(gè)區(qū)為好。只是這個(gè)文件格式怎么得到這個(gè)問(wèn)題我可是找遍了所有關(guān)于分區(qū)的帖子。qq群,所謂的Linux高手,什么都問(wèn)了,但結(jié)果什么也沒(méi)學(xué)到。最后還是自己琢磨。其實(shí)很簡(jiǎn)單pqmagic8.0就能實(shí)現(xiàn)。格式化的時(shí)候就有格式成什么樣的文件格式這個(gè)選項(xiàng)。這些我都是在windows下實(shí)現(xiàn)的。這些準(zhǔn)備工作完成了,然后安裝就可以了。安裝步驟網(wǎng)上很多。我也不用寫了。第一次安裝建議大家完全安裝,有4.6G左右大吧。
    ??????? 安裝重點(diǎn):分區(qū),文件格式的轉(zhuǎn)換
    ??????? 安裝好了,進(jìn)入Linux界面,感覺(jué)那么純凈。可愛(ài)的小鼠標(biāo)箭頭,友好的界面。更堅(jiān)定了我要學(xué)好它的決心。在Linux下架設(shè)服務(wù)器的任務(wù),快要實(shí)現(xiàn)了。Linux, I'm on my way!:)

    posted @ 2006-01-16 00:18 sugo 閱讀(259) | 評(píng)論 (0)編輯 收藏

         Tomcat運(yùn)行Servlet,首先是classpath,我們需要把tomcat安裝目錄下面的common/lib/servlet-api.jar文件加入到其中。我假設(shè)發(fā)布路徑就是默認(rèn)的路徑,即webapps目錄,我在其下建立了一個(gè)應(yīng)用程序總目錄,取名為first。不過(guò)我們還要在conf文件夾下面的server.xml文件里配置一下,目的就是瀏覽器能定位此應(yīng)用程序所在位置。我們需要在此文件中加入一行語(yǔ)句。在我假設(shè)的例子中,就要這樣配置 。在<host ></host>之間加入<Context url="/first" docBase="first" deBug="0" reloadable="true"  />。
        在first文件夾下面建立了一個(gè)WEB-INF文件夾(注意,這個(gè)文件夾一定要大寫)。然后再在WEB-INF下面建立classes文件夾(用來(lái)放置servlet編譯后的class文件)。下面就要編寫servlet程序了。編譯通過(guò)后,把class文件放到classes文件夾下面。如果是打包的servlet文件。例如 package sg;那么你還需要建立一個(gè)sg文件夾,然后在放置你的class文件。如果是多層的包也是如此。接下來(lái)需要配置web.xml文件了。即映射你的servlet文件。我們自己建立了一個(gè)xml文件。內(nèi)容如下:
       <?xml version="1.0" encoding="ISO-8859-1"?>
       <!DOCTYPE web-app
             PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
               "  <web-app>
       <servlet>
         <servlet-name>servlet name</servlet-name>
          <servlet-class>sg.class name</servlet-class>
      </servlet>
       <servlet-mapping>
        <servlet-name>servlet name</servlet-name>
         <url-pattern>/url</url-pattern>
       </servlet-mapping>
     </web-app>
      注:servlet name 為自己隨意起的名字   sg.class name 為servlet的名字   /url為你想定義的url 可以任意
      好了,全部準(zhǔn)備好了。開(kāi)啟服務(wù)器,瀏覽器里輸入地址http://localhost:8080/first/url
    至此,大功告成。可以去喝杯咖啡了哈。

    posted @ 2005-10-15 15:55 sugo 閱讀(599) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 在线亚洲97se亚洲综合在线| 日本大片在线看黄a∨免费| 久久久久亚洲AV成人网人人网站| 激情小说亚洲图片| 日本xxwwxxww在线视频免费| 亚洲av无码一区二区三区在线播放| 免费a级毛片无码a∨蜜芽试看| 亚洲熟妇自偷自拍另欧美| 日韩精品无码区免费专区| 亚洲中文字幕久久精品蜜桃 | 亚洲女人18毛片水真多| 91热成人精品国产免费| 亚洲国产精品综合久久久| 青娱乐免费在线视频| 最新亚洲精品国偷自产在线| 午夜a级成人免费毛片| 免费看一级毛片在线观看精品视频| www国产亚洲精品久久久| 99re6在线精品免费观看| 中文字幕亚洲色图| 毛片a级毛片免费观看品善网| 青草久久精品亚洲综合专区| 亚洲片国产一区一级在线观看| 国内永久免费crm系统z在线 | 亚洲色成人WWW永久在线观看| 日本黄页网站免费| 中文字幕无线码免费人妻| 亚洲网站视频在线观看| 妞干网免费观看视频| 好湿好大好紧好爽免费视频| 老色鬼久久亚洲AV综合| 免费无遮挡无码视频网站| 久久嫩草影院免费看夜色| 亚洲第一页中文字幕| 亚洲?v女人的天堂在线观看| 免费国产午夜高清在线视频| 国产午夜亚洲精品| 亚洲中文无韩国r级电影| 日本XXX黄区免费看| aaa毛片视频免费观看| 亚洲永久在线观看|