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

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

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

    posts - 25,  comments - 25,  trackbacks - 0
     
    VC操作Excel文件保存問題
    用VC對Excel文件進行寫操作后,在程序結束前需要對一些對象進行收尾工作,如調用_Workbook::Save()方法(該方法是Microsoft提供的供VC調用的對Excel文件操作的標準方法,在文件excel9.cpp或excel.cpp中定義)保存文件。
    問題就出現在這里,若選取要保存的Excel文件以前不存在則程序創建一個同名的空Excel文件,對Excel表的操作實際是對其同名副本的操作,Save()方法會觸發一個"另存為"的對話框,需要覆蓋原來同名的空Excel文件,否則寫入Excel的數據會丟失。若選取的Excel文件已經存在,則調用Save()方法不會觸發"另存為"對話框,系統會自動保存寫到Excel中的數據。
    需要說明的是,在調用Save()前,已經調用過SetAlertBeforeOverwriting(FALSE)和SetDisplayAlerts(FALSE)關掉一些警告窗口了。若調用SaveAs()方法,雖不會觸發"另存為"對話框,但會出拋出“找不到成員”的錯誤,這時保存寫好的Excel文件后并重新打開發現數據還是丟失。
    想盡所有辦法,可總無法去掉那個討厭的"另存為"對話框,請各位大蝦幫忙。多謝了!
    SaveAs()是excelapp的方法嗎。
    xlApp.ActiveWorkbook.SaveAs "C:\excel.xls" 
    xlApp.Quit
    我的沒有問題。
    如今Excel是越來越重要了,在我們自己開發的程序中不免要和Excel打交道了。利用Automation技術,我們可以在不去了解
    數據庫的情況下玩轉Excel,而且你會發現一切竟如此輕松!
        好了,咱們開始吧,我不喜歡用長篇累牘的代碼來故弄玄虛,所以下面的代碼都是切中要害的片段,總體上是個連貫的過程,
    包括啟動Excel,讀取數據,寫入數據,以及最后的關閉Excel,其中還包括了很多人感興趣的合并單元格的處理。
        特別說明以下代碼需要MFC的支持,而且工程中還要包含EXCEL2000的定義文件:EXCEL9.H,EXCEL9.CPP
    *****************************************************************************************************************
     //*****
     //變量定義
     _Application app;    
     Workbooks books;
     _Workbook book;
     Worksheets sheets;
     _Worksheet sheet;
     Range range;
     Range iCell;
     LPDISPATCH lpDisp;    
     COleVariant vResult;
     COleVariant
            covTrue((short)TRUE),
            covFalse((short)FALSE),
            covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    
     
     
     //*****
     //初始化COM的動態連接庫
     if(!AfxOleInit())  
     {
            AfxMessageBox("無法初始化COM的動態連接庫!");
            return ;
         }   
     
     
     //*****
     //創建Excel 2000服務器(啟動Excel)
     if(!app.CreateDispatch("Excel.Application")) 
     {
      AfxMessageBox("無法啟動Excel服務器!");
        return;
     }
     
     app.SetVisible(TRUE);          //使Excel可見
     app.SetUserControl(TRUE);      //允許其它用戶控制Excel
     
     //*****   
     //打開c:\\1.xls
     books.AttachDispatch(app.GetWorkbooks());
     lpDisp = books.Open("C:\\\\1.xls",      
       covOptional, covOptional, covOptional, covOptional, covOptional,
       covOptional, covOptional, covOptional, covOptional, covOptional,
       covOptional, covOptional );    
      
         
     //*****
     //得到Workbook
     book.AttachDispatch(lpDisp);
     
     
     //*****
     //得到Worksheets 
     sheets.AttachDispatch(book.GetWorksheets()); 
     
     
     //*****
     //得到當前活躍sheet
     //如果有單元格正處于編輯狀態中,此操作不能返回,會一直等待
     lpDisp=book.GetActiveSheet();
     sheet.AttachDispatch(lpDisp); 
      
     //*****
     //讀取已經使用區域的信息,包括已經使用的行數、列數、起始行、起始列
     Range usedRange;
     usedRange.AttachDispatch(sheet.GetUsedRange());
     range.AttachDispatch(usedRange.GetRows());
     long iRowNum=range.GetCount();                   //已經使用的行數
     
     range.AttachDispatch(usedRange.GetColumns());
     long iColNum=range.GetCount();                   //已經使用的列數
      
     long iStartRow=usedRange.GetRow();               //已使用區域的起始行,從1開始
     long iStartCol=usedRange.GetColumn();            //已使用區域的起始列,從1開始
      
      
     //*****
     //讀取第一個單元格的值
     range.AttachDispatch(sheet.GetCells()); 
     range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
     COleVariant vResult =range.GetValue();
     CString str;
     if(vResult.vt == VT_BSTR)       //字符串
     {
      str=vResult.bstrVal;
     }
     else if (vResult.vt==VT_R8)     //8字節的數字 
     {
      str.Format("%f",vResult.dblVal);
     }
     else if(vResult.vt==VT_DATE)    //時間格式
     {
      SYSTEMTIME st;
         VariantTimeToSystemTime(&vResult.date, &st);
     }
     else if(vResult.vt==VT_EMPTY)   //單元格空的
     {
      str="";
     }  
     
     
     //*****
     //讀取第一個單元格的對齊方式,數據類型:VT_I4
     //讀取水平對齊方式
     range.AttachDispatch(sheet.GetCells());
     iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
     vResult.lVal=0;
     vResult=iCell.GetHorizontalAlignment();
     if(vResult.lVal!=0)
     {
      switch (vResult.lVal)
      {
      case 1:      //默認
       break;
      case -4108:  //居中
       break;
      case -4131 : //靠左
       break;
      case -4152 : //靠右
       break;
      }
     
     }
      
     //垂直對齊方式
     iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
     vResult.lVal=0;
     vResult=iCell.GetVerticalAlignment();
     if(vResult.lVal!=0)
     {
      switch (vResult.lVal)
      {
      case -4160 :  //靠上
       break;
      case -4108 :  //居中
       break;
      case -4107 :  //靠下
       break;
      }
     
     }
     
      
     //*****
     //設置第一個單元格的值"HI,EXCEL!"
     range.SetItem(COleVariant(1),COleVariant(1),COleVariant("HI,EXCEL!")); 
     
     //*****
     //設置第一個單元格字體顏色:紅色
     Font font;
     range.AttachDispatch(sheet.GetCells());
     range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
     font.SetColor(COleVariant((long)0xFF0000));  
     
     
     //*****
     //合并單元格的處理
     //包括判斷第一個單元格是否為合并單元格,以及將第一個單元格進行合并
     Range unionRange;
     range.AttachDispatch(sheet.GetCells()); 
     unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
      
     vResult=unionRange.GetMergeCells();    
     if(vResult.boolVal==-1)             //是合并的單元格    
     {
      //合并單元格的行數 
      range.AttachDispatch (unionRange.GetRows ());
      long iUnionRowNum=range.GetCount (); 
       
      //合并單元格的列數
      range.AttachDispatch (unionRange.GetColumns ());
      long iUnionColumnNum=range.GetCount ();   
      
      //合并區域的起始行,列
      long iUnionStartRow=unionRange.GetRow();       //起始行,從1開始
      long iUnionStartCol=unionRange.GetColumn();    //起始列,從1開始
      
     }
     else if(vResult.boolVal==0)   
     {//不是合并的單元格}
     
     //將第一個單元格合并成2行,3列
     range.AttachDispatch(sheet.GetCells()); 
     unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
     unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)2),COleVariant((long)3)));
     unionRange.Merge(COleVariant((long)0));   //合并單元格
     
     
     //*****
     //將文件保存為2.xls 
     book.SaveAs(COleVariant("C:\\\\2.xls"),covOptional,covOptional, \\
      covOptional,covOptional,covOptional,0,\\
      covOptional,covOptional,covOptional,covOptional);  
      
      
     //*****
     //關閉所有的book,退出Excel 
     book.Close (covOptional,COleVariant(OutFilename),covOptional);
     books.Close();      
     app.Quit();
    // Excel保存
            Sheet.OleProcedure("SaveAs", FName.c_str());
    www.ccrun.com里面有說道。
    學習
    posted @ 2005-05-25 10:05 子玉 閱讀(2213) | 評論 (0)編輯 收藏

          為了能使得輸出到Excel中的數據顯示表格,可以調用事先設置好的模板,但是不靈活。我花了一個中午的時間摸索出如何設置它了。

          具體代碼如下:

     LPDISPATCH pRange;
     CString   cell;
     int   c,c1,c2;

     _variant_t  vRange1;   // 設置單元格的線;
     _variant_t  vRange2;
     _variant_t  vRange3;
     _variant_t  vRange4;

       c='A';
       c1=j/26;
       c2=j%26;
       if(c1==0)
        cell.Format("%c%d",c2+c,i+1); // i+1 :表示從第二行開始關聯
       else
        cell.Format("%c%c%d",c1+c-1,c2+c-1,i+1);

     VERIFY(pRange = m_worksheet.GetRange(COleVariant(cell)));
       m_range.AttachDispatch(pRange);
       //對齊方式
       Var.vt = VT_I2;
       Var.iVal=-4108;
       m_range.SetHorizontalAlignment(Var);
       m_range.SetVerticalAlignment(Var);
       //
       // 設置單元格的線;
       vRange1.vt =VT_I2;
       vRange1.lVal =1;   // 線的樣式:0- no line; 1-solid; 2-big dot;3-small dot;4-dash dot; 5-dash dot dot;
       vRange2.vt =VT_I2;
       vRange2.lVal =3;  // 線的粗細程度;
       vRange3.vt =VT_I2;
       vRange3.lVal =1;   // 1-black;2-white;3-red;4-green;5-blue; 6-yellow; 7-pink;8-dark blue;
       vRange4.vt = VT_UI4;
       vRange4.uintVal =RGB(0,0,0);  // 我測試后認為,沒有實際意義,只有vRange3起作用
       m_range.BorderAround(vRange1,vRange2,vRange3,vRange4);
       //
       //
       strValue=m_book.GetTextRC(i,j+2);
       strValue.TrimLeft(" ");
       strValue.TrimRight(" ");  
       if(!strValue.IsEmpty())
       {
        m_range.SetValue(COleVariant(strValue));
       }
       m_range.ReleaseDispatch();

    //

     雖然沒有什么高深的技術含量,只是為了讓后面需要的人少走點彎路。

    不當之處,還望指正。

    posted @ 2005-05-25 10:04 子玉 閱讀(839) | 評論 (1)編輯 收藏
    feijipaopao 于 2004年 08月30日 發表

    cron命令

    前面介紹的兩條命令都會在一定時間內完成一定任務,但是要注意它們都只能執行 一次。也就是說,當指定了運行命令后,系統在指定時間完成任務,一切就結束了。但是在很多時候需要不斷重復一些命令,比如:某公司每周一自動向員工報告頭 一周公司的活動情況,這時候就需要使用cron命令來完成任務了。

    實際上,cron命令是不應該手工啟動的。cron 命令在系統啟動時就由一個shell腳本自動啟動,進入后臺(所以不需要使用&符號)。一般的用戶沒有運行該命令的權限,雖然超級用戶可以手工啟 動cron,不過還是建議將其放到shell腳本中由系統自行啟動。 首先cron命令會搜索/var/spool/cron目錄,尋找以/etc/passwd文件中的用戶名命名的crontab文件,被找到的這種文件將 載入內存。例如一個用戶名為foxy的用戶,它所對應的crontab文件就應該是/var/spool/cron/foxy。也就是說,以該用戶命名的 crontab文件存放在/var/spool/cron目錄下面。cron命令還將搜索/etc/crontab文件,這個文件是用不同的格式寫成的。 cron啟動以后,它將首先檢查是否有用戶設置了crontab文件,如果沒有就轉入“休眠”狀態,釋放系統資源。所以該后臺進程占用資源極少。它每分鐘 “醒”過來一次,查看當前是否有需要運行的命令。命令執行結束后,任何輸出都將作為郵件發送給crontab的所有者,或者是/etc/crontab文 件中MAILTO環境變量中指定的用戶。 上面簡單介紹了一些cron的工作原理,但是cron命令的執行不需要用戶干涉;需要用戶修改的是crontab中要執行的命令序列,所以下面介紹 crontab命令。 crontab命令 crontab命令用于安裝、刪除或者列出用于驅動cron后臺進程的表格。也就是說,用戶把需要執行的命令序列放到crontab文件中以獲得執行。每 個用戶都可以有自己的crontab文件。下面就來看看如何創建一個crontab文件。 在/var/spool/cron下的crontab文件不可以直接創建或者直接修改。crontab文件是通過crontab命令得到的?,F在假設有個 用戶名為foxy,需要創建自己的一個crontab文件。首先可以使用任何文本編輯器建立一個新文件,然后向其中寫入需要運行的命令和要定期執行的時 間。 然后存盤退出。假設該文件為/tmp/test.cron。再后就是使用crontab命令來安裝這個文件,使之成為該用戶的crontab文件。鍵入: crontab test.cron 這樣一個crontab 文件就建立好了??梢赞D到/var/spool/cron目錄下面查看,發現多了一個foxy文件。這個文件就是所需的crontab 文件。用more命令查看該文件的內容可以發現文件頭有三行信息: #DO NOT EDIT THIS FILE -edit the master and reinstall. #(test.cron installed on Mon Feb 22 14:20:20 1999) #(cron version --$Id:crontab.c,v 2.13 1994/01/17 03:20:37 vivie Exp $) 大概意思是: #切勿編輯此文件——如果需要改變請編輯源文件然后重新安裝。 #test.cron文件安裝時間:14:20:20 02/22/1999 如果需要改變其中的命令內容時,還是需要重新編輯原來的文件,然后再使用crontab命令安裝。 可以使用crontab命令的用戶是有限制的。如果/etc/cron.allow文件存在,那么只有其中列出的用戶才能使用該命令;如果該文件不存在但 cron.deny文件存在,那么只有未列在該文件中的用戶才能使用crontab命令;如果兩個文件都不存在,那就取決于一些參數的設置,可能是只允許 超級用戶使用該命令,也可能是所有用戶都可以使用該命令。 crontab命令的語法格式如下: crontab [-u user] file crontab [-u user]{ -l|-r|-e }   第一種格式用于安裝一個新的crontab 文件,安裝來源就是file所指的文件,如果使用“-”符號作為文件名,那就意味著使用標準輸入作為安裝來源。 -u 如果使用該選項,也就是指定了是哪個具體用戶的crontab 文件將被修改。如果不指定該選項,crontab 將默認是操作者本人的crontab ,也就是執行該crontab 命令的用戶的crontab 文件將被修改。但是請注意,如果使用了su命令再使用crontab 命令很可能就會出現混亂的情況。所以如果是使用了su命令,最好使用-u選項來指定究竟是哪個用戶的crontab文件。 -l 在標準輸出上顯示當前的crontab。 -r 刪除當前的crontab文件。 -e 使用VISUAL或者EDITOR環境變量所指的編輯器編輯當前的crontab文件。當結束編輯離開時,編輯后的文件將自動安裝。 [例7] # crontab -l #列出用戶目前的crontab。 10 6 * * * date 0 */2 * * * date 0 23-7/2,8 * * * date # 在crontab文件中如何輸入需要執行的命令和時間。該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最后一個域是要被執行的命令。每 個域之間使用空格或者制表符分隔。格式如下: minute hour day-of-month month-of-year day-of-week commands 第一項是分鐘,第二項是小時,第三項是一個月的第幾天,第四項是一年的第幾個月,第五項是一周的星期幾,第六項是要執行的命令。這些項都不能為空,必須填 入。如果用戶不需要指定其中的幾項,那么可以使用*代替。因為*是統配符,可以代替任何字符,所以就可以認為是任何時間,也就是該項被忽略了。在表4-1 中給出了每項的合法范圍。   表4-1 指定時間的合法范圍 時間 合法值 minute 00-59 hour 00-23,其中00點就是晚上12點 day-of-month 01-31 month-of-year 01-12 day-of-week 0-6,其中周日是0   這樣用戶就可以往crontab 文件中寫入無限多的行以完成無限多的命令。命令域中可以寫入所有可以在命令行寫入的命令和符號,其他所有時間域都支持列舉,也就是域中可以寫入很多的時間 值,只要滿足這些時間值中的任何一個都執行命令,每兩個時間值中間使用逗號分隔。 [例8] 5,15,25,35,45,55 16,17,18 * * * command 這就是表示任意天任意月,其實就是每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。 [例9] 在每周一,三,五的下午3:00系統進入維護狀態,重新啟動系統。那么在crontab 文件中就應該寫入如下字段: 00 15 * * 1,3,5 shutdown -r +5 然后將該文件存盤為foxy.cron,再鍵入crontab foxy.cron安裝該文件。 [例10] 每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令: 10,40 * * * * innd/bbslink [例11] 每小時的1分執行用戶目錄下的bin/account這個指令: 1 * * * * bin/account [例12] 每天早晨三點二十分執行用戶目錄下如下所示的兩個指令(每個指令以;分隔): 20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st) [例13] 每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,并把結果添加在mm.txt這個文件之后(mm.txt文件位于用戶自己的目錄位置)。 12,55 3 4-9 1,4 * /bin/rm -f expire.1st>>mm.txt [例14] 我們來看一個超級用戶的crontab文件: #Run the ‘atrun’ program every minutes #This runs anything that’s due to run from ‘at’.See man ‘at’ or ‘atrun’. 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun 40 7 * * * updatedb 8,10,22,30,39,46,54,58 * * * * /bin/sync

    posted @ 2005-05-24 11:06 子玉 閱讀(425) | 評論 (0)編輯 收藏

    瀏覽器的亂碼問題解決(轉載)

    發表人:zhanxj | 發表時間: 2005年二月17日, 13:41

    ???? 好不容易搭建起Web服務平臺,卻發現瀏覽的時候出現亂碼,手動調整著實麻煩,如何解決這種不愉快的問題呢?下面的這篇文章從方方面面的情況給予了解答,確實是一篇精彩的文章!
    (1)服務器端:
    修改httpd.conf (在Redhat中放置的位置為/etc/httpd/conf/)
    查找:
    AddDefaultCharset ISO-8859-1
    改成:
    代碼:
    #AddDefaultCharset ISO-8859-1
    AddDefaultCharset off
    這種方式關掉了服務器的默認語言的發送,這樣僅憑html文件頭中設置的語言來決定網頁語言。
    很多文章都說通過修改為 AddDefaultCharset GB2312 把缺省語言改成GB2312來解決中文亂碼,確實GB2312內碼的網頁可以正常顯示了,但這并非萬全之策。因為當你的網頁內碼不是GB2312,就算你在網頁用下面的meta指定了正確的語言,如ISO8859-1,也不會解碼為ISO8859-1,因為Apache已經先你一步將GB2312指定為網頁的語言了,

    (2)養成良好的習慣,在每個網頁的的最前面加入這行:
    代碼:

      一般的中文版網頁編輯工具(例如FrontPage、Dreamweaver等)都會自動加上這行。

    (3)、如何解決中文文件名無法訪問
    代碼:
     在ie中選擇 工具 -> internet選項 -> 高級 -> 取消“總是以UTF-8發送URL”。
    UTF-8網頁空白,在網頁中加上metadata標識后,還需要手動調整編碼為 utf-8 才能正常顯示
    如果使用的是Mozilla、Mozilla Firefox、Sarafi等其他目前流行的瀏覽器,通常就不會有這樣的問題。
    在網頁的meta中指定用UTF-8:
    代碼:

    在之前,把"Content-Type"放在最前面,便可以解決這樣的問題了。
    原因:
    IE 解析網頁編碼時是 HTML 內的標識優先的,然后是 HTTP header ;而mozilla 系列的瀏覽器剛剛好相反。
    一般情況在,很多人是把排在最前面,并且在title中就出現了UTF-8中文,這樣, IE在解析時,就先遇到UTF-8,不往下解析了,因此必須把如果把meta放在UTF-8出現之前,這樣IE才能判斷這個網頁是以UTF-8編碼的。
    總之:
    無論是 PHP、JSP、ASP 或其他動態網頁的腳本語言,如果需要作編碼設定,最好放在最前面。
    使用php,也可以定義php的默認語言.
    php.ini中:
    代碼:
    default_charset = "gb2312"
    釋掉此行,做了以上修改,一樣是為了讓瀏覽器根據網頁頭中的charset來自動選擇語言,這樣就可以在同臺服務器上提供多種語言的網頁服務。

    java中文亂碼的解決

    在基于JAVA的編程中,經常會碰到漢字的處里及顯示的問題,比如一大堆亂碼或問號。
    這是因為JAVA中默認的編碼方式是UNICODE,而中國人通常使用的文件和DB都是基于GB2312或者BIG5等編碼,故會出現此問題。
    1、在網頁中輸出中文。
    JAVA在網絡傳輸中使用的編碼是"ISO-8859-1",故在輸出時需要進行轉化,如:
    String str="中文";
    str=new String(str.getBytes("GB2312"),"8859_1");
    但如果在編譯程序時,使用的編碼是“GB2312”,且在中文平臺上運行此程序,不會出現此問題,一定要注意。
    2、從參數中讀取中文
    這正好與在網頁中輸出相反如:
    str=new String(str.getBytes("8859_1"),"GB2312");
    3、操作DB中的中文問題
    一個較簡單的方法是:在“控制面扳”中,把“區域”設置為“英語(美國)”。如果還會出現亂碼,還可進行如下設置:
    取中文時:str=new String(str.getBytes("GB2312"));
    向DB中輸入中文:str=new String(str.getBytes("ISO-8859-1"));
    4、在JSP中的中文解決:
    在“控制面扳”中,把“區域”設置為“英語(美國)”.
    在JSP頁面中加入:
    如果還不行正常顯示,則還要進行下面的轉換:
    如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
    就不會出現中文問題了。


    CGI:
    找到CGI.pm,找到$self->charset('ISO-8859-1');將它改為$self->charset('GB2312');



    補充:
    如果使用php,也可以定義php的默認語言.
    php.ini中:
    ;default_charset = "gb2312"
    注意這里是注釋掉此行,做了以上修改,目的是為讓瀏覽器根據網頁頭中的charset來自動選擇語言,這樣就可以在同臺服務器上提供多種語言的網頁服務。





    徹底解決Tomcat 5.0.19中文亂碼
      一、Include的頁面亂碼
      現象:include進來的頁面出現亂碼,其它頁面正常。
      原因:Tomcat在缺省情況下使用ISO-8859-1編碼,但是在include時有時Tomcat不能正確根據外層.jsp文件的編碼解析include進來的文件,造成include進來的文件中的中文亂碼。
      解決:這兒可以有很多解決辦法,但是對于我們的中文環境,從根本上的解決辦法是將Tomcat 5.0.19的核心缺省編碼從ISO-8859-1修改為GBK
      二、提交的數據亂碼
      現象:通過表單提交的數據出現亂碼。
      原因:原因未明??赡苁荰omcat在接收到請求后,并沒有能夠根據request中的信息提前正確的編碼方式。
      解決:可以添加一個設置字符集的Filter。
    代碼:
    package filters;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.UnavailableException;

    public class SetCharacterEncodingFilter implements Filter {
     protected String encoding = null;
     protected FilterConfig filterConfig = null;
     protected boolean ignore = true;

     public void destroy() {
      this.encoding = null;
      this.filterConfig = null;
     }

    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)
    throws IOException, ServletException {

     // Conditionally select and set the character encoding to be used
     if (ignore || (request.getCharacterEncoding() == null)) {
      String encoding = selectEncoding(request);
      if (encoding != null)
       request.setCharacterEncoding(encoding);
     }

     // Pass control on to the next filter
     chain.doFilter(request, response);

    }

    public void init(FilterConfig filterConfig) throws ServletException {

     this.filterConfig = filterConfig;
     this.encoding = filterConfig.getInitParameter("encoding");
     String value = filterConfig.getInitParameter("ignore");
     if (value == null)
      this.ignore = true;
     else if (value.equalsIgnoreCase("true"))
      this.ignore = true;
     else if (value.equalsIgnoreCase("yes"))
      this.ignore = true;
     else
      this.ignore = false;
    }

    protected String selectEncoding(ServletRequest request) {
     return (this.encoding);
    }
    }
      

    配置web.xml

    代碼:
    <filter>
    ?。糵ilter-name>Set Character Encoding</filter-name>
    ?。糵ilter-class>filters.SetCharacterEncodingFilter</filter-class>
     <init-param>
      <param-name>encoding</param-name>
      <param-value>GBK</param-value>
     </init-param>
    </filter>

    <filter-mapping>
    ?。糵ilter-name>Set Character Encoding</filter-name>
    ?。紆rl-pattern>/*</url-pattern>
    </filter-mapping>





    java Servlet 中文亂碼問題
    代碼:
    import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class GetFormData extends HttpServlet
    {
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
    {
    String paramValues;
    paramValues=request.getParameter("UserName";
    response.setContentType("text/html;charset=gb2312";
    PrintWriter out=response.getWriter();
    out.println("";
    out.println("以下是收到的數據
    ";
    out.println("UserName="+paramValues);
    out.println("
    接收結束";
    out.println("";
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
    {
    doGet(request,response);
    }
    }


    只需要把
    代碼:
    paramValues=request.getParameterValues("UserName"改成下面的就可以了
    paramValues=request.getParameter("UserName";

    代碼:
    當然這句是必須的 response.setContentType("text/html;charset=gb2312"

    在jsdk2.1 tomcat及Domino5.8上的Servlet引擎運行通過了

    Weblogic Server中如何解決中文顯示亂碼問題
    《世界計算機》IT.ICXO.COM ( 日期:2004-09-29 16:07)
    --------------------------------------------------------------------------------

    由于操作系統、瀏覽器、數據庫、JVM采用的字符集都不一樣,基于Weblogic Server開發的應用經常出現中文顯示亂碼問題,其實在Weblogic Server上運行的WEB應用有很多與字符集有關的設置,下面做一個總結,為了正確處理中文,最好把這些設置都設上。

    1. 在JSP文件頭加入
    代碼:
    <%@ page contentType=text/html; charset=GBK %>
    指定該JSP采用的字符集。
    2.在Weblogic.xml文件的中加入:
    引用:
    encoding
    GBK
    指定JSP文件中采用的字符集,在JSP文件中的<%@ page contentType=text/html; charset=GBK %>會覆蓋該設置
    3.在Weblogic.xml文件的中加入
    代碼:
    compilerSupportsEncoding
    true
    如果為TRUE,指定在編譯JSP文件時,采用在JSP文件中定義的
    <%@ page contentType=text/html; charset=GBK %>或中定義的encoding參數中定義的字符集進行編碼,如果為FALSE,則采用JVM中默認指定的字符集進行編碼。
    4. Weblogic Server需要把HTTP request(GET 和POST)中的數據從它的原始編碼轉化為Unicode,以便Java servlet API進行處理,為了做這種轉換,Weblogic Server需要知道HPPT request中的數據的編碼方式。這可以通過在Weblogic.xml的中設置.
    代碼:
    〈INPUT-charset>
    /
    GBK
    5.從ORACLE數據庫中檢索出來的中文顯示不正確時,在這種情況下,如果數據庫使用的是中文字符集,并使用的是Type 2 JDBC Driver時,可加入Weblogic.codeset=GBK的屬性來解決這個問題。代碼如下:
    代碼:
    java.util.Properties props = new java.util.Properties();
    props.put(Weblogic.codeset, GBK);
    props.put(user, scott);
    props.put(password, tiger);
    String connectUrl = jdbc:Weblogic:oracle;
    Driver myDriver = (Driver)
    Class.forName(Weblogic.jdbc.oci.Driver).newInstance();
    Connection conn =
    myDriver.connect(connectUrl, props);
    6. 如果是采用WTC調用Tuxedo中的服務,在JSP頁面中無法正確顯示中文,必須使安裝Tuxedo的服務器上的NLS_LANG環境變量與數據庫中的字符集的設置一樣。如后臺Oracle數據庫中的字符集設置為 SIMPLIFIED CHINESE_CHINA.ZHS16GBK,那么Tuxedo應用服務器上的NLS_LANG環境變量應設置為:
    代碼:
    export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

    posted @ 2005-05-13 11:22 子玉 閱讀(1851) | 評論 (0)編輯 收藏
    在Windows下建立Java基本環境

    現在Java語言越來越流行,隨便看一下招聘廣告就會發現,會Java幾乎已經是招聘程序員的基本要求了。很多朋友都問我“學習Java難不難?”我的回答是:不難。但是很多朋友卻感覺學習Java比學習VB、Delphi要困難,這個我感覺就是仁者見仁,智者見智的問題,這個話題要是爭論起來可能就是一個無休止的爭論了,我認為可能是初學者有一些簡單的問題沒有搞清楚,所以造成了學習的困難,我希望通過我的小文能夠幫助一些正在入門的朋友。
    首先,如何得到java環境?
    http://java.sun.com/j2ee/1.4/download.html#sdk可以下載最新的java JDK。Sun公司對于只是為了學習用的java采取的是免費的制度,有了這個東東,我們完全沒有必要去使用昂貴的JBuilder。
    二、什么是JDK?
    JDK是Java develop kit的縮寫,它是早期Java的開發包名稱,一直延用至今!在1998年jdk發表1.2版的時候,Sun公司使用了新名稱Java2 platform來稱呼Java譯成中文就是“Java平臺”,修改后的jdk稱為J2sdk即Java2(platform)software Develping kit,并分為標準版 (Standard Edition)又稱j2se,企業版 (Enterprise Edition)又稱j2ee,微型版(Micor Edition)又稱j2me.它們有不同的用途,不過最基本的開發包還是j2se。
    三、都有哪些版本?
    Java誕生以將近有十個年頭,不知道你只不知道,它每發布一個版本都有其自己特有的名字,并且有一定的規律,是不是很有趣呢?
    已發行的版本:
    版本號 名稱 中文名 發布日期
    JDK 1.1.4 Sparkler 寶石 1997-09-12
    JDK 1.1.5 Pumpkin 南瓜 1997-12-13
    JDK 1.1.6 Abigail 阿比蓋爾--女子名 1998-04-24
    JDK 1.1.7 Brutus 布魯圖--古羅馬政治家和將軍 1998-09-28
    JDK 1.1.8 Chelsea 切爾西--城市名 1999-04-08
    J2SE 1.2 Playground 運動場 1998-12-04
    J2SE 1.2.1 none 無 1999-03-30
    J2SE 1.2.2 Cricket 蟋蟀 1999-07-08
    J2SE 1.3 Kestrel 美洲紅隼 2000-05-08
    J2SE 1.3.1 Ladybird 瓢蟲 2001-05-17
    J2SE 1.4.0 Merlin 灰背隼 2002-02-13
    J2SE 1.4.1 grasshopper 蚱蜢 2002-09-16
    J2SE 1.4.2 Mantis 螳螂 2003-06-26
    將來發行的版本:
    J2SE 5.0 (1.5.0) Tiger 老虎 已發布了Beta版本
    J2SE 5.1 (1.5.1) Dragonfly 蜻蜓 未發布
    J2SE 6.0 (1.6.0) Mustang 野馬 未發布
    從JDK1.2.2開始,主要版本(如1.3,1.4,5.0)都是以鳥類或哺乳動物來命名的.而它們的bug修正版本(如1.2.2,1.3.1,1.4.2)都是以昆蟲命名的。
    四、安裝與環境設置
    從sun下載的jdk是一個可執行文件,直接執行即可。在控制面板里面還會出現一個java plug-in ,這個是為了設置java環境的,一般不需要特殊設置,如果你的應用程序對內存有特殊要求可以在高級-〉Java Runtime參數里面進行設置。例如:java -Xms256m -Xmx200m application 。
    下面設置path路徑,在Win98下,autoexce.bat中加入path=%path%;c:\j2sdk1.4.2_04\bin ;Win2000(XP)下則控制面板->系統->高級->環境變量->系統變量,雙擊Path,在后面加上c:\j2sdk1.4.2_04\bin。
    設置lib路徑,在Win98下,autoexce.bat中加入CLASSPATH=.;C:\j2sdk1.4.2_04\lib ; Win2000(XP)下則控制面板->系統->高級->環境變量->系統變量,點擊窗下面的“新建”,變量名填入“CLASSPATH”,變量值填入“.;C:\j2sdk1.4.2_04\lib”。
    通過上面的設置,我們就有了在Windows下的java基礎環境了。我這次介紹的只是在Windows下面的設置,Linux下面的設置也是大同小異,有興趣的朋友可以去讀一下這方面的文章。
    posted @ 2005-05-13 11:09 子玉 閱讀(474) | 評論 (0)編輯 收藏
    僅列出標題
    共3頁: 上一頁 1 2 3 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(7)

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲熟伦熟女新五十路熟妇| 在线观看国产情趣免费视频 | 日韩免费高清播放器| 国产在线观看免费视频播放器| 亚洲国产成人手机在线观看| 日本媚薬痉挛在线观看免费| 亚洲精品第一国产综合亚AV| 日韩免费无砖专区2020狼| 亚洲欧美日韩国产成人| 日韩激情无码免费毛片| 免费看黄福利app导航看一下黄色录像| 国产成人免费网站在线观看| 国产午夜亚洲精品不卡| av无码东京热亚洲男人的天堂| 日本一区二区三区在线视频观看免费 | eeuss免费影院| 亚洲国产精品国自产拍AV| 日韩精品人妻系列无码专区免费| 亚洲色四在线视频观看| 在线观看无码AV网站永久免费| 亚洲高清有码中文字| 免费人成在线观看网站视频| a高清免费毛片久久| 无码欧精品亚洲日韩一区| 1区2区3区产品乱码免费| 亚洲av永久综合在线观看尤物| 国产精品免费视频播放器| EEUSS影院WWW在线观看免费 | 亚洲熟妇无码乱子AV电影| 污污网站免费观看| 亚洲色大成网站www永久男同 | 成人爱做日本视频免费| 国产免费牲交视频免费播放| 亚洲国产精品一区二区久久| 国产片AV片永久免费观看| 青青青视频免费观看| 亚洲综合在线观看视频| 国产精品免费看久久久无码| 免费91最新地址永久入口| 国产成人亚洲综合网站不卡| 亚洲精品无码久久久久AV麻豆|