chenjinlong

          2010年5月27日 #

          文件加密解密

          /**加密
            *
            */
           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. 在連接池的大?。≒oolSize)范圍內、最大限度地使用資源,縮短數據庫訪問的使用周期。

          例如: 物理連接數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代碼進行獲?。?br /> 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)編輯 收藏

          關于JSP幾個內置對象的用法

          JSp的session內置對象取值方法
          //創建session對象
          HttpSession session =requst.getSession();
          //設置session 對象的屬性值
          session.setAttribute("屬性名",值);
          取值
          Object object=session.getAttibute("屬性名")
          設置方法
          //設置響應回去的類型
          response.setContentType("text/html");
          //設置響應的字符編碼格式
          response.setCharacterEncoding("UTF-8");

          request(請求)
          //獲取請求屬性的值
          request.getParameter("屬性名");
          多用于表單提交和URL參數的傳遞的取值

           JSp內置對象生命周期:
           
          out 只在本jsp頁面使用  無生命周期
          request  生命周期 一次請求
          response 生命周期 一次響應
          session  生命周期  項目瀏覽器關閉時,生全周期結束,默認不操作項目超過30分鐘生命周期結束
          application 生命周期   當開啟Tomcat服務器時創建,關閉Tomcat服務器時結束生命周期  (作用:統計服務器訪問人數或流量)

           

          頁面跳轉:
          response.sendRedirect("admin/one.jsp")  重定向
          RequestDispatcher 請求跳轉
          兩者實現的效果相同
          二者的區別:
          1、
          URL 地址的變化用response.sendRedirect時,RequestDi.spatcher不會使URL地址進行變化。
          RepuestDispatcher 是服務器端請求機制的跳轉
          response.sendRedirect 是客戶端請求機制的重定向
          2、
          RequestDispatcher傳值通過JSP-Servlet-JSp形式直接傳入到下一個JSp頁面
          response.sendRedirect 傳值通過JSP-Servlet-JSP形式,只能夠傳遞到請求機制重定向這之前
          3、
          如果項目要跳轉到另外一個服務器的頁面時,用response.sendRedirect進行重定向
          4、
          我們盡量使用RequestDispatcher方式,因為是服務器響應,所以在web容器執行效率較高


          RequestDispatcher什么時候使用呢?
          項目中不進行頁面的交互跳轉的時候,例如一個界面的增、刪、改、查,或者相關聯同類型模塊之間的跳轉

          response.sendRedirect重定向什么時候使用呢?
          無關聯的不同模塊間跳轉使用,例如,用戶界面模塊跳轉到產品信息界面模塊

          5、
          RequestDispatcher基本上認定使用在Servlet里面
          response.sendRedirect 用在Servlet和JSP頁面較多


          重定向傳值 只影響request,不影響session的傳值

          session何時使用?
          傳值時盡量不要使用session
          購物車的實現必須使用session對象

          session.removeAttribute("name") 全部刪除物品
          如果選擇性刪除?
          傳入要刪除的購物信息主鍵id值,根據id值支查找集合中的對應信息,然后做集合中的刪除操作
          for(Product product : list){

              if(deleteid==product.getid()){
                     list.remove(product);
          }
          }
          session.setAttribute("gouwu",list)



          兩種提交方式的亂碼處理:

          post提交方式亂碼處理
          中文亂碼問題
          request.setcharacterEncoding("UTF-8");

          處理get方式提交的亂碼方式處理
          String names=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")

          posted @ 2010-05-27 20:54 chenjinlong 閱讀(1126) | 評論 (0)編輯 收藏

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临潭县| 深圳市| 广宗县| 分宜县| 来安县| 陆河县| 长子县| 夏河县| 海林市| 蕉岭县| 莱阳市| 武汉市| 临高县| 龙山县| 渝中区| 佛坪县| 阿克苏市| 隆化县| 遵化市| 洛南县| 九寨沟县| 大邑县| 厦门市| 建平县| 日喀则市| 色达县| 临沂市| 鄄城县| 莫力| 武宣县| 彰化市| 光山县| 九龙城区| 睢宁县| 信阳市| 德阳市| 和静县| 邯郸县| 白城市| 顺平县| 东至县|