chenjinlong

          2010年8月23日 #

          文件加密解密

          /**加密
            *
            */
           public static String doEncrypt(String xmlStr) {
            try {
             return URLEncoder.encode(xmlStr, "GBK");
            } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
            }
            return "加密錯誤";
           }

           /**
            * 解密
            * @param saveFile
            */
           public static void decrypt(File saveFile) {
            try {
             BufferedReader reader = null;
                   reader = new BufferedReader(new FileReader(saveFile));
                   String tempString = null;
                   String str2 =null;
                   while ((tempString = reader.readLine()) != null) {
                    str2=URLDecoder.decode(tempString);
                   }
             FileOutputStream fos = new FileOutputStream(saveFile);
             fos.write(str2.getBytes());
             fos.close();
                   reader.close();
           
            } catch (IOException e) {
             e.printStackTrace();
            }
           }
           
           
           public static void main(String[] args) throws UnsupportedEncodingException {
            
            System.out.println(URLDecoder.decode("C:\\Documents and Settings\\chenchangqing\\Desktop\\實物轉移_20110824030821.xml", "GBK"));
           }




          這是把文件內容轉換成字符的方式

          posted @ 2011-08-26 11:49 chenjinlong 閱讀(191) | 評論 (0)編輯 收藏

          smartupload.jar 實現文件上傳下載

               摘要: 前臺: <form action="uploadimage.jsp" method="post" enctype="multipart/form-data" name="form1"> <input type="file" name="file"> <input type="submit"&n...  閱讀全文

          posted @ 2010-11-12 20:44 chenjinlong 閱讀(1872) | 評論 (0)編輯 收藏

          面向對象 —方法重寫、重載……

          區別方法重寫(覆蓋)和方法重載?
          方法重寫:方法名字、參數列表和返回類型必須相同。類中只允許出現一次這樣的方法,要接著往子類當中寫入。類中的方法覆蓋,父類和子類都可以相同。
          方法重載:方法名字相同,參數列表必須要不同,返回類型隨意。構造器就是典型的方法重載。

          this和super關鍵字的用法:this表示的本類的方法和成員;super表示父類的方法和成員。this()和super()都必須放在一個方法的開頭。
          如果子類構造器中沒有顯式地調用父類構造器,也沒有使用this關鍵字調用重載的其他構造器,則系統默認調用父類無參數的構造器,super()。

          塊執行:
          在一個類中有初始化塊要先執行,然后再是構造器。
          如:
          public class Test
          {
              String name;
               int age;
               String sex;
               public Test()
               {
                    System.out.println("Test1被調用");
                    sex ="Male";
                    System.out.println("name="+name+" ,age="+age+" ,sex="+sex);
                }
               public Test(String theName)
               {  
                    System.out.println("Test2被調用");
                    name = theName;
                    System.out.println("name="+name+" ,age="+age+" ,sex="+sex);
               }
               {
                    name = "Tony Blair";
                    age = 50;
                    sex = "Female";
                    System.out.println("Test初始化塊執行后:name="+name
                     +" ,age="+age+" ,sex="+sex);
                } 

                public static void main(String args[])
               {  
                     Test t=new Test();
                }
          }

          posted @ 2010-08-23 20:10 chenjinlong 閱讀(436) | 評論 (0)編輯 收藏

          static和final關鍵字

          static關鍵字可用在變量、方法和內部類中。
          在類的定義體中,方法的外部可包含static語句塊,在所屬的類被載入時執行一次,用于初始化static屬性,但不能初始化非靜態變量,類變量在整個類中共享。
          如:
          public class Count {
            private int serialNumber;
            public static int counter;

            static {
              System.out.println("static自由塊被執行");   //先執行靜態塊
              counter = 1;
            }

            public static int getTotalCount() {
              return counter;
            }
            public Count() {
              counter++;
              serialNumber=counter;
            }
            public static void main(String[] args)
            {
             System.out.println("main() invoked");
             System.out.println("counter = "+Count.counter);
                  Count t=new Count();
                  System.out.println("counter = "+Count.counter+" "+t.serialNumber);
            }
          }

          java.lang.Math是一個final類,不可被繼承,final變量是引用變量,則不可以改變它的引用對象,但可以改變對象的數據,final方法不可以被覆蓋,但可以被重載。
          如:
          class Aclass
          {
           int a;
           //構造器
           public Aclass()
           {
            a = 100;
           }
           final public void paint(){
            System.out.println("55555555");
           }
           final public void paint(int i){
            System.out.println(i);
           }
           public void setA(int theA)
           {
            a = theA;
           }
           public int getA()
           {
            return a;
           }
          }

          //定義一個類來測試
          public class TestFinal
          {       
                 //如果final變量是引用變量,則不可以改變它的引用對象,但可以改變對象的數據
           final Aclass REF_VAR=new Aclass();
           public static void main(String[] args)
           {
            TestFinal tf = new TestFinal();
            tf.REF_VAR.setA(1);
            System.out.println(tf.REF_VAR.getA());
            tf.REF_VAR.paint();
            tf.REF_VAR.paint(1);
           }
          }

          posted @ 2010-08-23 20:09 chenjinlong 閱讀(189) | 評論 (0)編輯 收藏

          abstract和interface關鍵字

          abstract用在方法或類前。抽象類必須繼承,抽象方法必須重寫。什么時候用呢?  當兩個類分別有一個公共方法,然后分別繼承公共類并完善抽象方法,這樣實現一種框架對類起到一個管理的作用。

          interface聲明方法和變量,特殊抽象類,和類不同的是,一個接口可以繼承多個父類接口,多個無關的類可以實現同一個接口,一個類可以實現多個無關的接口。

          posted @ 2010-08-23 20:08 chenjinlong 閱讀(197) | 評論 (0)編輯 收藏

          關于jsp頁面間,通過url傳遞參數,出現亂碼的問題.

          1 . request.setCharacterEncoding("utf-8");
          只適合Post方法提交的數據,

          2 . 適合用Get方法提交的數據
          String name = request.getParameter("name");
          name=new String(name.getBytes(“ISO8859_1”),“UTF-8”);

          3 .
          針對Tomcat服務器,修改server.xml
          <Connector port="8083" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443"
                 URIEncoding="UTF-8" />
          這個只使用GET方法,不適合Post方法

          posted @ 2010-08-23 20:04 chenjinlong 閱讀(202) | 評論 (0)編輯 收藏

          使用JDBC連接SQL SERVER 2008的方法

          使用JDBC連接SQL SERVER 2008,很多人都在問,我自己也測試幾次,發現按照以前的方法連接會出現一點小問題。原因在于,SQL SERVER 2008采用了動態端口的機制,按照以前的方法連接會報告連接不了,其實端口寫對了完全沒有問題。連接方法如下:

          1,微軟目前沒有發布針對SQL Server 2008專用的JDBC驅動程序,使用SQL Server 2005 的就可以了,但是,需要注意: SQL Server 2008的新功能無法使用,這個必須等專用的JDBC發布之后才能使用。下載地址:

          Microsoft SQL Server 2005 JDBC Driver 1.2

          http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=c47053eb-3b64-4794-950d-81e1ec91c1ba

          2,設置端口為固定端口:

          SQL Server 配置管理器,按圖設置即可

           


          注意:動態端口設為空,即可禁用動態端口

          連接的寫法:


          jdbc:sqlserver://192.168.3.6:1368;databaseName=數據庫名稱;user=用戶名;password=密碼


          posted @ 2010-08-23 20:03 chenjinlong 閱讀(577) | 評論 (0)編輯 收藏

          數據庫連接池DBCP

          概念:數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而不再是重新建立一個連接;釋放空閑時間超過最大空閑時間的數據庫連接,以避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。

          需要注意:
          1. 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量數據庫連接資源被浪費。
          2. 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,后面的數據庫連接請求將被加入到等待隊列中,這會影響之后的數據庫操作。

          數據庫連接池的兩個任務:
          1. 限制每個應用或系統可以擁有的最大資源,也就是確定連接池的大小(PoolSize)。
          2. 在連接池的大小(PoolSize)范圍內、最大限度地使用資源,縮短數據庫訪問的使用周期。

          例如: 物理連接數200個,每個連接提供250個Statemet,那么并發的Statement總數為200*250=50000個。

          Java開源連接池:
          Jakarta DBCP 可直接在應用程序中使用。(比較常用,集成在Tomcat和Struts中)
          C3P0是Hibernate的默認數據庫連接池。(常用,Hibernate)
          其他的還有Proxool、DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnectionPoolManager。


          DBCP代碼實現:
          //創建數據源
          public static DataSource setupDataSource(String connectURI) {
              BasicDataSource ds = new BasicDataSource();
              ds.setDriverClassName(org.gjt.mm.mysql.Driver);
              ds.setUsername("username");
              ds.setPassword("password");
              ds.setUrl(connectURI);
              return ds;   
          }

          //關閉數據源
          public static void shutdownDataSource(DataSource ds) throws SQLException {
              BasicDataSource bds = (BasicDataSource)ds;
              bds.close();
          }

          //數據源的使用

          DataSource dataSource = getDataSource();
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            
            try {
             conn = dataSource.getConnection();
             pstmt = conn.prepareStatement("select * from users");
             rs = pstmt.executeQuery();
             while(rs.next()) {
              System.out.println(rs.getInt("id"));
             }
            } catch(Exception e) {
             e.printStackTrace();
            } finally {
             try {
              rs.close();
              pstmt.close();
              conn.close();
             } catch(Exception ex) {
              ex.printStackTrace();
             }
            } 




          在Tomcat中配置數據庫連接池:

          我們使用Tomcat中lib文件夾下的tomcat-dbcp.jar。
          1. 修改server.xml文件在<Service>中寫入以下代碼:
          <Context path="/WebProject" docBase="WebProject" reloadable="true" crossContext="true">
               
               <Resource auth="Container" name="jdbc/CompanyDB" type="javax.sql.DataSource"
                factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
               driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"     
               url="jdbc:sqlserver://localhost:1433;DataBaseName=Company" 
               username="sa" 
                password="root" 
                maxActive="100" 
                maxIdle="30" 
                maxWait="10000"   
               removeAbandoned=“true”
                removeAbandonedTimeOut="10" 
                logAbandoned="true"/>
              </Context>


          path:工程路徑。
          docBase:工程名字。
          name:JNDI的名字。
          type:數據源的類。
          factory:指定生成的DataReource的factory類名;默認DBCP工廠類。
          driverClassName:數據庫驅動名。
          url:數據庫連接的URL。
          username:數據庫用戶名。
          password:數據庫密碼。
          maxActive:最大連接數據庫數,設為0表示沒有限制。
          maxIdle:最大等待數量,設為0表示沒有限制。
          maxWait:最大等待秒數,單位為ms。
          removeAbandoned:是否自我中斷,默認為false。
          removeAbandonedTimeOut:幾秒后會自我中斷,removeAbandoned必須為true。
          logAbandoned:是否記錄中斷事件,默認為false。



          2. 修改web.xml文件,增加一個標簽,輸入以下代碼:
          <resource-ref>
               <description>Company Connection</description>
               <res-ref-name>jdbc/CompanyDB</res-ref-name>
               <res-type>javax.sql.DataSource</res-type>
               <res-auth>Container</res-auth>
          </resource-ref>

          res-ref-name:指定JNDI的名字。
          res-type:指定資源類名。
          res-auth:指定資源的Manager。

          3. 代碼中使用JNDI代碼進行獲取:
          Context ctx = new InitalContext();
          DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/CompanyDB");
          Connection conn = ds.getConnection();


          注意:java:comp/env/ 是java中JNDI固定寫法。


          注意:如果該配置出現錯誤,采用另一種方式進行配置

          在tomcat中的server.xml不進行配置,而在context.xml中進行設置
          代碼如下:
          <Resource name="jdbc/CompanyDB" type="javax.sql.DataSource" password="root"
          driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxIdle="2" maxWait="5000" username="sa" url="jdbc:sqlserver://localhost:1433;DataBaseName=Company" maxActive="100"/>


          web.xml的設置同上一個配置一樣。

          posted @ 2010-08-23 20:01 chenjinlong 閱讀(284) | 評論 (0)編輯 收藏

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 紫云| 河北区| 德化县| 孟州市| 郓城县| 浑源县| 安丘市| 安陆市| 宜宾市| 张掖市| 安平县| 龙游县| 铁岭市| 宝丰县| 桐城市| 高淳县| 博野县| 朝阳区| 聂拉木县| 千阳县| 上蔡县| 大安市| 印江| 嘉禾县| 湛江市| 徐州市| 和政县| 柘荣县| 定结县| 竹山县| 庆城县| 宁海县| 托克逊县| 民乐县| 二手房| 临朐县| 德格县| 昆明市| 翼城县| 泗洪县| 荆州市|