2008/01/04

[ASP.Net] 在asp:Button加入Vaildation與javascript的confirm

  1. 設計 <asp:Button> 與一個需要驗證的 Control:
    <asp:Button ID="btnUpdate" 
    runat="server" 
    Text="更新" 
    CommandName="Update" 
    CausesValidation="false" 
    OnClientClick="return confirmUpdate();" 
    ValidationGroup="vgUpdate" />
    <asp:TextBox ID="txtUpdateName" runat="server" Text="HelloWorld"></asp:TextBox>
    <asp:RequiredFieldValidator ID="UpdateNameRequired" 
    runat="server" 
    ControlToValidate="txtUpdateName" 
    ToolTip="必須輸入名稱。" 
    ErrorMessage="必須輸入名稱。" 
    ValidationGroup="vgUpdate">*</asp:RequiredFieldValidator> 
    • 要將 CausesValidation 設定為 false, 以避免在 Client 端產生多餘的 validation.
    • 在 OnClientClick 中設定呼叫一個 javascript 的 function.
    • 對於要驗證的項目, 需給定一個 ValidationGroup 值 (ex: vgUpdate)

2007/09/06

[System] 用VirtualPC安裝Fedora

問題: 在 VirtualPC 中安裝 Fedora 若選擇 graphical 模式時, 畫面會整個糊掉.

解決方法: 只要在安裝時, 輸入"linux vesa_", 即可順利以 graphical 模式進行安裝.
參考網頁: http://xfreak.com/lpic/buildup/fedoracore6/nph-bbs_sys.cgi?&dsp_bbs_thread=1&sid=1171425709000

補充: fedora10 的安裝畫面跟 fedora5 不太一樣, 要用以下的指令:
vmlinuz initrd=initrd.img vga=0x32D noreplace-paravirt

2007/08/28

[System] 透過Apache的Proxy模組設定IIS的NLB

  1. http://httpd.apache.org/download.cgi 下載 Apache HTTP Server (以 2.2.4 版為例).
  2. 安裝 Apache HTTP Server.
  3. 修改 Apache2.2\conf\httpd.conf, 將以下的 # 刪除, 使其在啟動後運作.
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
    #引用Apache的Virtual Hosts設定
    Include conf/extra/httpd-vhosts.conf
  4. 編輯 Apache2.2\conf\extra\httpd-vhosts.conf, 如下:

    NameVirtualHost *
    <VirtualHost *>
     ServerName www.example.com
     ServerAlias example.com
     DocumentRoot C:\Java\Apache2.2\conf
     ProxyRequests Off
     <Proxy *>
      Order deny,allow
      Allow from all
     </Proxy>
     #Proxy的Pattern, 以下將把"/", 交由 "balancer://iiscluster/"處理
     #詳細說明可至:
    http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
     ProxyPass / balancer://iiscluster/ stickysession=MYCOOKIE nofailover=On
     ProxyPassReverse / balancer://iiscluster
     <Proxy balancer://iiscluster>
      #load balance的主機URL
      #route是load balance的worker name, 及後續要在IIS設定Session ID的參數
      #loadfactor是數字1-100的權重, 數字越大loading將越重

      BalancerMember http://192.168.1.2 route=node1 loadfactor=1
      BalancerMember http://192.168.1.3 route=node2 loadfactor=1
      #load balance的方式(byrequests, bytraffic)
      ProxySet lbmethod=byrequests
     </Proxy>
     #加入此設定, 將來可至http://...../balancer-manager/下, 監視load balance的狀態
     <Location /balancer-manager>
      SetHandler balancer-manager
      Order deny,allow
      Allow from all
     </Location>
    </VirtualHost>

  5. 設定 IIS 的 Header:
    1. 開啟 IIS 管理畫面, 在 [網站] 或其下的 [WebApplication] 點選 [內容].
    2. 在 [HTTP標頭] 頁籤中, 按下 [自訂HTTP標頭] 的 [新增] 按鈕.
    3. [自訂標頭名稱] 輸入: "Set-Cookie"
    4. [自訂標頭值] 輸入: "MYCOOKIE=iiscluster.node1; path=/;"
      * 請對照第 4 步 ProxyPass 的 stickysession=MYCOOKIE, 以及 <Proxy> 中的 route=node1, route=node2 分別設定 192.168.1.2與192.168.1.3 的 IIS.

  6. 重新啟動 IIS 與 Apache.
  7. 若要 Debug, 可在 <VirtualHost *> 中加入:
    LogLevel debug

