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

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

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

    隨筆-26  評論-111  文章-19  trackbacks-0
      2006年2月20日
    在Window下啟動Hadoop-0.21.0版本時,會出現下面這樣的錯誤提示:

     1 java.lang.NoClassDefFoundError: org/apache/hadoop/util/PlatformName
     2 Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.util.PlatformName
     3 
     4         at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
     5         at java.security.AccessController.doPrivileged(Native Method)
     6         at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
     7         at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
     8         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
     9         at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    10 Could not find the main class: org.apache.hadoop.util.PlatformName.  Program wil
    11 l exit.

    經過不斷的查找原因和嘗試,終于有了解決這個錯誤的辦法,只需要將${HADOOP_HOME}/bin/hadoop-config.sh文件中的第190行的一下的內容

    JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -"s/ /_/g"`


    修改成以下的內容即可

    JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m -classpath ${HADOOP_COMMON_HOME}/hadoop-common-0.21.0.jar org.apache.hadoop.util.PlatformName | sed -"s/ /_/g"`


    posted @ 2010-09-29 17:03 snoics 閱讀(12400) | 評論 (7)編輯 收藏
        下載地址:http://code.google.com/p/snoics-retrieval/

        版本更新說明

    V1.01

                    1、提高創建索引的效率

             2、通過對象池管理IndexWriterIndexReader對象

             3、修正若干BUG

    V1.0

             初始版本



    基于Lucene的全文檢索框架,提供快速方便的索引創建及查詢方式,并提供擴展功能對框架進行擴展。

        項目地址:http://code.google.com/p/snoics-retrieval/

        

       環境要求

    Java1.5+

    Lucene 3.0+



    posted @ 2010-09-28 16:33 snoics 閱讀(2399) | 評論 (1)編輯 收藏


    做了一些小的修改和調整

    基于Lucene的全文檢索框架,提供快速方便的索引創建及查詢方式,并提供擴展功能對框架進行擴展。

        項目地址:http://code.google.com/p/snoics-retrieval/

        

    環境要求

    Java1.5+

    Lucene 3.0+

    posted @ 2010-08-18 15:00 snoics 閱讀(2084) | 評論 (0)編輯 收藏
         摘要:        對四則運算表達式字符串進行解析后計算出結果,可以使用逆波蘭表達式進行處理。        首先說明一下什是逆波蘭表達式:         逆波蘭表達式又叫做后綴表達...  閱讀全文
    posted @ 2010-07-29 17:44 snoics 閱讀(3399) | 評論 (2)編輯 收藏
         摘要:         基于自己的興趣,利用業務時間在Lucene基礎上做的一個搜索框架,請大家多多指教。 一、        介紹 基于Lucene的全文檢索框架,提供快速方便的索引創建及查詢方式,并提供擴展功能對框架進行擴展。  &nbs...  閱讀全文
    posted @ 2010-07-26 08:06 snoics 閱讀(2759) | 評論 (0)編輯 收藏
        Myeclipse 7 的插件安裝方式與原先的方式完全不一樣了,下面以JBossTools-2.1.2.GA插件安裝為例進行說明。

        假設
                Myeclipse 7的安裝路徑為:C:\Genuitec
                JBossTools-2.1.2.GA插件的路徑為:  C:\eclipse-plugins\plugins\JBossTools-2.1.2.GA-ALL-win32

        將下面這段代碼編譯后執行:

        
     1package test;
     2
     3import java.io.File;
     4import java.util.ArrayList;
     5import java.util.List;
     6
     7
     8/**
     9 * Descript: 
    10 *
    11 *
    12 */

    13
    14public class CreatePluginsConfig {
    15    private String path;
    16    
    17    public CreatePluginsConfig(String path){
    18        this.path=path;
    19    }

    20    
    21    public void print(){
    22        List list=getFileList(path);
    23        if(list==null){
    24            return;
    25        }

    26        
    27        int length=list.size();
    28        for(int i=0;i<length;i++){
    29            String result="";
    30            String thePath=getFormatPath(getString(list.get(i)));
    31            File file=new File(thePath);
    32            if(file.isDirectory()){
    33                String fileName=file.getName();
    34                if(fileName.indexOf("_")<0){
    35                    continue;
    36                }

    37                String[] filenames=fileName.split("_");
    38                String filename1=filenames[0];
    39                String filename2=filenames[1];
    40                result=filename1+","+filename2+",file:/"+path+"\\"+fileName+"\\,4,false";
    41                System.out.println(result);
    42            }
    else if(file.isFile()){
    43                String fileName=file.getName();
    44                if(fileName.indexOf("_")<0){
    45                    continue;
    46                }

    47                String[] filenames=fileName.split("_");
    48                String filename1=filenames[0];
    49                String filename2=filenames[1].substring(0, filenames[1].lastIndexOf("."));
    50                result=filename1+","+filename2+",file:/"+path+"\\"+fileName+",4,false";
    51                System.out.println(result);
    52            }

    53            
    54        }

    55    }

    56    
    57    public List getFileList(String path){
    58        path=getFormatPath(path);
    59        path=path+"/";
    60        File filePath=new File(path);
    61        if(!filePath.isDirectory()){
    62            return null;
    63        }

    64        String[] filelist=filePath.list();
    65        List filelistFilter=new ArrayList();
    66
    67        for(int i=0;i<filelist.length;i++){
    68            String tempfilename=getFormatPath(path+filelist[i]);
    69            filelistFilter.add(tempfilename);
    70        }

    71        return filelistFilter;
    72    }

    73    
    74    public String getString(Object object){
    75        if(object==null){
    76            return "";
    77        }

    78        return String.valueOf(object);
    79    }

    80    
    81    public String getFormatPath(String path) {
    82        path = path.replaceAll("\\\\""/");
    83        path = path.replaceAll("//""/");
    84        return path;
    85    }

    86    
    87    public static void main(String[] args){
    88        new CreatePluginsConfig("C:\\eclipse-plugins\\plugins\\JBossTools-2.1.2.GA-ALL-win32\\eclipse\\plugins").print();
    89    }

    90}
        
        執行完之后,將控制臺中打印出的執行結果,直接復制到下面這個文件中:

        C:\Genuitec\MyEclipse 7.0\configuration\org.eclipse.equinox.simpleconfigurator\bundles.info

        然后用 -clean 命令重新啟動Myeclipse即了完成插件的安裝。
        
    posted @ 2008-12-15 13:41 snoics 閱讀(8469) | 評論 (13)編輯 收藏

            “不要重新發明輪子!!!”

            乍聽之下,這一句話似乎是很有道理。確實在很多情況下,這句話是很有道理。可是殊不知在這一句冠冕堂皇的理由下,有多少的創意、多少的激情被抹殺了?

            在很多情況下,有些中國的程序員只要自己想做一些有創造性的工作,確總是被上級或其他的某些同行嘲笑“你要做的這個東西已經有現成的了,有必要再花時間去做嗎?你能做的比別人做出來的東西更好嗎?你這是在重新發明輪子,而且是不好的輪子。”

            結果,一個接著一個的萌芽被‘不要重新發明輪子’這個古訓扼殺了。

            想起來真是覺得很悲哀也很無奈,中國的程序員永遠只能使用外國人的技術,甚至其中有不少都是已經快要過時了才開始在中國普及開。一個接著一個的流行框架在國外的人手中產生出來,為什么他們就可以重新發明輪子,而我們就不行呢?死守古訓導致的唯一的結果就是無法進步,永遠只能使用別人的東西,最多就是羅列了一堆會使用的框架,真正的技術都是掌握在別人的手里。

             有一次面試,簡歷上列出了會使用:JSF,SPRING,HIBERNATE(還有不少其他的,具體的記不太清了),而且已經參與開發過了兩個WEB類型的項目,并且已經通過了SCJP認證。結果確連幾種List的區別,HashTable和HashMap的區別都分不清,設計模式方面更是慘不忍睹,甚至更不可思議的是連使用HTML語法畫出一個稍顯復雜的表格都辦不到。回答是:因為都是使用框架和框架提供的標簽,所以不需要接觸這些……

            還是那句話:有時候是該反省反省,除了框架,自己還剩下什么?



    posted @ 2008-04-24 12:52 snoics 閱讀(1818) | 評論 (2)編輯 收藏
         摘要:           數據分頁顯示是一項挺煩人的工作,涉及到數據來源,數據生成,數據顯示這幾個方面。數據有可能是從任意地方以任意方式獲取到的,而且獲取到的數據又有可能是經過了任意的方式處理之后,再以任意的方式顯示給最終用戶。         這...  閱讀全文
    posted @ 2008-03-25 11:39 snoics 閱讀(2949) | 評論 (3)編輯 收藏
    IE有時會在打開一些頁面時出現

    此對話框出現錯誤。

    錯誤:53
    存儲空間不足,無法完成此操作


    的錯誤提示框,導致頁面最終無法打開


    經過很長時間,終于發現在IE7中解決這個問題的解決方法

    在IE7中進行如下操作:

    Tools-->Internet Options-->Programs-->Advanced-->Reset-->Reset

    這樣講IE7中的各項配置,包括插件全部都恢復到IE7剛安裝完時的最初始化的狀態,之前的那個錯誤也解決了。



    posted @ 2008-03-24 20:38 snoics 閱讀(6119) | 評論 (5)編輯 收藏
            迷惑了一段時間,現在終于想通了,還是繼續以前的執著,繼續朝以前的那個目標不斷努力吧。差點就放棄了,不過還是終于還是又回來了。

            一定要,也一定會變得更強,對自己有信心    ^_^

    posted @ 2007-11-25 18:51 snoics 閱讀(1083) | 評論 (2)編輯 收藏
    ????
    ?????????? 最近因為工作太忙的原因,一直沒有時間來更新,現在放出2.1的版本(包含最新的源代碼)。

    ??????? 下載地址:
    ?????????????????????????snoics-reptile2.1.part1.rar
    ?????????????????????????snoics-reptile2.1.part2.rar
    ?????????????????????????snoics-reptile2.1.part3.rar
    ?????????????????????????snoics-reptile2.1.part4.rar

    ????????? (大家有什么意見可以在這里提出,只要有時間,我會盡量更新,有什么建議可以在blog里面提出,或者加我的MSN一起討論。? ^_^ )

    版本歷史

    2.1:

    1、不用再配置snoics-configpath.xml中的路徑。
    2、定時自動保存Cache
    3、修改了一些Bug
    2.0:

    核心代碼全部重寫,增加了擴展性,通過擴展之后,基本上能實現對整個網站完整的解析

    1.0:

    實現了整站抓取的基本的功能,不能解析特殊的URL,對javascript無法辨認
    posted @ 2006-10-27 21:05 snoics 閱讀(4823) | 評論 (21)編輯 收藏
    發現貓撲的電臺不錯,把它作成遨游的插件了,放上來與大家分享。

    下載以后把文件解壓到遨游的插件目錄下,就會在側邊攔出現MOP的電臺,用起來很方便。


    http://www.tkk7.com/Files/snoics/MOP.rar
    posted @ 2006-09-06 19:28 snoics 閱讀(1303) | 評論 (0)編輯 收藏

    ??? 有些人說不知道snoics-reptile中的snoics-systemconfig.xml不知道怎么配置,這里就給出一個CSDN中Java文檔中心的抓取配置的抓取配置。

    ???? 在抓取完了之后往Apache的httpd.conf中加入
    Listen 10001
    <VirtualHost *:10001>
    ??? DocumentRoot D:\\temp\\reptile\\website
    </VirtualHost>
    ???? 這段配置。


    ???? 最后刪除抓取下來的文件夾中的D:\temp\reptile\website\author\index.html這個文件。不知道為什么文檔中心的這個URL是一個空的頁面http://dev.csdn.net/author? ,把這個URL的相對應的抓取下的文件刪除就可以正常使用了

    ???? 在抓取的過程中,有些圖片文件可能會出現錯誤,不過不影響使用,因為這些圖片的路徑本身大概就有些問題。


    ????? 附件-配置文件:http://www.tkk7.com/Files/snoics/snoics-systemconfig.rar

    posted @ 2006-08-19 14:30 snoics 閱讀(1562) | 評論 (0)編輯 收藏
    源代碼發布

    snoics-reptile?網頁爬蟲2.0?
    作者: 施偉
    EMail: snoics@hotmail.com
    主頁: http://www.tkk7.com/snoics


    FAQ


    1、snoics-reptile是什么?

    ????是用純Java開發的,用來進行網站鏡像抓取的工具,可以使用配制文件中提供的URL入口,
    把這個網站所有的能用瀏覽器通過GET的方式獲取到的資源全部抓取到本地,包括網頁和各
    種類型的文件,如:圖片、flash、mp3、zip、rar、exe等文件。可以將整個網站完整地下傳至
    硬盤內,并能保持原有的網站結構精確不變。只需要把抓取下來的網站放到web服務器
    (如:Apache)中,就可以實現完整的網站鏡像。

    2、現在已經有了其他的類似的軟件,為什么還要開發snoics-reptile?

    ????因為有些在抓取的過程中經常會出現錯誤的文件,而且對很多使用
    javascript控制的URL沒有辦法正確的解析,而snoics-reptile通過對外提供
    接口和配置文件的形式,對特殊的URL,可以通過自由的擴展對外提
    供的接口,并通過配置文件注入的方式,基本上能實現對所有的網頁都
    正確的解析和抓取。

    3、如何使用?

    ????a、配置 bin\snoics-configpath.xml 文件

    ????????將配置文件中的path節點的值改為conf文件夾在系統中的絕對路徑,
    ????????如: c:\snoics-reptile\conf

    ????b、配置 conf\snoics-systemconfig.xml 文件

    ????????其中parameters節點中的配置為對需要抓取的網站的參數的配置,

    ????????以下是各個參數的說明:

    ????????1、websitename:

    ????????站點的名稱(不能為空,由字母和數字組成)

    ????????2、charsetName:

    ????????該站點使用的字符集類型

    ????????3、website:

    ????????將被抓取的站點的域名

    ????????4、startpage:

    ????????抓取的起始頁面

    ????????5、url:

    ????????該站點中將被抓取的部分(如果留空則為整個站點,可以有多個URL,
    每個URL之間使用";"隔開)

    ????????6、remoteurlflag:

    ????????代表遠程URL的標志,沒有特殊情況請不要修改此處,使用默認值
    (多個之間使用";"隔開)

    ????????7、forbidurl:

    ????????該站點中不被抓取的部分(多個之間使用";"隔開)

    ????????8、cachefile:

    ????????該站點使用的緩存文件,如果緩存文件不存在則自動創建一個新的,
    如果已經存在,則會載入文件中保存的信息

    ????????9、filerootpath:

    ????????抓取下的文件的保存路徑(必須是系統中的絕對路徑)

    ????????10、indexpage:

    ????????將被保存成index.html文件名的URL類型(多個之間使用";"隔開)

    ????????11、filenamelength:

    ????????頁面保存到本地時,隨機生成的文件名的長度

    ????????12、cacheunitsize:

    ????????一個cache單元的大小

    ????????13、reptile-downloadfiletype:

    ????????將被抓取到本地的文件類型(多個之間使用";"隔開)

    ????????14、reptile-undownloadfiletype:

    ????????頁面被保存到本地時,該種類型的文件的URL將被改成遠程的URL地址
    ,如果這種類型出現在reptile-downloadfiletype中時,則文件將被抓取到本地,
    而URL也將改成本地的URL(多個之間使用";"隔開)

    ????c、在參數配置好之后,執行bin/run.bat文件

    4、如何擴展接口?

    ????擴展接口使用的配置文件是:conf/snoics-reptile-urlregex.xml

    ????首先加入一段如下的配置
    ????<bean id="ahrefRegexUrl" class="com.snoics.reptile.regex.url.impl.UrlRegex" singleton="false">
    ????????<property name="regexUrl">
    ????????????<!-- 提取可能包含URL的字符串 -->
    ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?[^<>]*["'\s][^<>]*>]]></value>
    ????????</property>
    ????????<property name="replaceRegexUrl">
    ????????????<!-- 替換可能包含URL的字符串 -->
    ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?reptile-replace-string["'\s][^<>]*>]]></value>
    ????????</property>
    ????????<property name="getRegexUrl">
    ????????????<!-- 提取最終URL -->
    ????????????<ref bean="ahrefGetRegexUrl"/>
    ????????</property>
    ????</bean>
    ????

    ????其中ahrefGetRegexUrl是實現了com.snoics.reptile.regex.url.IGetUrlRegex接口的類,用來從可能包含了URL的字符串里面提取其中包含的URL


    ??? 其次加入如下的配置:

    ???? <bean id="ahrefGetRegexUrl" class="com.snoics.reptile.regex.url.impl.AhrefGetRegexUrl" singleton="false">
    ???????? <property name="regexString">
    ????????????? <!-- 提取最終URL -->
    ?????????????? <value><![CDATA[href\s*=\s*["']?[^\s"]+["'\s]\s*]]></value>
    ???????? </property>
    ???????? <property name="unIncludeRegexString">
    ??????????????? <!--
    ???????????????????? 排除不需要的類型
    ???????????????????? 多個正則表達式之間使用';'隔開
    ???????????????? ?-->
    ??????????????? ?<value><![CDATA[javascript\s?:\s?;mailto\s?:\s?;^#$;]]></value>
    ?????????? </property>
    ????? </bean>


    ????最后,在如下的配置中,加入剛才配置好的部分

    ????<bean id="urlRegexMap" class="com.snoics.reptile.regex.url.impl.UrlRegexMap">
    ????????<property name="ulrRegexMap">
    ????????????<map>
    ????????????????<!-- 名稱 -->
    ????????????????<entry key="ahref">
    ????????????????????<!-- 解析URL使用的類 -->
    ????????????????????<ref bean="ahrefRegexUrl"/>
    ????????????????</entry>
    ????????????????<entry key="src">
    ????????????????????<ref bean="srcRegexUrl"/>
    ????????????????</entry>
    ????????????</map>
    ????????</property>
    ????</bean>


    5、版本歷史

    2.0:

    核心代碼全部重寫,增加了擴展性,通過擴展之后,基本上能實現對整個網站完整的解析

    1.0:

    實現了整站抓取的基本的功能,不能解析特殊的URL,對javascript無法辨認

    源代碼下載地址:

    snoics-reptile2.0-src.part1.rar
    snoics-reptile2.0-src.part2.rar
    snoics-reptile2.0-src.part3.rar
    snoics-reptile2.0-src.part4.rar
    posted @ 2006-06-03 10:53 snoics 閱讀(4524) | 評論 (13)編輯 收藏
    snoics-reptile?網頁爬蟲2.0

    作者: 施偉
    EMail: snoics@hotmail.com
    主頁: http://www.tkk7.com/snoics


    FAQ


    1、snoics-reptile是什么?

    ????是用純Java開發的,用來進行網站鏡像抓取的工具,可以使用
    配制文件中提供的URL入口,把這個網站所有的能用瀏覽器通過
    GET的方式獲取到的資源全部抓取到本地,包括網頁和各種類型
    的文件,如:圖片、flash、mp3、zip、rar、exe等文件。可以將整
    個網站完整地下傳至硬盤內,并能保持原有的網站結構精確不變。
    只需要把抓取下來的網站放到web服務器(如:Apache)中,就可以
    實現完整的網站鏡像。

    2、現在已經有了其他的類似的軟件,為什么還要開發snoics-reptile?

    ????因為有些在抓取的過程中經常會出現錯誤的文件,而且對很多使用
    javascript控制的URL沒有辦法正確的解析,而snoics-reptile通過對外提供
    接口和配置文件的形式,對特殊的URL,可以通過自由的擴展對外提供
    的接口,并通過配置文件注入的方式,基本上能實現對所有的網頁都
    正確的解析和抓取。

    3、如何使用?

    ????a、配置 bin\snoics-configpath.xml 文件

    ????????將配置文件中的path節點的值改為conf文件夾在系統中的絕對路徑,
    ????????如: c:\snoics-reptile\conf

    ????b、配置 conf\snoics-systemconfig.xml 文件

    ????????其中parameters節點中的配置為對需要抓取的網站的參數的配置,

    ????????以下是各個參數的說明:

    ????????1、websitename:

    ????????站點的名稱(不能為空,由字母和數字組成)

    ????????2、charsetName:

    ????????該站點使用的字符集類型

    ????????3、website:

    ????????將被抓取的站點的域名

    ????????4、startpage:

    ????????抓取的起始頁面

    ????????5、url:

    ????????該站點中將被抓取的部分(如果留空則為整個站點,可以有多個URL,
    ???????? 每個URL之間使用";"隔開)

    ????????6、remoteurlflag:

    ????????代表遠程URL的標志,沒有特殊情況請不要修改此處,使用默認值
    (多個之間使用";"隔開)

    ????????7、forbidurl:

    ????????該站點中不被抓取的部分(多個之間使用";"隔開)

    ????????8、cachefile:

    ????????該站點使用的緩存文件,如果緩存文件不存在則自動創建一個新的,
    如果已經存在,則會載入文件中保存的信息

    ????????9、filerootpath:

    ????????抓取下的文件的保存路徑(必須是系統中的絕對路徑)

    ????????10、indexpage:

    ????????將被保存成index.html文件名的URL類型(多個之間使用";"隔開)

    ????????11、filenamelength:

    ????????頁面保存到本地時,隨機生成的文件名的長度

    ????????12、cacheunitsize:

    ????????一個cache單元的大小

    ????????13、reptile-downloadfiletype:

    ????????將被抓取到本地的文件類型(多個之間使用";"隔開)

    ????????14、reptile-undownloadfiletype:

    ????????頁面被保存到本地時,該種類型的文件的URL將被改成遠程的URL
    地址,如果這種類型出現在reptile-downloadfiletype中時,則文件將被抓取
    到本地,而URL也將改成本地的URL(多個之間使用";"隔開)

    ????c、在參數配置好之后,執行bin/run.bat文件

    4、如何擴展接口?

    ????擴展接口使用的配置文件是:conf/snoics-reptile-urlregex.xml

    ????首先加入一段如下的配置,其中正則表達式部分應該特定的需要自己給出,
    ??? reptile-replace-string用來代替URL出現的位置,在程序執行的過程中,該部分
    ??? 會被自動替換。
    ????<bean id="ahrefRegexUrl" class="com.snoics.reptile.regex.url.impl.UrlRegex" singleton="false">
    ????????<property name="regexUrl">
    ????????????<!-- 提取可能包含URL的字符串 -->
    ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?[^<>]*["'\s][^<>]*>]]></value>
    ????????</property>
    ????????<property name="replaceRegexUrl">
    ????????????<!-- 替換可能包含URL的字符串 -->
    ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?reptile-replace-string["'\s][^<>]*>]]></value>
    ????????</property>
    ????????<property name="getRegexUrl">
    ????????????<!-- 提取最終URL -->
    ????????????<ref bean="ahrefGetRegexUrl"/>
    ????????</property>
    ????</bean>
    ????

    ????其中ahrefGetRegexUrl是實現了com.snoics.reptile.regex.url.IGetUrlRegex
    ??? 接口的類,用來從可能包含了URL的字符串里面提取其中包含的URL?

    ??? 其次加入如下的配置:

    ???? <bean id="ahrefGetRegexUrl" class="com.snoics.reptile.regex.url.impl.AhrefGetRegexUrl" singleton="false">
    ???????? <property name="regexString">
    ????????????? <!-- 提取最終URL -->
    ?????????????? <value><![CDATA[href\s*=\s*["']?[^\s"]+["'\s]\s*]]></value>
    ???????? </property>
    ???????? <property name="unIncludeRegexString">
    ??????????????? <!--
    ???????????????????? 排除不需要的類型
    ???????????????????? 多個正則表達式之間使用';'隔開
    ???????????????? ?-->
    ??????????????? ?<value><![CDATA[javascript\s?:\s?;mailto\s?:\s?;^#$;]]></value>
    ?????????? </property>
    ????? </bean>

    ????最后,在如下的配置中,加入剛才配置好的部分

    ????<bean id="urlRegexMap" class="com.snoics.reptile.regex.url.impl.UrlRegexMap">
    ????????<property name="ulrRegexMap">
    ????????????<map>
    ????????????????<!-- 名稱 -->
    ????????????????<entry key="ahref">
    ????????????????????<!-- 解析URL使用的類 -->
    ????????????????????<ref bean="ahrefRegexUrl"/>
    ????????????????</entry>
    ????????????????<entry key="src">
    ????????????????????<ref bean="srcRegexUrl"/>
    ????????????????</entry>
    ????????????</map>
    ????????</property>
    ????</bean>


    5、版本歷史

    2.0:

    核心代碼全部重寫,增加了擴展性,通過擴展之后,基本上能實現對整個網站完整的解析

    1.0:

    實現了整站抓取的基本的功能,不能解析特殊的URL,對javascript無法辨認


    下載地址:

    snoics-reptile2.0.part1.rar

    snoics-reptile2.0.part2.rar

    snoics-reptile2.0-doc.rar?????
    posted @ 2006-05-29 21:41 snoics 閱讀(2810) | 評論 (3)編輯 收藏
         現在各種各樣的框架滿天飛,幾乎隨便找個人都能把各種框架,模式,說的頭頭是道.弄的好象如果不懂這些,你就是落伍,就不懂的什么是編程,什么是企業應用系統的開發.

         現在很多初學者一上來,就是這個框架,那個框架的,一會學了這個一會又學那個,往往忽略了最重要最基本的JAVA基礎.
        
         個人認為,框架不等同于JAVA,它只是JAVA下面的一種工具,就算學會使用再多的框架也不代表就學會了JAVA.一種工具可能一開始不會用,可是如果重復使用過幾次,我想只要是正常的人,沒有人學不會的,就算是條件反射也該會了(會用了和理解了是兩種完全不同的情況).

         結果也就出現了這樣的情況,問到一個挺簡單的問題,可是卻都答不上來,原因是原來都是在別人的或者是框架里面封裝好的東西,自己只是負責調用而已.

         框架是比較容易過時的東西,只有基礎才是比較持久的.所以當在學會了使用一大堆的框架以后,請考慮一下,如果除了框架,我還剩下了什么.

         只是對這種情況的感想,沒有任何貶低框架的意思.
    posted @ 2006-03-09 09:43 snoics 閱讀(2098) | 評論 (4)編輯 收藏
            一般情況下,在記錄日志時,只能把通過API進行記錄的信息寫入自定義的日志文件,其余的信息就無法被寫入了.

           解決的辦法就是重寫System.out和System.err,讓System.out,System.err的寫入轉向到你的日志文件,這樣只要在控制臺的所有的輸出信息都會被記錄到日志文件中.

          例如可以在系統進行初始化時進行這樣的操作:

          重寫System.out:
                  PrintStream printStreamOut = new PrintStream(outputStreamOut);
                  System.setOut(printStreamOut);
         
          重寫System.err
                  PrintStream printStreamErr = new PrintStream(outputStreamErr);
                  System.setErr(printStreamErr);


          這里的outputStreamOut,和outputStreamErr都是自定義的重定向的日志文件的OutputStream


          現在重定向輸出的問題解決了,可以又出現了一個新的問題: 在控制臺上看不到任何輸出信息,輸出的信息全部被定向到日志文件中.

           要解決這個問題還需要自己實現一個OutputStream,讓OutputStream能同時寫入多個輸出.

           首先繼承java.io.OutputStream,然后實現public abstract void write(int b) throws IOException; 并且覆寫java.io.OutputStream中的其他的方法,具體的實現方式按照自己的需求來做,這里就不做出具體的實現了.

           通過實現自己實現OutputStream之后,
          在
               PrintStream printStreamOut = new PrintStream(outputStreamOut);
               PrintStream printStreamErr = new PrintStream(outputStreamErr);
          中分別把outputStreamOut和outputStreamErr對象換成自己實現的OutputStream對象,這樣就可以實現在一個OutputStream對象中進行多個輸出操作.

          按照以上的思路進行的實現,可以完全把控制臺的所有的輸出寫入到日志文件中,包括System.out.println這樣的輸出.

                   snoics
    posted @ 2006-03-03 09:10 snoics 閱讀(3845) | 評論 (7)編輯 收藏
    1. 把opencms.war復制到Tomcat\webapps目錄下,并復制classes12.jar到Tomcat\common\lib目錄下,然后啟動Tomcat,在啟動完成之后,刪除opencms.war

    2. 在oracle中新建一個表空間opencms

    3. 用http://localhost:8080/opencms/setup進行安裝

    4. 安裝過程中,數據庫類型選擇oracle9i, 用戶名為system,另一個用戶名是準備用來分配給opencms使用的用戶名,這個地方可以按照具體的情況自己進行設置,這個用戶可以是本身在oracle中并不存在的用戶,安裝程序會自動的創建這個用戶,并把opencms表空間分配給該用戶,接下來的表空間和Index的輸入框中都輸入opencms.

    5. 接下去只需要按照提示一路Continue,最后當文件都導入完成之后,opencms就安裝完成了,初始管理員和密碼是Admin,admin

    6. 安裝完成之后,
      修改/system/workplace/resources/commons/explorer.js
      中的行:
    "<td>"+vr.langadress+"&</td>\n"
    為:"<td nowrap>"+vr.langadress+"</td>\n"

    然后把org.opencms.locales.zh.zip包復制到Tomcat\webapps\opencms\WEB-INF\packages\modules目錄下,使用Admin進入opencms系統,選擇Administrator管理界面,然后選擇模塊管理,導入org.opencms.locales.zh.zip包.然后解壓org.opencms.locales.zh.zip,把org.opencms.locales.zh\system\workplace\locales\zh\messages下的templateone_form_zh.properties和templateone_zh.properties以及org整個文件夾復制到Tomcat\webapps\opencms\WEB-INF\classes目錄下.

    7.重啟Tomcat,使用Admin進入opencms系統,選擇Administrator管理界面,然后把語言類型設置成chinese,這時就能使用中文界面的opencms了
    posted @ 2006-02-23 09:57 snoics 閱讀(4129) | 評論 (9)編輯 收藏

    /*
     * Encrypt 字符串加密
     *
     * @author shiwei 2004-8-28
     */

    package com.snoics.base.util;
    /**
     * Encrypt 字符串加密
     * @author shiwei
     *
     */
    public class Encrypt {

        public Encrypt() {

        }

        /**
         * 加密字符串
         * @param encryptstring
         * @return String
         */
        public static String encrypt(String encryptstring){
         String newstring="";
         if(encryptstring.length()<1){
          return encryptstring;
         }else{
          String tempstring=StringClass.remove(encryptstring,0,(int)(encryptstring.length()/3));
          tempstring=StringClass.getConvertString(tempstring);
          encryptstring=StringClass.getConvertString(encryptstring);
          newstring=encrypt(encryptstring,tempstring);
          return newstring;
         }
        }
       
        /**
         * 普通加密字符串
         *
         * @param encryptstring1
         * @param encryptstring2
         * @return String
         */
        public static String encrypt(String encryptstring1, String encryptstring2) {
            int strcount = 0; //字符串ASCII碼的總和
            int newpasswordlength = 0; //生成的密碼長度
            int seed1 = 0; //種子
            int seed2 = 0;
            String str = "";
            String newpassword = ""; //生成的密碼
            char newchar;
            int newcharint = 0;
            int thechar = 0;

            str = encryptstring2 + encryptstring1;

            if (str.length() > 0) {
                for (int i = 0; i < str.length(); i++) {
                    strcount = strcount + str.charAt(i);
                }

                newpasswordlength = (strcount * strcount) / str.length() + str.length();

                int temp = 0;
                int temp2 = 0;
                while ((newpasswordlength <= 0) || (newpasswordlength > 100)) {
                    temp = temp + str.length();
                    temp2 = temp + temp2;
                    newpasswordlength = 100;
                }

                for (int i = 0; i < encryptstring1.length(); i++) {
                    seed1 = seed1 + encryptstring1.charAt(i);
                }
                for (int i = 0; i < encryptstring2.length(); i++) {
                    seed2 = seed2 + encryptstring2.charAt(i);
                }

                for (int i = 0; i < newpasswordlength; i++) {

                    if (i < str.length()) {
                        thechar = str.charAt(i);
                    } else {
                        thechar = str.charAt(i % (str.length() - 1))
                                + str.charAt((str.length() - 1)
                                        - (i % str.length()));
                    }
                    newcharint = thechar * (seed1 * (i + 1) + thechar);
                    newcharint = newString(newcharint);
                    newcharint = thechar * (seed2 * (i + 1) + thechar);
                    newcharint = newString(newcharint);
                    newchar = (char) newcharint;
                    newpassword = newpassword + String.valueOf(newchar);
                }
                newpassword = newpassword.substring((encryptstring2.length() + encryptstring1.length()) % 100);
                return (newpassword);
            } else {
                return ("空字符串不能被加密");
            }
        }

        private static int newString(int charint) {
            while ((charint > 127) || (charint < 32)) {
                while (charint > 127) {
                    charint = (charint - charint/2+1) / 2;
                    while(charint==60||charint==62||charint==34||charint==32||charint==39){
                     charint = charint + 1;
                    }
                }
                while (charint < 32) {
                    charint = (charint + charint/2-1) * 2;
                    while(charint==60||charint==62||charint==34||charint==32||charint==39){
                     charint = charint + 1;
                    }
                }
            }
            return (charint);
        }

        public static void main(String[] args) {
            String theusername = "1abc1";
            String thepassword = "1def1";
            String theusername1 = "1def1";
            String thepassword1 = "1abc1";
            String newstring=Encrypt.encrypt(theusername,thepassword);
            System.out.println("newstring="+newstring);
            String newstringa=Encrypt.encrypt(theusername1,thepassword1);
            System.out.println("newstringa="+newstringa);
            String newstring2=Encrypt.encrypt(newstring);
            System.out.println("newstring2="+newstring2);
            String newstring3=Encrypt.encrypt(newstring2);
            System.out.println("newstring3="+newstring3);
        }

    }


    執行結果:

    newstring=*?C4%;V[GKOoUX[_#i%ptvy)!!#01&c(46*o;=?y{?AB#4HI7%7LM:==U?@?AXBZFGHH`IJKfgO4QlmR7qrt::wxz=
    newstringa=(=A4$;TYDHLmTW[_#d#kpvx*!#-/$a(56)m89;vy@AB!2DE4$7LN::;P==?AYBXCDEE^IJKceL3NikR6opq89uvw;
    newstring2=ij887i)54)?!@A!!!Ab##eBf##ddd#efff#b#cadc#bc_!!]@
    newstring3=(qI}!+A!#z%%4?((
    posted @ 2006-02-20 10:45 snoics 閱讀(1751) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲av无码一区二区三区不卡 | 无码国产精品一区二区免费| 亚洲一级片在线观看| 国产男女猛烈无遮挡免费网站| j8又粗又长又硬又爽免费视频| 麻豆亚洲AV永久无码精品久久 | 午夜男人一级毛片免费| eeuss影院免费直达入口| 久久久久亚洲精品天堂| 免费jjzz在在线播放国产| 久久免费福利视频| 亚洲爆乳大丰满无码专区| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 免费99精品国产自在现线| 一级毛片视频免费| 亚洲白色白色永久观看| 亚洲成A人片在线观看中文| 99在线精品视频观看免费| 污污污视频在线免费观看| 亚洲精品乱码久久久久久下载| 亚洲av无码专区在线观看素人| 99视频精品全部免费观看| 曰批免费视频播放免费| 亚洲欧洲精品一区二区三区| 亚洲精品成人在线| 久久天天躁狠狠躁夜夜免费观看| 99精品免费视品| 免费观看亚洲人成网站| 亚洲偷偷自拍高清| 久久丫精品国产亚洲av不卡 | 亚洲自偷自偷图片| 免费a级毛片网站| 德国女人一级毛片免费| 最近中文字幕mv免费高清在线| 国产精品免费久久久久影院| 看成年女人免费午夜视频| 亚洲伦理一二三四| 亚洲精品国产福利在线观看| 国产精品久久久亚洲| 老司机亚洲精品影视www| 免费夜色污私人影院在线观看|