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

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

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

    無憂無鹵

    鳥在籠中,恨關羽不能張飛;人處世上,要八戒更需悟空

    2008年3月29日

        一、編寫helloworld程序

    從helloworld開始,在JQuery庫中,$為JQuery的簡寫形式。

    <html> 
    
            <head> 
    
                <script src="../jquery-1.3.1.js" type="text/javascript"></script>     
    
                <script type="text/javascript"> 
    
                    //其中$(document).ready(function(){}),可以簡寫為$(function(){}); 
    
                    $(document).ready(function(){ //dom加載完畢后執行,類似于window.onload 
    
                            alert('helloworld !'); 
    
                    }); 
    
                </script> 
    
            </head> 
    
            <body><body> 
    
    </html> 
    
    

        二、$(document).ready與window.onload比較。

        1、執行時機,window.onload為必須等待網頁所有內容加載完畢后(包括圖片)后才能執行。

             而$(document).ready則在網頁DOM結構繪制完畢后就執行,可能內容沒有加載完畢。

        2、編寫個數,window.onload不能進行多次編寫,后面編寫的將覆蓋前面編寫的。$(document).ready可以進行多次編寫。

             每次都能夠執行。

    posted @ 2011-04-08 23:09 beyond 閱讀(896) | 評論 (0)編輯 收藏

    解決方法:
    1、修改ext-all.css,找到.x-grid3-header-offset,修改為.x-grid3-header-offset{padding-left:1px;/*width:10000px;*/width:auto;}
    2、在grid中加入下面代碼:

    復制代碼 代碼如下:

    monitorResize: true,
    doLayout: function() {
    this.setSize(Ext.get(this.getEl().dom.parentNode).getSize(true));
    Ext.grid.GridPanel.prototype.doLayout.call(this);
    }

     

    轉http://www.fengfly.com/plus/view-165078-1.html
    posted @ 2010-02-04 14:33 beyond 閱讀(387) | 評論 (0)編輯 收藏

    js 未結束的字符串常量

    今天在做JAVASCRIPT的時候,發現老是出現”未結束的字符串常量”.

    自己找了下應該是傳參數的時候,有特殊字符引起的.網上也找了下,也有好多出現這種情況.做下總結,以方便以后查閱.

    1.JAVASCRIPT引用時,使用的字符語言不一致.
    比如:<script type=”text/javascript” src=”xxx.js” charset=”UTF-8″>.xxx.js文件內部使用的是GB2312的格式,外面調用使用的是UTF-8,所以文件內部部分特殊字符因為格式不一致,出現亂碼,造成此原因.

    2.JAVASCRIPT輸出HTML字符時,前后標記不匹配.
    這種比較常見,往往在輸出字符串時,出現單引號(’)或雙引號(”)不配對,或者是在document.write()的時候,沒有正確輸出單引號(’)或雙引號(”)

    3.參數內出現HTML標記語言或包含換行符
    我今天所遇到的是這種情況.因為我所得到的數據以參數形式傳給一函數,結果該數據里包含換行符,造成了此錯誤.
    如:一般測試時只使用單行的數據,是正常的,未出現這個錯誤,.
    當測試時使用多行數據,并使用回車鏈換行,就出行了此錯誤.因為里面包含了換行符

    對于第3種情況,我的解決方法是:不直接將該數據以參數形式傳遞,而是先將其賦值在一個隱藏的文本內,需要調用的函數里只需讀取該文本里的內容即可.

    轉 http://www.javaeye.com/topic/400721
    posted @ 2010-02-04 10:27 beyond 閱讀(336) | 評論 (0)編輯 收藏
    Weblogic和hibernate3異常:ClassNotFoundException: org.hibernate.hql.ast.HqlToken
    2009年08月25日 星期二 12:37

    在做項目的時候,我用weblogic跑了一下自己的程序(開發一直在tomcat下),發現出現了這樣的問題,
    ClassNotFoundException: org.hibernate.hql.ast.HqlToken ,郁悶了半天,在tomcat下沒有任何錯誤,為何到weblogic就有問題了呢?
    在百度和google上搜了好久,換了n個關鍵詞,才搜到原因如下:
    原因:
    Hibernate3.0 采用新的基于ANTLR的HQL/SQL查詢翻譯器,在Hibernate的配置文件中,hibernate.query.factory_class屬性用來選擇查詢翻譯器。
    (1)選擇Hibernate3.0的查詢翻譯器:
    hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
    (2)選擇Hibernate2.1的查詢翻譯器
    hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
    為了使用3.0的批量更新和刪除功能,只能選擇(1)否則不能解釋批量更新的語句,當使用的時候出現了不支持條件輸入中文的情況。
    選擇(2)可以支持輸入中文,但沒法解釋批量更新語句了
    在hibernate3中需要用到antlr,然而這個包在weblogic.jar中已經包含了antrl類庫,就會產生一些類加載的錯誤,
    無法找到在war或者ear中的hibernate3.jar。
    出現這個錯誤之后,antlr會調用System.exit(),這樣weblogic就會中止服務。
    原來是沖突了,解決方法也很簡單,就是添加
    <prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory
    </prop>
    這個屬性后,就可以解決這個問題了。
    有一個人的博客上寫的也是也這個方法,不過他的org.hibernate.hql.classic.ClassicQueryTranslatorFactory寫錯了,
    害的我以為這個方法不能用了,結果看看了,是他上面寫錯了,下面的是正確的,郁悶的是我拷貝的是上面的,最總還是被我發現了。


    轉 http://hi.baidu.com/lei55022033/blog/item/b20ad52c8c9f7ae58b139940.html

    posted @ 2010-02-01 15:31 beyond 閱讀(1087) | 評論 (0)編輯 收藏

    Red Hat Enterprise 5 序列號2007年03月29日 星期四 上午 02:06作系統版本的第四次重要版本發布, Red Hat 醞釀發布 RHEL 5 已經超過了兩年, 主要變化包括 Linux 內核由

    2.6.9 升級為 2.6.18, 支持 Xen 虛擬化技術, 集群存儲等.
    RHEL5的版本主要分為 Sever 和 Desktop 兩個版本。
    具體來說,Server版本分為:
    · Red Hat Enterprise Linux Advanced Platform - 對應以前的 Red Hat Enterprise Linux AS
    · Red Hat Enterprise Linux - 對應以前的 Red Hat Enterprise Linux ES
    Desktop 版本分為:
    · Red Hat Enterprise Linux Desktop - 對應以前的Red Hat Desktop
    · Red Hat Enterprise Linux Desktop with Workstation option - 對應以前的Red Hat Enterprise

    Linux WS
    主要的功能包括:
    1. 虛擬化技術
    在各種平臺上支持虛擬化技術
    在 Red Hat Enterprise Linux Advanced Platform 支持存儲與擴展的服務器虛擬化技術
    Red Hat Network 提供各種虛擬化系統的支持
    virt-manager, libvirt/virsh管理工具
    2. 內核與性能
    基于 Linux 2.6.18 內核
    支持多核處理器
    廣泛的新硬件支持
    更新的基于 Kexec/Kdump 的 Dump 支持
    支持 Intel Network Accelerator Technology (IOAT)
    對于大型SMP系統技持的增強
    增強的管道緩存
    內核緩存接合能力用于改進IO緩存操作
    3. 安全
    SELinux 增強
    圖形化 SELinux 管理界面
    集成的目錄和安全機制
    增強的 IPESEC 提高安全與性能
    新的審計機制用于提供新的搜索、報表和實時監控的能力
    4. 網絡與互操作性
    支持 Autofs, FS-Cache 和 iSCSI
    增強的 IPv6 支持
    改進的 Microsoft 文件/打印和Active Directory集成
    5. 桌面
    更新的管理工具、應用程序和對筆記本的支持
    改進的 ACPI (一種高級的電源管理)支持,包括 Suspend to Disk
    智能卡登錄,包括 PKI/Kerberos 認證
    集成的多媒體支持
    增強的即插即用支持
    Network Manager 提供自動的有線和無線網絡配置
    基于 AIGLX/Compiz 的圖形化界面(支持淡化、透明等效果)
    6. 開發環境
    增強的開發工具,包括 System Tap 和 Frysk
    GCC4.1 和 glibc 2.5 工具鏈
    7. 存儲
    支持根設置多路 IO ( MPIO ),提高可用性
    服務器產品中包含單系統/客戶的 Red Hat Global File System 支持
    塊設備數據加密支持
    8. 管理
    安裝過程更新簡化系統配
    基于 Yum/Pup 的 Red Hat Network 更新
    Conga 集群和存儲管理

    ISO 的內容和注冊
    與產品相關套件的軟件組件包的結構與以前版本的 紅帽企業 Linux 有所不同。不同種類的媒介套件和 ISO 映像被減少到兩種:

    紅帽企業 Linux 5 服務器

    紅帽企業 Linux 5 客戶端


    ISO 映像包含大量的可選軟件包,它提供了核心分發版本外的其他功能,如:虛擬化、群集和群集存儲。關于服務器套件、客戶端套件和可選套件的更多信息,請參考 http://www.redhat.com/rhel/

    因為可選的內容也存在在相同的樹或 ISO 映像中,所以應該特別注意不要使安裝的組件和訂閱所提供的組件不匹配。如果這種情況發生了,系統存在錯誤或安全漏洞的可能性將會增加。

    為了保證安裝的組件和訂閱相匹配,紅帽企業 Linux 5 需要輸入一個 安裝號。它被用來配置安裝程序來提供正確的軟件包。安裝號碼包含在你的訂閱里。

    如果您沒有輸入安裝號碼,只有核心服務器或 Desktop 將會被安裝。其它功能可以在以后被手工安裝。關于安裝號碼的更多信息,請參考 http://www.redhat.com/apps/support/in.html

    在安裝過程中被使用的安裝號碼將被存放在 /etc/sysconfig/rhn/install-num 里。當在 紅帽網絡 注冊時,這個文件將自動被 rhn_register 引用,來決定系統應該訂閱到哪個合適的子通道。

    RHEL 5 安裝 序列號

    服務器:

    * Red Hat Enterprise Linux (Server including virtualization):
    2515dd4e215225dd

    + Red Hat Enterprise Linux Virtualization Platform:
    49af89414d147589

    客戶端:

    * Red Hat Enterprise Linux Desktop:
    660266e267419c67

    + Red Hat Enterprise Linux Desktop + Workstation Option:
    da3122afdb7edd23

    + Red Hat Enterprise Linux Desktop + Workstation + DualOS Option
    (Virtualization):
    7fcc43557e9bbc42

    + Red Hat Enterprise Linux Desktop + DualOS Option (Virtualization):
    fed67649ff918c77

    posted @ 2009-11-12 21:52 beyond 閱讀(1476) | 評論 (0)編輯 收藏

        整合ssh框架
        翻譯drools5
    posted @ 2009-06-26 18:08 beyond 閱讀(255) | 評論 (1)編輯 收藏
    1.什么是數據庫事務,以及作用?

        數據庫事務:
                     事務是由相關操作構成的一個完整的操作單元,在一個事物內,數據的修改一起提交或撤銷,如果發生故障或系統錯誤,
                     整個事物也會自動撤銷。
        優點:
              把邏輯相關的操作分成了一個組
              在數據永久改變前,可以預覽數據變化
              能過保證數據的讀一致性
    posted @ 2009-06-22 11:35 beyond 閱讀(571) | 評論 (0)編輯 收藏

    1. 介紹

    1)DOM(JAXP Crimson解析器)
            DOM是用與平臺和語言無關的方式表示XML文檔的官方W3C標準。DOM是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中尋找特定信息。分析該結構通常需要加載整個文檔和構造層次結構,然后才能做任何工作。由于它是基于信息層次的,因而DOM被認為是基于樹或基于對象的。DOM以及廣義的基于樹的處理具有幾個優點。首先,由于樹在內存中是持久的,因此可以修改它以便應用程序能對數據和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像SAX那樣是一次性的處理。DOM使用起來也要簡單得多。

    2)SAX

            SAX處理的優點非常類似于流媒體的優點。分析能夠立即開始,而不是等待所有的數據被處理。而且,由于應用程序只是在讀取數據時檢查數據,因此不需要將數據存儲在內存中。這對于大型文檔來說是個巨大的優點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX還比它的替代者DOM快許多。
       選擇DOM還是選擇SAX? 對于需要自己編寫代碼來處理XML文檔的開發人員來說,  選擇DOM還是SAX解析模型是一個非常重要的設計決策。 DOM采用建立樹形結構的方式訪問XML文檔,而SAX采用的事件模型。

      DOM解析器把XML文檔轉化為一個包含其內容的樹,并可以對樹進行遍歷。用DOM解析模型的優點是編程容易,開發人員只需要調用建樹的指令,然后利用navigation APIs訪問所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由于使用DOM解析器的時候需要處理整個XML文檔,所以對性能和內存的要求比較高,尤其是遇到很大的XML文件的時候。由于它的遍歷能力,DOM解析器常用于XML文檔需要頻繁的改變的服務中。

      SAX解析器采用了基于事件的模型,它在解析XML文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標簽已經找到。SAX對內存的要求通常會比較低,因為它讓開發人員自己來決定所要處理的tag。特別是當開發人員只需要處理文檔中所包含的部分數據時,SAX這種擴展能力得到了更好的體現。但用SAX解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數據。

    3)JDOM           http://www.jdom.org/

              JDOM的目的是成為Java特定文檔模型,它簡化與XML的交互并且比使用DOM實現更快。由于是第一個Java特定模型,JDOM一直得到大力推廣和促進。正在考慮通過“Java規范請求JSR-102”將它最終用作“Java標準擴展”。從2000年初就已經開始了JDOM開發。

      JDOM與DOM主要有兩方面不同。首先,JDOM僅使用具體類而不使用接口。這在某些方面簡化了API,但是也限制了靈活性。第二,API大量使用了Collections類,簡化了那些已經熟悉這些類的Java開發者的使用。

      JDOM文檔聲明其目的是“使用20%(或更少)的精力解決80%(或更多)Java/XML問題”(根據學習曲線假定為20%)。JDOM對于大多數Java/XML應用程序來說當然是有用的,并且大多數開發者發現API比DOM容易理解得多。JDOM還包括對程序行為的相當廣泛檢查以防止用戶做任何在XML中無意義的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情況下的錯誤)。這也許是比學習DOM或JDOM接口都更有意義的工作。

      JDOM自身不包含解析器。它通常使用SAX2解析器來解析和驗證輸入XML文檔(盡管它還可以將以前構造的DOM表示作為輸入)。它包含一些轉換器以將JDOM表示輸出成SAX2事件流、DOM模型或XML文本文檔。JDOM是在Apache許可證變體下發布的開放源碼。

    4)DOM4J http://dom4j.sourceforge.net/ 
                
            雖然DOM4J代表了完全獨立的開發結果,但最初,它是JDOM的一種智能分支。它合并了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構建文檔表示的選項,它通過DOM4J API和標準DOM接口具有并行訪問功能。從2000下半年開始,它就一直處于開發之中。

      為支持所有這些功能,DOM4J使用接口和抽象基本類方法。DOM4J大量使用了API中的Collections類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然DOM4J付出了更復雜的API的代價,但是它提供了比JDOM大得多的靈活性。

      在添加靈活性、XPath集成和對大文檔處理的目標時,DOM4J的目標與JDOM是一樣的:針對Java開發者的易用性和直觀操作。它還致力于成為比JDOM更完整的解決方案,實現在本質上處理所有Java/XML問題的目標。在完成該目標時,它比JDOM更少強調防止不正確的應用程序行為。

      DOM4J是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫XML,特別值得一提的是連Sun的JAXM也在用DOM4J。

    2.. 比較

    1)DOM4J性能最好,連Sun的JAXM也在用DOM4J。目前許多開源項目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件。如果不考慮可移植性,那就采用DOM4J.

    2)JDOM和DOM在性能測試時表現不佳,在測試10M文檔時內存溢出。在小文檔情況下還值得考慮使用DOM和JDOM。雖然JDOM的開發者已經說明他們期望在正式發行版前專注性能問題,但是從性能觀點來看,它確實沒有值得推薦之處。另外,DOM仍是一個非常好的選擇。DOM實現廣泛應用于多種編程語言。它還是許多其它與XML相關的標準的基礎,因為它正式獲得W3C推薦(與基于非標準的Java模型相對),所以在某些類型的項目中可能也需要它(如在JavaScript中使用DOM)。

    3)SAX表現較好,這要依賴于它特定的解析方式-事件驅動。一個SAX檢測即將到來的XML流,但并沒有載入到內存(當然當XML流被讀入時,會有部分文檔暫時隱藏在內存中)。

    3. 四種xml操作方式的基本使用方法

    xml文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <Result>
       <VALUE>
           <NO DATE="2005">A1</NO>
           <ADDR>GZ</ADDR>
       </VALUE>
       <VALUE>
           <NO DATE="2004">A2</NO>
           <ADDR>XG</ADDR>
      </VALUE>
    </Result>

    1)DOM

    import java.io.*;
    import java.util.*;
    import org.w3c.dom.*;
    import javax.xml.parsers.*;

    public class MyXMLReader{
     public static void main(String arge[]){

      long lasting =System.currentTimeMillis();
      try{ 
       File f=new File("data_10k.xml");
       DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
       DocumentBuilder builder=factory.newDocumentBuilder();
       Document doc = builder.parse(f);
       NodeList nl = doc.getElementsByTagName("VALUE");
       for (int i=0;i<nl.getLength();i++){
        System.out.print("車牌號碼:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
        System.out.println("車主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
       }
      }catch(Exception e){
       e.printStackTrace();
    }

    2)SAX

    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import javax.xml.parsers.*;

    public class MyXMLReader extends DefaultHandler {

     java.util.Stack tags = new java.util.Stack();
     public MyXMLReader() {
      super();
       }

     public static void main(String args[]) {
      long lasting = System.currentTimeMillis();
      try {
       SAXParserFactory sf = SAXParserFactory.newInstance();
       SAXParser sp = sf.newSAXParser();
       MyXMLReader reader = new MyXMLReader();
       sp.parse(new InputSource("data_10k.xml"), reader);
      } catch (Exception e) {
       e.printStackTrace();
      }

      System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + "毫秒");}
      public void characters(char ch[], int start, int length) throws SAXException {
      String tag = (String) tags.peek();
      if (tag.equals("NO")) { 
       System.out.print("車牌號碼:" + new String(ch, start, length));
        }
        if (tag.equals("ADDR")) {
      System.out.println("地址:" + new String(ch, start, length));
        }
       }

      public void startElement(String uri,String localName,String qName,Attributes attrs) {
      tags.push(qName);}

    3) JDOM

    import java.io.*;
    import java.util.*;
    import org.jdom.*;
    import org.jdom.input.*;

    public class MyXMLReader {

     public static void main(String arge[]) {
      long lasting = System.currentTimeMillis();
      try {
       SAXBuilder builder = new SAXBuilder(); 
       Document doc = builder.build(new File("data_10k.xml")); 
       Element foo = doc.getRootElement(); 
       List allChildren = foo.getChildren(); 
       for(int i=0;i<allChildren.size();i++) { 
        System.out.print("車牌號碼:" + ((Element)allChildren.get(i)).getChild("NO").getText());
        System.out.println("車主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
       }
      } catch (Exception e) {
       e.printStackTrace();
    }

    }

    4)DOM4J

    import java.io.*;
    import java.util.*;
    import org.dom4j.*;
    import org.dom4j.io.*;

    public class MyXMLReader {

     public static void main(String arge[]) {
      long lasting = System.currentTimeMillis();
      try {
       File f = new File("data_10k.xml");
       SAXReader reader = new SAXReader();
       Document doc = reader.read(f);
       Element root = doc.getRootElement();
       Element foo;
       for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
        foo = (Element) i.next();
        System.out.print("車牌號碼:" + foo.elementText("NO"));
        System.out.println("車主地址:" + foo.elementText("ADDR"));
       }
      } catch (Exception e) {
       e.printStackTrace();
        }
    }

    轉自:http://blog.chinaunix.net/u/25176/showart_379827.html

    posted @ 2009-06-17 11:42 beyond 閱讀(240) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2009-06-10 17:38 beyond 閱讀(850) | 評論 (0)編輯 收藏

    定制的Spring Security(Acegi)的并發會話過濾器(ConcurrentSessionFilter)的編碼過程

    上一帖述及使用ConcurrentSessionFilter限制同帳號登錄多次的方法,同帳號多次登錄限制是運行系統必需的功能,所以作者對其深入測試,在上一帖中也列舉了Spring Security的ConcurrentSessionFilter和ConcurrentSessionControllerImpl類的幾個限制。做一下簡單的總結,下面假設同時使用DigestProcessingFilter和輔助類:

    • 如果exceptionIfMaximumExceeded = true,即第二個發起的會話被禁止,如果一個用戶重新啟動瀏覽器,再次登錄失敗,因為前一個會話沒有超時,被當成了多次登錄。
    • 如果exceptionIfMaximumExceeded = false,如果兩個人使用同一個帳號登錄,將出現交互將對方踢出去的現象,實際上并沒有禁止任何人登錄,只是每次要先將另一個人踢下去。


    需求

    我想使用exceptionIfMaximumExceeded = true,同時允許同一個用戶在同一臺機器上連續登錄多次,我采取了編寫定制的ConcurrentSessionController實現類的方法。



    原理

    ConcurrentSessionController是一個接口,有兩個需要實現的方法:checkAuthenticationAllowed()和registerSuccessfulAuthentication(),Spring Security提供了一個實現類ConcurrentSessionControllerImpl,經過分析缺省的實現類,發現方法allowableSessionsExceeded()處理多次并發會話,在SecurityRegistry中保存每個會話的信息,主要是用戶帳號對應的會話ID(sessionId)和最后發起時間,在并發發生時,從SecurityRegistry中取出關于某個用戶帳號的所有會話,如果exceptionIfMaximumExceeded = false,找到最早一個會話,將其釋放掉,騰出空間給新會話,如果exceptionIfMaximumExceeded = true,將發出一個異常。

    所以,需要改進allowableSessionsExceeded(),如果exceptionIfMaximumExceeded = true讓程序判斷客戶地址,如果同一個IP,則允許登錄,將最早的會話釋放掉,如果不是同一個IP在發出異常。

    在SecurityRegistry中,用戶帳號信息存在一個對象中,名字是principal,當前是一個Object對象,實際上只是存了一個字符串,所以需要擴展principal,寫一個定制的類(我的類含有兩個屬性:username和userip),里面保存客戶IP信息。allowableSessionsExceeded()只是使用SecurityRegistry,SecurityRegistry中的內容是由registerSuccessfulAuthentication()方法寫入的,所以,在該方法中需要將原來的pricipal對象替換成定制的Principal類的對象。同時checkAuthenticationAllowed()方法也要修改,因為這個方法要查詢SecurityRegistry,查詢條件替換成定制的Principal類的對象。



    注意事項

    定制的Principal類要實現equals()和hashCode()和toString()三個方法,在equals()方法中只要username相同就表示兩個對象相同,而在hashCode()中只需要將username的hashcode計算在內,因為SecurityRegistry是以principal為關鍵字的Map容器,這兩個方法決定了對Map的查詢。toString()方法可以根據自己的需要寫,我只是將username輸出。



    測試

    將定制的ConcurrentSessionController對象編制(wire)到應用系統中,經過測試,能夠達到預想目的。



    存在的問題

    原來想省點勁,只要繼承ConcurrentSessionControllerImpl并重載上述三個方法就行了,但是不知道為什么securityRegistery屬性一直注入不了,一氣之下,寫了一個直接實現ConcurrentSessionController接口的新類。實際上也不是從頭寫,將ConcurrentSessionControllerImpl代碼改吧該吧即可,用不了幾分鐘,這就是開源的好處。



        轉自 http://www.gooseeker.com/cn/node/517
    posted @ 2009-05-08 10:33 beyond 閱讀(3313) | 評論 (0)編輯 收藏
    /*********************
     * 四舍五入到小數點后兩位
    燃料子系統有很多數據都要求是固定的格式,并要求四舍五入,一般都是number(12, 2),
    如果畫面出現數據: 3.1230032..此類可以用myRound(arg1, arg2)處理。
    例:
    var num = 3.1260032;
    var result = myRound(num, 2);    // result = 3.13
     
    若num = 1,則結果為1.00
     *********************/
    /*
     * 四舍五入到指定位數
     *
     * num 要處理的數字
     * n 小數點后幾位
     */
    function myRound(num,n){
        var   dd=1;  
        var   tempnum;  
        for(i=0;i<n;i++){  
            dd*=10;
        }  
        tempnum=num*dd;
        
        // 如果參數非數字,將值置為0
        // modified by liyj 2008/6/16 PM
        if (tempnum+""=="NaN") {
            return formatnumber(0,n);  
        }
          
        tempnum=Math.round(tempnum);
        return formatnumber(tempnum/dd,n);  
    }  
     /*
      * 格式化數字
      *
      * value  數值
      * num 位數
      */
    function formatnumber(value, num) {
        var a, b, c, i;
        a = value.toString();
        b = a.indexOf(".");
        c = a.length;
        if (num == 0) {
            if (b != -1) {
                a = a.substring(0, b);
            }
        } else {
            if (b == -1) {
                a = a + ".";
                for (i = 1; i <= num; i++) {
                    a = a + "0";
                }
            } else {
                a = a.substring(0, b + num + 1);
                for (i = c; i <= b + num; i++) {
                    a = a + "0";
                }
            }
        }
        return a;
    } 
    
    posted @ 2009-03-22 11:28 beyond 閱讀(133) | 評論 (0)編輯 收藏

    測試….

    posted @ 2009-03-22 11:17 beyond 閱讀(99) | 評論 (0)編輯 收藏
    posted @ 2009-03-22 11:12 beyond 閱讀(77) | 評論 (0)編輯 收藏
    一、%rowtype只是指明引用的記錄的類型,但不保證NOT NULL約束

    我們知道使用%type和%rowtype可以分別指定引用的字段、記錄類型,但其中有一個特別需要注意的地方:

    %type和%rowtype都不保證NOT NULL約束。例如:

    DECLARE
      my_empno emp.empno%TYPE;  --emp.empno should not be null
      ...
    BEGIN
      my_empno := NULL;  - - this works well

    以上這段代碼在emp表的empno字段不能為空的情況下依然是可以執行的。


    二、%rowtype記錄的賦值

    用%ROWTYPE作聲明的時候是不可以進行初始化賦值的,但是有兩種方法可以一次性為所有字段賦值。

    方法一:假如兩個記錄類型的聲明引用了同一數據表或游標,那么它們就可以相互賦值,如:

    DECLARE
      dept_rec1 dept
    %ROWTYPE;
      dept_rec2 dept
    %ROWTYPE;
      
    CURSOR c1 IS   SELECT * FROM dept;
      dept_rec3 c1
    %ROWTYPE;

    BEGIN
      .. . 
      dept_rec1 :
    = dept_rec2  --this works well

    但是,如果一個類型是引用的是數據表而另一個引用的是游標的話,那么,即使它們表現的內容相同,也是不能相互賦值的

    dept_rec2 := dept_rec3; - - not allowed

    因為此處的dept_rec2引用是表,而dept_rec3引用的是游標,所以即便它們查詢的內容一樣也

    方法二:我們可以使用SELECT或FETCH語句將取得的數據賦給記錄。但在表或視圖中定義的字段名稱順序要與記錄中的名稱順序相同。

    DECLARE
      dept_rec dept
    %ROWTYPE;
      ...
    BEGIN
      
    SELECT * INTO dept_rec FROM dept WHERE deptno = 30;
      ...
    END

    但是,我們不能使用賦值語句來把字段列表中的值賦給記錄。所以,下面的語法形式是不允許的:

    record_name := (value1, value2, value3, ...); -- not allowed 


     三、
    使用別名

    從游標中取出的數據,如果游標定義中含有表達式時,我們就需要使用別名才能正確地為%ROWTYPE類型記錄賦值:

    DECLARE
      
    CURSOR my_cursor IS
        
    SELECT sal + NVL(comm, 0wages, ename FROM emp;
      my_rec my_cursor
    %ROWTYPE;
    BEGIN
      
    OPEN my_cursor;
      LOOP
        
    FETCH my_cursor
          
    INTO my_rec;
        
    EXIT WHEN my_cursor%NOTFOUND;
        
    IF my_rec.wages > 2000 THEN
          
    INSERT INTO temp VALUES (NULL, my_rec.wages, my_rec.ename);
        
    END IF;
      
    END LOOP;
      
    CLOSE my_cursor;
    END;

     

    posted @ 2009-02-25 15:49 beyond 閱讀(691) | 評論 (0)編輯 收藏

    <html>
    <head>
    </head>
    <body>
    <form action="" method="post" enctype="multipart/form-data" name="form1">
    <input name="attach" type="file" onchange="javascript:ShowImg(this.value);" onKeyDown="javascript:return(false);" size="20">
    <script language="JavaScript">
    function ShowImg(src)
    {
    document.getElementById("imgDiv").innerHTML="圖片預覽:<br><img id='imgObj' onerror='javascript:GetError()' onload='javascript:GetSize()' src='file:///" + src + "'>";
    }
    function GetSize()
    {
    var width,height;
    var imgObj=document.getElementById("imgObj");
    width=imgObj.width;
    height=imgObj.height;
    document.getElementById("err_msg").innerHTML="圖片大小(寬×高):<font color=red>" + width + "×" + height + "</font>";
    if(width>164){
    imgObj.width=164;
    imgObj.height=imgObj.height/(imgObj.width/164);
    }
    }
    function GetError()
    {
    document.getElementById("err_msg").innerHTML="圖片大小(寬×高):<font color=red>NaN</font>";
    document.getElementById("imgDiv").innerHTML="";
    document.getElementById("err_msg").innerHTML="圖片文件不存在或格式錯誤!"
    }
    </script>
    <div id="imgDiv" align="center"></div>
    <div id="err_msg" align="center"></div>
    </form>
    </body>
    </html>

    ????申明:此代碼來自互聯網。

    posted @ 2008-12-02 22:05 beyond 閱讀(972) | 評論 (0)編輯 收藏

    運行
    sqlplus回車
    longon as sysdba回車
    回車
    通過上面步驟登陸后修改密碼
    alter user system identified by pwd
    posted @ 2008-11-29 22:40 beyond 閱讀(156) | 評論 (0)編輯 收藏

    Jsp頁面引入js文件注意:

    ?

    1. 引入的js文件路徑要采用絕對路徑,在forward的情況下相對路徑可能會出錯,這是由于jsp頁面最終將被便以為servlet,為class,

      這時class的路徑與原來js文件的相對路徑將有所改變。

    2. 引入的js文件不能識別標簽(如:jstl ),如果需要用標簽,可以將js文件更改為jspf文件。
    posted @ 2008-11-29 00:31 beyond 閱讀(121) | 評論 (0)編輯 收藏

    始めまして、どうぞよろしくお願いします、まず、自己紹介させていただきます。

    ????  オウセイメイ と申します、二十二歳,湖南省の出身です、今年八月に 中國石油大學に卒業しました、コンピューターの専門です。

    ????  今年三月に 自習生として、新思ソフト會社に入って、電路プロジェクトの電力チームを入って、開発をしています、

    今まで、半年となりました。なお、八月に UMLと関連のUMTP資格を取りました。

    ????  得意言語はC++、ジャーバーです、學校に、C++で、軌道交通アナログシステムを開発した、一等賞を得ました。

    ????  対日開発會社の関係ので、入社してから、日本語の勉強を始めました、勉強時間が不足なので、日本語のレベルが下手だと思いますが、

    でも日本語システム環境で 仕事をやることができるし、日本仕様書も読めます。日本語が難しいですけど、これから、

    全力を入れて、勉強していきたいと思います、ぜひ、機會があれば、日本にいって、勉強したいと思います。

    ????  どうぞよろしくお願いします。

    posted @ 2008-11-25 07:38 beyond 閱讀(257) | 評論 (0)編輯 收藏
    QueryException: ClassNotFoundException
               解決方法:在hibernate.properties上,或是在spring的conext xml中,加上一個屬性hibernate.query.factory_class,值為org.hibernate.hql.classic.ClassicQueryTranslatorFactory。

       原因:從網上獲知,weblogic.jar中已經有了一個antlr.jar的版本,導致應用中hibernate3.jar中用到的antlr.jar不能找到,導致異常。
       被這個問題纏繞了一整天,使我的OA項目毫無進展,終于解決了~~

    hibernate 查詢對象為空
        沒有主鍵導致的
        在數據庫對應的表中設置主鍵。

    posted @ 2008-11-23 15:05 beyond 閱讀(105) | 評論 (0)編輯 收藏

    Lazy 只有在session初始化

    打開狀態下才有效,如果session關閉將報proxy can't initialize錯誤

    Jdk 的代理只能對接口進行代理

    Cglib 能對類進行代理。

    一級緩存之緩存實體化對象,

    Get load iterator save都是用了一級緩存。

    一級緩存與session的生命周期是一樣的。

    二級緩存和sessionFactory的生命周期是一致的。

    posted @ 2008-11-10 01:29 beyond 閱讀(90) | 評論 (0)編輯 收藏

    測試用office2007發日志……

    posted @ 2008-11-09 01:11 beyond 閱讀(96) | 評論 (0)編輯 收藏
    前一段時間有好幾個問題,提到怎么判斷session是否過期。  
      接觸jspo已經很久了,但是還真沒有想過這個問題,當時也就沒有找到一個滿意的答案給人家。  
      當時,我提到一個方法,就是實現HttpSessionListener接口,然后在sessionDestroyed()方法中執行一些操作,表示session要過期了,因為這個方法是session.invalidate()之前監聽器調用的方法。這個判斷的方法顯然不能讓人滿意。  
      我當時問了些人,但是也沒有得到一個準確的答案。  
      正好偶然間看到,request.getSeesion(boolean)方法,一下子讓我恍然大悟。這個方法里面傳了一個boolean值,這個值如果是true,那么如果當前的request的session不可用,那么就創建新的會話,如果存在就返回當前的會話。如果參數是false,那么在request的當前會話不存在的時候就返回null。  
      這樣我們就可以很容易的聯想到這個所謂的request的當前會話是否存在和session過期的聯系,所以我們就可以“近似地”認為session不存在就是session過期了,那么我們就可以很容易地判斷session是否過期了。方法如下:  
      if(request.getSession(false)==null)  
            System.out.println("Session   has   been   invalidated!");  
      else  
            System.out.println("Session   is   active!");  
       
      可能大家注意到我上面有一個“近似地”字眼,也就是說存在特別情況。  
      這個特殊情況就是第一次請求還沒有創建會話的時候,那么用這個方法返回的仍然是null,原因我想大家應該是顯然的。  
       
      以上是個人拙見,希望大家指正。
    原文:http://topic.csdn.net/t/20050225/08/3804877.html
    posted @ 2008-07-27 22:44 beyond 閱讀(325) | 評論 (0)編輯 收藏
         摘要: <books>   <!--This is a test for dom4j, holen, 2004.9.11-->   <book show="no">        <title>Dom4j Tutorials</title> &nbs...  閱讀全文
    posted @ 2008-05-14 08:40 beyond 閱讀(444) | 評論 (0)編輯 收藏

    今天由于項目需要,需將Mysql數據庫遷移到Oracle數據庫

    準備工具

    1.連接Mysql 的jdbc 驅動 mysql-connector-java-5.0.4-bin.jar

    2.Oracle公司開發的 SQL Developer 1.2

    下面就是配置SQL Developer 1.2

    配置環境

    選擇Tools-Preferences -Database-Third Party JDBC Driver 點擊 Add Entry 添加Mysql的jdbc 驅動。

    配置Mysql 和 Oracle 的連接

    點擊Connection 右鍵選擇 New Connection 分別建立Mysql 和Oracle連接。

    建立好連接后,你就可以查看你得數據庫了。

    配置Repository

    選擇 Migration -> Repository Management -> Create Repository 創建 Repository。

    兩種遷移數據方式:

    1. Capture the source database or tables
    2. Convert the captured database or tables
    3. Generate DDL for the new Oracle schema objects
    4. Run the generated DDL script to create the new user and objects
    5. Copy any data from the source database to the new database,select Migration->Migration Data select a converted model.

    快速遷移:

    選擇你要遷移的表或數據庫,選擇Migration -> Quick Migrate

    Powered by Zoundry Raven

    posted @ 2008-04-05 09:44 beyond 閱讀(4415) | 評論 (2)編輯 收藏

    在用ssh開發web應用時,需要對生成的各個類文件進行組織,下面就對一個可行的目錄方案進行介紹:

    譬如應用中有一個用戶管理模塊,則在公共包下建立一個user包,如該公共包可以為com.simon.oa,

    在user包下包括如下子包

    1、controler包

    該包放置各種struts的action。

     

    2、dao包

    該包放置各類dao(data access object),也就是放置對數據庫訪問的實現類,在用myeclipse中的“Hibernate Reverse Engineering”進行反向操作時在某一個目錄中就會生成對應某個表的DAO,生成后可將該DAO拖到dao包中。在某些應用中將DAO作為接口,在該接口中包括所有對數據庫的操作方法,然后在dao包建立一個hibernate包,在hibernate包中放置對DAO接口的實現,譬如:UserDAO接口有一個實現類為UserDaoImpl,將該類放置到hibernate包中,實際的開發傾向于后一種方式,因為對這個DAO接口可以實現spring的IoC操作。(不知道myeclipse對此是怎么考慮的,這個問題讓我糾纏了很久,誤將DAO理解成一個能夠進行實際操作的類,而不是一個接口,以后開發要注意)

     

    3、model包

    該包中放置hibernate反向工程生成的bean和該bean對應的.hbm.xml文件。

     

    4、service包

    該包放置業務操作類,譬如用戶服務類,一般情況將該用戶操作類提取一個接口,然后在service包下生成一個impl包,在impl包中才放置用戶操作接口的實現類。該用戶接口實現類中調用DAO接口對數據庫進行操作,而調用該實現類的方法在struts的action中。

     

    5、vo包(value object)

    vo包中的中包括struts中使用的POJO及actionform等信息。

    VO:  Value Object
    DTO: Data Transfer Object
    個人理解VO和DTO是類似的東西,原則上VO和DTO只有Public Fields,主要用于進程之間數據傳遞的問題,VO和DTO不會傳遞到表示層,在業務層就會被吸收。但看到很多人在建立VO和DTO時,也含有Setter,Getter屬性和一些其它的輔助方法,這也無可厚非,我自己也不能確定這對不對。

    posted @ 2008-03-29 18:59 beyond 閱讀(2194) | 評論 (0)編輯 收藏

    導航

    <2008年3月>
    2425262728291
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    統計

    常用鏈接

    留言簿(1)

    隨筆檔案

    相冊

    搜索

    最新評論

    • 1.?re: 近期任務
    • 大哥 等著你的drools5翻譯呢 drools4把我搞死了 如果你有關于drools4的心得的話請指教 感覺自己使用的不是很好 望賜教 QQ:53816565 謝謝
    • --sunnidy
    • 2.?re: Mysql遷移到Oracle
    • 不錯,看樣子支持大多數數據庫遷移到oracle,不知道是否支持從oracle轉出?
    • --FastUnit

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 极品色天使在线婷婷天堂亚洲| 亚洲最新永久在线观看| 亚洲乱码中文字幕在线| 国产美女在线精品免费观看| 亚洲欧洲日韩国产| 黄页网站在线看免费| 亚洲人成人无码.www石榴| 日韩高清免费在线观看| 免费国产高清毛不卡片基地| 国产成人免费高清在线观看| 日本三级在线观看免费| 中文字幕亚洲图片| 国产免费一区二区视频| 91精品国产亚洲爽啪在线观看| 18女人水真多免费高清毛片| 亚洲av无码一区二区三区天堂古代| 免费在线观看视频网站| 亚洲色欲色欱wwW在线| 四虎国产精品免费视| 久久精品无码专区免费| 亚洲高清日韩精品第一区| 在线天堂免费观看.WWW| 国产产在线精品亚洲AAVV| 国产成人综合亚洲AV第一页| 污污网站18禁在线永久免费观看| 亚洲系列中文字幕| 成人永久免费福利视频网站| 一级毛片免费不卡| 亚洲国产日韩在线人成下载| 免费黄色毛片视频| a毛片免费播放全部完整| 亚洲成a人不卡在线观看| 免费大学生国产在线观看p| 麻豆精品不卡国产免费看| 亚洲av乱码一区二区三区| 亚洲国产精品毛片av不卡在线| 国产免费阿v精品视频网址| xxx毛茸茸的亚洲| 国产成人麻豆亚洲综合无码精品| 免费观看激色视频网站bd| 噜噜噜亚洲色成人网站|