2007/08/21

[System] 利用[IIS Reverse Proxy]制作跨IIS的WebApplication

環境說明:
  • OS: 外部與內部皆為 Windows 2003 Enterprise Server.
  • 外部Web Server: IIS6.0, WebApplication (Portal)
  • 內部Web Server: IIS6.0, WebApplication (InnerPortal)

建置步驟:

  1. http://www.saltypickle.com/Home/16 下載 ReverseProxy.
    * 我以 ReverseProxy(v1.5).zip (20051101)為例
  2. 將 ReverseProxy(v1.5).zip 解壓縮後,修改為所需的目錄名 (ex: Portal).
  3. 將該目錄搬至網站目錄下 (ex: C:\Inetpub\wwwroot).
  4. IIS 的 WebApplication 設定:
    1. 開啟 IIS 管理工具, 應可看到網站內有一個尚未成為 WebApplication 的資料夾.
    2. 在 IIS 管理工具中, 點選該資料夾 –> 滑鼠右鍵 –> 內容.
    3. 在 [目錄] 頁籤中, 按下右下方的 [建立] 按紐, 將該資料夾建立為 WebApplication.
    4. 此時, 下方的 [設定] 按鈕為 enable 狀態, 按下 [設定].
    5. 在 [對應] 頁籤中, 先記下上方 [應用程式副檔名] 中, aspx 的 [aspnet_isapi.dll] 執行檔路徑.
    6. 按下下方 [萬用字元應用程式對應] 的 [插入] 按紐, [執行檔] 欄位請輸入步驟 5 所記的 [aspnet_isapi.dll] 執行檔路徑, 並取消勾選 [確認該檔案是否存在].
    7. 步驟 4.1 - 4.6 完成後, 便可一步步按下 [確定] 按紐, 結束 IIS 的設定.
  5. 修改 Portal 的 Web.config:
    1. 至剛剛的 Protal 目錄下修改 Web.config, 將 <appSettings> 中的 BackEndSite 改為自己所需的路徑, 例如:
      <add key="BackEndSite" value="http://192.168.1.10:7777/InnerPortal" />
  6. 將 ICSharpCode.SharpZipLib.dll 組件加入 .Net 的組件快取:
    1. [系統管理工具] -> [Microsoft .NET Framework 1.1 設定] –> 展開左方 [我的電腦].
    2. 在 [組件快取] –> 滑鼠右鍵 –> [加入] –> 將 ReverseProxy(v1.5).zip 裡的 ICSharpCode.SharpZipLib.dll 加入.
  7. 功能測試:
    1. 在 Asp.Net(C#) 可透過 Request.Url 與 Server.MapPath("."), 分別得知 Request 的 Url 與本 WebApplication 的所在目錄.
    2. 若測試無誤, Request 的 Url 應顯示外部 Portal 的 Url, Server.MapPath(".") 會顯示內部 InnerPortal 的本機目錄.
若有其他網站需要此架構, 只需將解開的 ReverseProxy 資料夾改另一個名字, 重覆步驟 3 - 5, 並修改 Web.config 所要對應的網站.

2007/06/15

[Java] iText遮罩圖設計

  • 用 java.awt.image.BufferedImage 繪製不規則圖形
    //產生一個200x200的BufferedImage
    BufferedImage img = new BufferedImage(200, 200, BufferedImage.TYPE_BYTE_GRAY);
    //產生一個正三角形與倒三角形,組合成一個六芒星的形狀
    int[] aX = {100, 0, 200, 100};
    int[] aY = {0, 150, 150, 0};
    int[] bX = {100, 0, 200, 100};
    int[] bY = {200, 50, 50, 200};
    img.getGraphics().fillPolygon(aX, aY, 4);
    img.getGraphics().fillPolygon(bX, bY, 4);
    //強制將圖形以黑白兩色呈現, 這樣就可以將不規則圖形成為遮罩圖
    Image mask = Image.getInstance(img, null, true);
    //將繪製的圖形做一次Invert, 不然會變成顯示六芒星以外的圖
    mask.setInverted(true);
    mask.makeMask();
    //讀取欲顯示的圖片
    Image image = Image.getInstance("c:\\image.jpg");
    //設定該圖片的遮罩圖
    image.setImageMask(mask);
    //設定該圖片在pdf版面中的位置
    image.setAbsolutePosition(100, 100);
    //最後透過PdfContentByte的assImage將圖片加入即可