tinguo002

           

          java.net.SocketException: Connection reset 解決方法

          推薦好文:http://www.cnblogs.com/zmc/p/3295761.html

          當數據庫連接池中的連接被創(chuàng)建而長時間不使用的情況下,該連接會自動回收并失效,但客戶端并不知道,在進行數據庫操作時仍然使用的是無效的數據庫連接,這樣,就導致客戶端程序報“ java.sql.SQLException: Io 異常: Connection reset” 或“java.sql.SQLException 關閉的連接”異常。


          解決辦法:客戶端在使用一個無效的連接時會先對該連接進行測試,如果發(fā)現(xiàn)該連接已經無效,則重新從連接池獲取有效數據庫連接來使用。

          在tomcat的context.xml里面設置數據源時候可參考:

           <Resource auth="Container"
            driverClassName="oracle.jdbc.OracleDriver"
            type="javax.sql.DataSource"
            url="jdbc:oracle:thin:@11.11.11.45:1521:orcl"
            name="jdbc/login"
            username="login"
            password="login"
            maxActive="15"
            maxIdle="10"
            maxWait="-1"
            minIdle="2"
            removeAbandonedTimeout="5"
            testOnBorrow="true"
            testWhileIdle="true"
            testOnReturn="true"
            removeAbandoned="true"
            logAbandoned="true"
            validationQuery="select 1 from dual"
           /> 
           
           
          參考:http://www.cnblogs.com/younes/archive/2012/06/01/2529483.html




          DBCP數據庫連接失效的解決方法(Io 異常:Connection reset)


          網上很多評論說DBCP有很多BUG,但是都沒有指明是什么BUG,只有一部分人說數據庫如果因為某種原因斷掉后再DBCP取道的連接都是失效的連接,而沒有重新取。有的時候會報Io 異常:Connection reset。

          解決方法:

          spring中datasource的配置如下:
              <bean id="dispatchdataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
              <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
              <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:myserver" />
              <property name="username" value="user1" />
              <property name="password" value="pwd" />
              <property name="maxActive" value="10000" />
              <property name="maxIdle" value="30" />
               <property name="minIdle" value="2" />
              <property name="maxWait" value="600000" />
              <property name="testOnBorrow" value="true"/>
              <property name="testWhileIdle" value="true"/>
              <property name="validationQuery" value="select 1 from dual"/>
          </bean>

           

          分析:

          DBCP使用apache的對象池ObjectPool作為連接池的實現(xiàn),有以下主要的方法

          Object borrowObject() throws Exception;從對象池取得一個有效對象

          void returnObject(Object obj) throws Exception;使用完的對象放回對象池

          void invalidateObject(Object obj) throws Exception;使對象失效

          void addObject() throws Exception;生成一個新對象


          ObjectPool的一個實現(xiàn)就是GenericObjectPool,這個類使用對象工廠PoolableObjectFactory實現(xiàn)對象的生成,失效檢查等等功能,以其實現(xiàn)數據庫連接工廠PoolableConnectionFactory做以說明,主要方法:

               Object makeObject() throws Exception; 使用ConnectionFactory生成新連接

               void destroyObject(Object obj) throws Exception;關閉連接

               boolean validateObject(Object obj); 驗證連接是否有效,如果_validationQuery不空,則使用該屬性作為驗證連接是否有效的sql語句,查詢數據庫

               void activateObject(Object obj) throws Exception;激活連接對象

               void passivateObject(Object obj) throws Exception; 關閉連接生成過的Statement和ResultSet,使連接處于非活動狀態(tài)

              而GenericObjectPool有幾個主要屬性

               _timeBetweenEvictionRunsMillis:失效檢查線程運行時間間隔,默認-1

               _maxIdle:對象池中對象最大個數

               _minIdle:對象池中對象最小個數

               _maxActive:可以從對象池中取出的對象最大個數,為0則表示沒有限制,默認為8

               在構造GenericObjectPool時,會生成一個內嵌類Evictor,實現(xiàn)自Runnable接口。如果 _timeBetweenEvictionRunsMillis大于0,每過_timeBetweenEvictionRunsMillis毫秒 Evictor會調用evict()方法,檢查對象的閑置時間是否大于 _minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0時則忽略,默認為30 分鐘),是則銷毀此對象,否則就激活并校驗對象,然后調用ensureMinIdle方法檢查確保池中對象個數不小于_minIdle。在調用 returnObject方法把對象放回對象池,首先檢查該對象是否有效,然后調用PoolableObjectFactory 的passivateObject方法使對象處于非活動狀態(tài)。再檢查對象池中對象個數是否小于_maxIdle,是則可以把此對象放回對象池,否則銷毀此對象。

               還有幾個很重要的屬性,_testOnBorrow、_testOnReturn、_testWhileIdle,這些屬性的意義是取得、返回對象和空閑時是否進行驗證,檢查對象是否有效,默認都為false即不驗證。所以當使用DBCP時,數據庫連接因為某種原因斷掉后,再從連接池中取得連接又不進行驗證,這時取得的連接實際已經時無效的數據庫連接了。網上很多說 DBCP的bug應該都是如此吧,只有把這些屬性設為true,再提供_validationQuery語句就可以保證數據庫連接始終有效了,oracle數據庫可以使用SELECT COUNT(*) FROM DUAL,不過DBCP要求_validationQuery語句查詢的記錄集必須不為空,可能這也可以算一個小小的BUG,其實只要_validationQuery語句執(zhí)行通過就可以了。

          參考:http://hi.baidu.com/dobodo/item/7d95e3384d181cc4392ffab5



          Tomcat Resource可配置的屬性




          posted @ 2014-06-27 11:43 一堣而安 閱讀(14999) | 評論 (0)編輯 收藏

          web 打印

          http://www.jb51.net/article/21444.htm
          http://www.downdiy.com/kfyy/php/20140323/9e7b9b20201d3a49bb835efc2edc23d3.html  保持線條被打印

          posted @ 2014-06-26 14:40 一堣而安 閱讀(237) | 評論 (0)編輯 收藏

          Tomcat6.0 連接池的配置

           Tomcat6.0 連接池的配置

          1.本人當前使用的Tomcat版本為:6.0.20,oracle為穩(wěn)定的9i版本

          2.下文為方便起見,依習慣以%Tomcat_Home%表示Tomcat安裝的目錄,本人安裝目錄為“E:\Program Files\WindowsXP\tomcat6”

          配置步驟如下:

          1.Tomcat 6的配置和以前的不同了,不推薦在server.xml中進行配置,而是在%Tomcat_Home%\webapps\yourApp\META-INF \context.xml中進行配置才是更好的方法。而不是以前版本%Tomcat_Home%\conf下的context.xml文件。這樣就可以在不同的web應用下單獨配置連接池了,且Tomcat會自動重載。當然你也可以更改%Tomcat_Home%\conf下的context.xml文件,將所有web應用下的連接池進行統(tǒng)一配置。

          2.將代碼修改如下:

          view plaincopy to clipboardprint?
          <Context reloadable="true"> 
              <WatchedResource>WEB-INF/web.xml</WatchedResource> 
              <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"   
              maxActive="100"   
              maxIdle="30" 
              maxWait="10000" 
              username="scott"   
              password="tiger" 
              driverClassName="oracle.jdbc.driver.OracleDriver" 
              url="jdbc:oracle:thin:@localhost:1521:ora9"/> 
          </Context> 
          <Context reloadable="true">
              <WatchedResource>WEB-INF/web.xml</WatchedResource>
           <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"
           maxActive="100"
           maxIdle="30"
           maxWait="10000"
           username="scott"
           password="tiger"
           driverClassName="oracle.jdbc.driver.OracleDriver"
           url="jdbc:oracle:thin:@localhost:1521:ora9"/>
          </Context>

          name 為當前數據源JNDI的名字,可以隨意設定;

          auth 為驗證方式;

          type 資源類型;

          driverClassName 為Oracle驅動引用;

          maxActiv 為連接池最大激活的連接數,設為0表示無限制;

          maxIdle 表示即使沒有數據庫連接時依然可以保持30個空閑的連接,而不被清除,隨時處于待命狀態(tài)。設為0表示無限制;

          maxWait 為連接最大的等待時間,單位毫秒,取值10000,表示10000秒后超時。設為-1

                        表示無限制。;

          username 為oracle數據庫的一個用戶名;

          password 為username的密碼;

          url 為連接oracle的連接地址;

          注:本人嘗試將代碼“driverClassName="oracle.jdbc.driver.OracleDriver"”改為“driverClassName="oracle.jdbc.OracleDriver"”程序依然運行正常,剛開始以為老師的代碼有問題

          3.在程序中的調用形式為:

          view plaincopy to clipboardprint?
          Context context = new InitialContext();  
          DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");  
          Connection conn = ds.getConnection(); 
          Context context = new InitialContext();
          DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");
          Connection conn = ds.getConnection();

          注:“java:/comp/env/jdbc/oracleds”紅色標記文字為步驟1里設置的Resource name

          則可以將建立connection的方式以上述形式取代傳統(tǒng)方式:

          view plaincopy to clipboardprint?
          String driver = "oracle.jdbc.driver.OracleDriver";  
          String url = "jdbc:oracle:thin:@localhost:1521:ora9";  
          String username = "scott";  
          String password = "tiger";  
          Class.forName(driver);  
          Connection conn = DriverManager.getConnection(url, username, password); 
          String driver = "oracle.jdbc.driver.OracleDriver";
          String url = "jdbc:oracle:thin:@localhost:1521:ora9";
          String username = "scott";
          String password = "tiger";
          Class.forName(driver);
          Connection conn = DriverManager.getConnection(url, username, password);

          4.另外還需將用到的jdbc驅動類庫導入到%Tomcat_Home%\lib目錄下

          否則會拋出如下異常:
          org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'

          依上述步驟就能成功的配置Tomcat6.0 連接池,還有網友貼文說需

          在web.xml文件中的web-app節(jié)點下加入如下代碼形式:
          <resource-ref>
          <res-ref-name>jdbc/myoracle</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          </resource-ref>

          因本人未添加此項,程序依然正確,故本人認為此步驟為非必要項

           ---------------------------------------------------------------------------

          今天需要在另一臺機器上重新部署系統(tǒng),重新設置db的連接池。當我把tomcat拷貝到那臺機器,并且修改META-INF\context.xml,然后重新啟動tomcat,但發(fā)現(xiàn)系統(tǒng)連接的仍然是老的db。再次檢查了META-INF\context.xml文件,確信了這個文件已經正確設置db連接了,這也說明這個文件并沒有真正起作用。查看了tomcat下conf\context.xml也沒有設置db的連接池。那是哪個文件在起作用呢?折騰了辦法,后來發(fā)現(xiàn)tomcat在conf\Catalina\localhost下生成了一個和原來META-INF\context.xml相同內容的文件,懷疑一定是這個文件在起作用?刪除conf\Catalina\localhost目錄,重啟tomcat,問題消失。

          轉載一篇tomcat加載類的順序

           

           

          bin:存放啟動和關閉tomcat的腳本文件; 

          /conf:存放tomcat的各種配置文件,比如:server.xml 

          /server/lib:存放tomcat服務器所需要的各種jar文件(jar文件只可被tomcat 服務器訪問) 

          /server/webapps:存放tomcat自帶的兩個web應用:admin應用和manager應用。 

          /common/lib:存放tomcat服務器以及所有web應用都可以訪問的jar文件夾(web和tomcat服務器都可訪問此jar) 

          /shared/lib:存放web都可訪問的jar文件。(可以被所有的web訪問,但不能被tomcat訪問) 

          /logs:存放tomcat的日志文件 

          /webapps:當發(fā)布web應用時,默認情況下把web應用文件放于此目錄下 

          /work:tomcat把由jsp生成的Servlet放于此目錄 

          另:在web應用中,WEB-Inf目錄下,也可以建立lib子目錄,在此子目錄下可以存放各種jar文件,這些jar文件只能被當前web應用訪問。其中,在web-inf目錄下的lib與classes目錄,Tomcat類裝載器先裝載classes目錄下的類,再裝載lib目錄下的類。因為類同名時,classes優(yōu)先。 

           

          其中jsp運行時,查找class的順序為:項目文件夾(WEB-INF\lib)===》容器文件夾(tomcat\common\lib)==》jdk文件夾(jdk\jre\lib\ext) 

           

          Tomcat的class加載的優(yōu)先順序一覽 

          1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 

          2.環(huán)境變量CLASSPATH中的jar和class文件。 

          3.$CATALINA_HOME/common/classes下的class文件。 

          4.$CATALINA_HOME/commons/endorsed下的jar文件。 

          5.$CATALINA_HOME/commons/i18n下的jar文件。 

          6.$CATALINA_HOME/common/lib 下的jar文件。 

          (JDBC驅動之類的jar文件可以放在這里,這樣就可以避免在server.xml配置好數據源卻出現(xiàn)找不到JDBC Driver的情況。) 

          7.$CATALINA_HOME/server/classes下的class文件。 

          8.$CATALINA_HOME/server/lib/下的jar文件。 

          9.$CATALINA_BASE/shared/classes 下的class文件。 

          10.$CATALINA_BASE/shared/lib下的jar文件。 

          11.各自具體的webapp /WEB-INF/classes下的class文件。 

          12.各自具體的webapp /WEB-INF/lib下的jar文件。 

           

          class的搜尋順序如下 

          ------------- 

          /WEB-INF/classes of your web application 

          /WEB-INF/lib/*.jar of your web application 

          $CATALINA_HOME/common/classes 

          $CATALINA_HOME/common/endorsed/*.jar 

          $CATALINA_HOME/common/i18n/*.jar 

          $CATALINA_HOME/common/lib/*.jar 

          $CATALINA_BASE/shared/classes 

          $CATALINA_BASE/shared/lib/*.jar 

          -------------- 

          因此放在不同webapp里的class文件,會被classloader加載成不同的實例。 

          例如假設下面兩個不同內容的class。分別放在不同的webapp的class目錄下。 

          package com.lizongbo; 

          public class TestClass { 

            private String NAME="lizongbo"; 

           

          package com.lizongbo; 

          public class TestClass { 

            private String NAME="li_zongbo"; 

           

          在不同的webapp得到的com.lizongbo.NAME結果是不同的,且互不影響。 

          但是注意,以下包名開頭的class例外: 

          javax.* 

          org.xml.sax.* 

          org.w3c.dom.* 

          org.apache.xerces.* 

          org.apache.xalan.* 

           

          ps,注意.在各個jar中的\META-INF\MAINFEST.MF文件里Class-Path鍵值對,也會提供jar的加載優(yōu)先順序。 

          例如某jar的MAINFEST.MF內容如下: 

          Manifest-Version: 1.0 

          Created-By: lizongbo 

          Class-Path: commons-beanutils.jar 

          Class-Path: commons-collections.jar 

          Class-Path: commons-dbcp.jar 

          Class-Path: commons-digester.jar 

          Class-Path: commons-logging.jar 

          Class-Path: commons-pool.jar 

          Class-Path: commons-services.jar 

          Class-Path: commons-validator.jar 

          Class-Path: jakarta-oro.jar 

          Main-Class: com.lizongbo.MyTestClass 

           

           

          那么在加載這個jar的時候,會先在此jar所在目錄下依次先加載commons-beanutils.jar,commons-collections.jar。。。等jar文件。 

           

          在不同的地方放置jar和class可能會產生意想不到的后果,,尤其是不同版本的jar文件,因此在實際應用部署web應用時候要特別留心. 

           

          例如 使用javamail常見的一個出錯信息: 

          javax.mail.NoSuchProviderException: No provider for smtp 

          其真實原因就很可能如下: 

          在不同的加載jar的目錄下放置了不同版本的mail.jar,比如一個是javamail1.3.1的mail.jar 

          在D:\jakarta-tomcat-5.5.8\common\lib下,而另外一個是javamail1.3.2的mail.jar在 

          D:\jakarta-tomcat-5.5.8\webapps\lizongbo\WEB-INF/lib下, 

          那么lizongbo這個webapp中使用到javamail進行郵件發(fā)送的時候,便會出現(xiàn)No provider for smtp的錯誤。



          詳細出處參考:http://www.aygfsteel.com/gm_jing/articles/308828.html

          posted @ 2014-06-18 14:54 一堣而安 閱讀(504) | 評論 (0)編輯 收藏

          時間比較




          import java.util.Date;
          import java.text.ParseException;搜索
          import java.text.SimpleDateFormat;

          public class TimeCompare {

          public static int Hour(Date time){
          SimpleDateFormat st=new SimpleDateFormat("yyyyMMddHH");
          return Integer.parseInt(st.format(time));
          }

          public static Date StringToDate(String s){
          Date time=new Date();
          SimpleDateFormat sd=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
          try{
          time=sd.parse(s);
          }
          catch (ParseException e) {
          System.out.println("輸入的日期格式有誤!");
          }
          return time;
          }

          public static void main(String[] args) {
          String a="2012/01/01 18:08:20";
          String b="2012/01/01 18:01:20";
          String c="2012/01/02 01:01:01";
          if(Hour(StringToDate(a))<=Hour(StringToDate(b))&&Hour(StringToDate(a))<Hour(StringToDate(c)))
          System.out.println("成功");
          else
          System.out.println("失敗");
          }
          }

          posted @ 2014-05-26 17:47 一堣而安 閱讀(161) | 評論 (0)編輯 收藏

          eclipse自動更新的取消方法:

          詳細參考:http://blog.csdn.net/fengyifei11228/article/details/6942316

          eclipse自動更新的取消方法:

           

          1. window --> preferences --> General --> Startup and Shutdown --> 在列表中找到 "Automatic Updates Scheduler " 項去掉前面的勾。

           

          如果安裝了Myeclipse,那么還需要執(zhí)行如下操作

          2. Window --> Preferences --> Myeclipse Enterprise Workbench --> Maven4Myeclipse --> Maven --> "Download repository index updates on startup" 去掉前面的勾。

           

          3. Window --> Preferences --> Myeclipse Enterprise Workbench --> Maven4Myeclipse --> MyEclipse Dashboard --> "Show MyEclipse Dashboard on startup" 去掉前面的勾。

          posted @ 2014-05-25 09:04 一堣而安 閱讀(3957) | 評論 (0)編輯 收藏

          iframe應用session丟失的問題

          詳細參考:http://www.cnblogs.com/fengqingtao/archive/2011/03/16/1986174.html

          iframe應用session丟失的問題

          在網站群的建設中,各子站需要共享主站的footer等公共信息。同時主站的后臺管理也集成了各子站的管理,采取的方式是使用iframe嵌入各站的頁面。在本機開發(fā)環(huán)境中,沒有出現(xiàn)任何的問題。但是一放到測試環(huán)境中,便遇到session丟失的問題。
                  環(huán)境:應用服務器采用tomcat6.0,各個站點單獨使用一個應用服務器,部署在一臺物理服務器上。外部訪問采用同一個IP,但是不同的端口。
                 起初以為,IE它的安全策略默認是會把iframe中的頁面站點認為是不可信任的,它會阻止該站點傳過來的cookie(如果你在iframe中的URL跳轉是用的localhost,則不會被阻擋),所以因為沒法使用cookie了,session便失效了。解決的方法是在過濾器,或者被嵌入的頁面內加入屬性為P3P的header信息。java為:response.addHeader("P3P","CP=CAO PSA OUR");但是依然沒有成功。網上的解決方案都是這么說,況且自己以前還弄過,都成功過,這次怎么弄都不好。
                  今天腦子安靜下來,仔細的分析這里面的原因。如果是IE的安全限制,但是火狐、google瀏覽器沒有這樣的限制,為什么這兩個瀏覽器也出現(xiàn)這樣的情況。這肯定不僅僅和跨域引起的P3P的安全問題有關。于是在本機測試,通過iframe引入測試環(huán)境中的鏈接,設置了P3P,發(fā)現(xiàn)一切正常。這就更說明了,測試環(huán)境中的問題絕對不是P3P的問題了。而且使用了同一個IP,也應該沒有跨域的說法。那原因到底是什么呢?
                  慢慢的,我將視線注意到了端口上。這些網站的訪問方式都是:同一IP+不同端口,難道和端口有關系。上網搜,關于這方面的內容太少了,但是總算在零星的資源中,找到了里面的原因。IP相同的兩個session對應的cookie是一樣的,而不幸的是sessionID就保存在cookie中,這樣先訪問A,再訪問B的時候,B的sessionid會覆蓋A的sessionid。這個事情沒辦法解決,所以你不要搞兩個端口,最好是搞兩個IP。原來都是cookie惹的禍,它不會區(qū)分端口,造成這多個站點不斷的后來的覆蓋前面的,從而造成session的丟失。問題解決了,將相互有引用的應用架構在不同的虛擬主機中,或者映射不同的IP。

          posted @ 2014-05-22 23:07 一堣而安 閱讀(260) | 評論 (0)編輯 收藏

          win7_oracle11g_64位連接32位PLSQL_Developer

          文章參數:http://jingyan.baidu.com/article/fb48e8be4c7c206e622e1491.html

          posted @ 2014-05-13 21:42 一堣而安 閱讀(217) | 評論 (0)編輯 收藏

          Java DES 加密和解密源碼

          文章參考:http://www.oschina.net/code/snippet_727646_18383

          Java密碼學結構設計遵循兩個原則:

          1) 算法的獨立性和可靠性。

          2) 實現(xiàn)的獨立性和相互作用性。

          算法的獨立性是通過定義密碼服務類來獲得。用戶只需了解密碼算法的概念,而不用去關心如何實現(xiàn)這些概念。實現(xiàn)的獨立性和相互作用性通過密碼服務提供器來實現(xiàn)。密碼服務提供器是實現(xiàn)一個或多個密碼服務的一個或多個程序包。軟件開發(fā)商根據一定接口,將各種算法實現(xiàn)后,打包成一個提供器,用戶可以安裝不同的提供器。安裝和配置提供器,可將包含提供器的ZIPJAR文件放在CLASSPATH,再編輯Java安全屬性文件來設置定義一個提供器。


          DES算法及如何利用DES算法加密和解密類文件的步驟

          DES算法簡介
          DESData Encryption Standard)是發(fā)明最早的最廣泛使用的分組對稱加密算法。DES算法的入口參數有三個:KeyDataMode。其中Key8個字節(jié)共64位,是DES算法的工作密鑰;Data也為8個字節(jié)64位,是要被加密或被解密的數據;ModeDES的工作方式,有兩種:加密或解密。

          package com.afreon.util;

          import java.io.IOException;
          import java.security.SecureRandom;

          import javax.crypto.Cipher;
          import javax.crypto.SecretKey;
          import javax.crypto.SecretKeyFactory;
          import javax.crypto.spec.DESKeySpec;

          import sun.misc.BASE64Decoder;
          import sun.misc.BASE64Encoder;

          public class DesUtil {

              
          private final static String DES = "DES";

              
          public static void main(String[] args) throws Exception {
                  String data 
          = "123 456";
                  String key 
          = "wang!@#$%";
                  System.err.println(encrypt(data, key));
                  System.err.println(decrypt(encrypt(data, key), key));

              }

              
              
          /**
               * Description 根據鍵值進行加密
               * 
          @param data 
               * 
          @param key  加密鍵byte數組
               * 
          @return
               * 
          @throws Exception
               
          */

              
          public static String encrypt(String data, String key) throws Exception {
                  
          byte[] bt = encrypt(data.getBytes(), key.getBytes());
                  String strs 
          = new BASE64Encoder().encode(bt);
                  
          return strs;
              }


              
          /**
               * Description 根據鍵值進行解密
               * 
          @param data
               * 
          @param key  加密鍵byte數組
               * 
          @return
               * 
          @throws IOException
               * 
          @throws Exception
               
          */

              
          public static String decrypt(String data, String key) throws IOException,
                      Exception 
          {
                  
          if (data == null)
                      
          return null;
                  BASE64Decoder decoder 
          = new BASE64Decoder();
                  
          byte[] buf = decoder.decodeBuffer(data);
                  
          byte[] bt = decrypt(buf,key.getBytes());
                  
          return new String(bt);
              }


              
          /**
               * Description 根據鍵值進行加密
               * 
          @param data
               * 
          @param key  加密鍵byte數組
               * 
          @return
               * 
          @throws Exception
               
          */

              
          private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
                  
          // 生成一個可信任的隨機數源
                  SecureRandom sr = new SecureRandom();

                  
          // 從原始密鑰數據創(chuàng)建DESKeySpec對象
                  DESKeySpec dks = new DESKeySpec(key);

                  
          // 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec轉換成SecretKey對象
                  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
                  SecretKey securekey 
          = keyFactory.generateSecret(dks);

                  
          // Cipher對象實際完成加密操作
                  Cipher cipher = Cipher.getInstance(DES);

                  
          // 用密鑰初始化Cipher對象
                  cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

                  
          return cipher.doFinal(data);
              }

              
              
              
          /**
               * Description 根據鍵值進行解密
               * 
          @param data
               * 
          @param key  加密鍵byte數組
               * 
          @return
               * 
          @throws Exception
               
          */

              
          private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
                  
          // 生成一個可信任的隨機數源
                  SecureRandom sr = new SecureRandom();

                  
          // 從原始密鑰數據創(chuàng)建DESKeySpec對象
                  DESKeySpec dks = new DESKeySpec(key);

                  
          // 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec轉換成SecretKey對象
                  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
                  SecretKey securekey 
          = keyFactory.generateSecret(dks);

                  
          // Cipher對象實際完成解密操作
                  Cipher cipher = Cipher.getInstance(DES);

                  
          // 用密鑰初始化Cipher對象
                  cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

                  
          return cipher.doFinal(data);
              }

          }




          posted @ 2014-05-13 17:19 一堣而安 閱讀(1216) | 評論 (0)編輯 收藏

          JS讀書文件

          Automation服務器不能創(chuàng)建對象
          最簡單解決方法:打開Internet Explorer “工具”菜單欄中的“選項”一欄,單擊“安全”欄中的“自定義級別”選項卡,將第三項“對沒有標記為安全的activex控件進行初始化和腳本運行”設置成
          另外解決辦法參考:http://blog.chinaunix.net/uid-20624711-id-1911481.html


          ==========
          參考:http://www.cnblogs.com/java-boy/archive/2011/03/21/1989911.html

          <script type="text/javascript">
          /**
           *CreateFile: 測試在電腦上創(chuàng)建一個文件件,并在文件夾里寫進一些數據。
           *
           */
          function CreateFile()
          {
             var fso, tf;
             fso = new ActiveXObject("Scripting.FileSystemObject");//獲取對象
             tf = fso.CreateTextFile("c:\\testfile.txt", true);//創(chuàng)建一個文件夾
             // 寫一行,并且?guī)в行滦凶址?br />   tf.WriteLine("Testing 1, 2, 3.") ;
             // 向文件寫三個新行字符。 
             tf.WriteBlankLines(3) ;
             // 寫一行。
             tf.Write ("This is a test.");
             tf.Close();//關閉
          }
          /**
           *Folder的API:
           *任務 方法
           *創(chuàng)建文件夾。 FileSystemObject.CreateFolder
           *刪除文件夾。 Folder.Delete 或 FileSystemObject.DeleteFolder
           *移動文件夾。 Folder.Move 或 FileSystemObject.MoveFolder
           *復制文件夾。 Folder.Copy 或 FileSystemObject.CopyFolder
           *檢索文件夾的名字。 Folder.Name
           *如果文件夾在驅動器上存在,則找出它。 FileSystemObject.FolderExists
           *獲得現(xiàn)有 Folder 對象的實例。 FileSystemObject.GetFolder
           *找出文件夾的父文件夾名。 FileSystemObject.GetParentFolderName
           *找出系統(tǒng)文件夾的路徑。 FileSystemObject.GetSpecialFolder
           */
          function ManipFiles()
          {
             var fso, f1, f2, s;
             fso = new ActiveXObject("Scripting.FileSystemObject");
             f1 = fso.CreateTextFile("c:\\testfile.txt", true); //如果當前文件已經存在的話,則覆蓋原有文件
             alert("Writing file <br>");
             // 寫一行。
             f1.Write("This is a test.");
             // 關閉文件。
             f1.Close();
             alert("Moving file to c:\\tmp <br>");
             if(!fso.FolderExists("c:\\tmp")) { //如果tmp目錄不存在,則創(chuàng)建一個目錄
                  fso.CreateFolder("c:\\tmp");
             }
             // 獲取 C 的根目錄(C:\)中的文件的句柄。
             f2 = fso.GetFile("c:\\testfile.txt");
             // 把文件移動到 \tmp 目錄。如果這個tmp目錄下已經有testfile.txt文件了,則會出錯。(如果沒有tmp這個文件目錄也會出錯)
             f2.Move ("c:\\tmp\\testfile.txt");
             alert("Copying file to c:\\temp <br>");
             // 把文件復制到 \temp 目錄
             if(!fso.FolderExists("c:\\temp")) {//如果temp目錄不存在,則創(chuàng)建一個目錄
                  fso.CreateFolder("c:\\temp");
             }
             f2.Copy ("c:\\temp\\testfile.txt");
             alert("Deleting files <br>");
             // 獲得文件當前位置的句柄。
             f2 = fso.GetFile("c:\\tmp\\testfile.txt");
             f3 = fso.GetFile("c:\\temp\\testfile.txt");
             // 刪除文件。
             f2.Delete();
             f3.Delete();
             //刪除文件夾
             var fdTmp = fso.GetFolder("c:\\tmp");
             var fdTemp = fso.GetFolder("c:\\temp");
             fdTmp.DeleteFolder();
             fdTemp.DeleteFolder();
             alert("All done!");
          }

          ManipFiles();
          //CreateFile();
          alert("Ok! Write Over!");
          </script>

          posted @ 2014-05-06 23:02 一堣而安 閱讀(210) | 評論 (0)編輯 收藏

          jquery-validate 框架驗證

          參考:http://liuna718-163-com.iteye.com/blog/1914769

          /*
          動態(tài)添加驗證
          $("#dzName").rules("add",{ required: true,range:[1,100000000000], messages: { required: "必填項"} });
          動態(tài)刪除驗證
          $("#dzName").rules("remove");
          判斷驗證是否全部通過
           if(!$("#entInfoForm").validate().form()){
                  alert("如果您保存不了,請先將必填項填寫完整(紅色字體提示'必填項')");
              }
          */

          posted @ 2014-05-06 15:43 一堣而安 閱讀(237) | 評論 (0)編輯 收藏

          僅列出標題
          共17頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 

          導航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 克东县| 江西省| 遵义县| 饶平县| 明溪县| 自贡市| 黎城县| 沁源县| 类乌齐县| 同仁县| 河间市| 利川市| 兴海县| 棋牌| 明光市| 宁国市| 华坪县| 尚义县| 吴江市| 保德县| 宿松县| 和平区| 临西县| 海晏县| 米脂县| 原阳县| 海南省| 广德县| 靖州| 洛宁县| 福建省| 巴南区| 尤溪县| 万盛区| 祁门县| 济宁市| 峨山| 敦化市| 南投市| 武清区| 南宁市|