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

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

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

    qqjianyue代碼工

    砌java代碼
    posts - 62, comments - 9, trackbacks - 0, articles - 10
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    ZIP壓縮IO涉及類(包括操作文件夾壓縮)

    ZipEntry標識zip文件中單個文件的入口,它也支持路徑加文件名,所以通過配置它,可以建立目錄層次的zip文件(見下例子)

    ZipOutputStreamwrite數據到zip文件的對象

    ZipInputStream,從zip文件中read數據的對象,其實基本上這個沒有作用

    ZipFile,獲取zip文件里面單個文件入口,getInputStream()等信息的對象,初始化ZipFile zf = new ZipFile(zip壓縮文件的File對象);

               Enumeration entries = =zf.entries()可以獲得所有的zip文件里面的文件入口。

    原理就是:entry指定單個文件相對zip壓縮文件內部根目錄的位置,Stream操作輸出輸入,ZipFile代表的就是整個zip文件


    示例代碼

    JAR壓縮類與ZIP是幾乎一模一樣對應的分別為:JarEntry JarFile JarInputStream JarOutputStream

    GZIP格式,只提供GZIPInputStream和GZIPOutputStream類,因為其作用是單純的壓縮與解壓,不維護文件結構。多數用于基于流的數據傳送過程實現數據壓縮。用法就如Bufer Stream一樣,是stream之間的又一個過濾類,只是Buffer提供緩沖,而GZIP提供壓縮。
    例如需要網絡傳送壓縮就可以這樣做:
    客戶端:
    Socket socket = new Socket(服務器地址字符串, 服務器端口);
    BufferOutputStream out = new BufferOutPutStream(new GZIPOutputStream(socket.getOutputStream()));
    然后就可以操作數據輸出了
    服務器端:
    ServerSocket sSocket =   new ServerSocket(服務器端口);
    Socket socket = sSocket.accept();
    BufferInputStream in = new BufferInputStream(new GZIPInputStream(socket.getInputStream()));
    然后就可以讀入數據了。
    明顯網絡數據傳送就加了一個壓縮,性能就可以提高了。

    posted @ 2008-10-07 14:15 Qzi 閱讀(1723) | 評論 (0)編輯 收藏

         摘要: 元字符

    \w 匹配字母或數字或下劃線或漢字等。等效于Unicode字符類別 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果用ECMAScript選項指定了符合 ECMAScript的行為,則\w只等效于[a-zA-Z_0-9]。

    \b 單詞的開頭或結尾,如果需要更精確的說法,\b匹配這樣的位置:它的前一個字符和后一個字符不全是\w

    . 除換行符以外的所有字符

    * 表示數量,任意數量,所以 .* 加起來就表示除換行符以外的任意數量字符,\w*表示任意字符

    + 是和*類似的元字符,不同的是*匹配重復任意次(可能是0次),而+則匹配重復1次或更多次。

    \d 單個數字

    \s 匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。

    ^ 匹配你要用來查找的字符串的開頭,$匹配結尾。和忽略大小寫的選項類似,有些正則表達式處理工具還有一個處理多行的選項。如果選中了這個選項,^和$的意義就變成了匹配  閱讀全文

    posted @ 2008-10-04 20:00 Qzi 閱讀(810) | 評論 (0)編輯 收藏

    Pattern類:
    例子:
            Pattern pattern = Pattern.compile("[,\\s]+");
            String[] result = pattern.split("one two three,four,five, six");
            for(int i = 0; i<result.length; i++){
                System.out.println(result[i]);
            }
    輸出結果是:
    one
    two
    three
    four
    five
    six
    Pattern類的靜態方法compile用來編譯正則表達式,在此[,\\s]+表示若干個","或者若干個空格匹配
    split方法使用正則匹配將字符串切割成各子串并且返回

    Matcher類:
    注意,Matcher的獲得是通過Pattern.matcher(CharSequence charSequence);輸入必須是實現了CharSequence接口的類
    常用方法:
    matches()判斷整個輸入串是否匹配,整個匹配則返回true
    例如下面會輸出true
            String str1 = "hello";
            Pattern pattern1 = Pattern.compile("hello");
            Matcher matcher1 = pattern1.matcher(str1);
            System.out.println(matcher1.matches());

    lookingAt()從頭開始尋找,找到匹配則返回true
    例如下面會輸出true
            String str2 = "hello yangfan!";
            Pattern pattern2 = Pattern.compile("hello");
            Matcher matcher2 = pattern2.matcher(str2);
            System.out.println(matcher2.lookingAt());

    find()掃描輸入串,尋找下一個匹配子串,存在則返回true
    例如下面將會將所有no替換成yes
            Pattern pattern = Pattern.compile("no");
            Matcher matcher = pattern.matcher("Does jianyue love yangfan? no;" +
                    "Does jianyue love yangfan? no;Does jianyue love yangfan? no;");
            StringBuffer sb = new StringBuffer();
            boolean find = matcher.find();
            while(find){
                matcher.appendReplacement(sb, "yes");
                find = matcher.find();
            }
            matcher.appendTail(sb);
            System.out.println(sb.toString());

    posted @ 2008-10-04 19:50 Qzi 閱讀(1050) | 評論 (0)編輯 收藏

    初始化:
    StringTokenizer st = new StringTokenizer(String str);
    默認的分隔符,即空白符(空格、制表符、回車)
    或者
    StringTokenizer st = new StringTokenizer(String str, String token);
    使用token作為分隔符

    常用函數:
    st.countTokens()返回token的數量
    st.hasMOreTokens()判斷時候當前位置之后是否還有token
    st.nextToken()返回當前位置到下一個token之前或者字符串結束之前的字符串

    簡單示例:
            String str = "wo shi li jian yue, what your name? yangfan?";
            String[] stringArray = new String[100];
            StringTokenizer st = new StringTokenizer(str, ",");
            int i;
            for(i = 0; st.hasMoreTokens(); i++){
                stringArray[i] = st.nextToken();
            }
            for(int j = 0; j<i; j++){
                System.out.println(stringArray[j]);
            }
    以","為分隔符,將會輸出","之前和之后的兩行字符串

    posted @ 2008-10-04 18:01 Qzi 閱讀(263) | 評論 (0)編輯 收藏

     

    創建 Filter(過濾器)

     實際開發中都需要開發一些很有用的過濾器,來解決中文表單提交問題啊,給請求和響

    應加入 GZIP壓縮功能啊,用戶權限控制啊,等等,然而遺憾的 MyEclipse不支持直接創建

    過濾器。在這里只好手工創建一個解決 Tomcat表單提交中文問題的過濾器。

     選擇菜單 File > New > Class,來創建一個名為 TomcatFormFilter 的類,包名為

    filters。然后把類的代碼修改為如下所示:

    package filters;

    import java.io.IOException;

    import javax.servlet.Filter;

    import javax.servlet.FilterChain;

    import javax.servlet.FilterConfig;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletRequestWrapper;

    public class TomcatFormFilter implements Filter {

     /**

       * Request.java

       * HttpServletRequestWrapper 進行擴充, 不影響原來的功能并能提供所

    有的 HttpServletRequest

       * 接口中的功能. 它可以統一的對 Tomcat 默認設置下的中文問題進行解決而只

    需要用新的 Request 對象替換頁面中的

       * request 對象即可.

       */

     class Request extends HttpServletRequestWrapper

     {

          public Request(HttpServletRequest request) {

            super(request);

          }

       /**

       * 轉換由表單讀取的數據的內碼.

       * ISO 字符轉到 GBK.

       */

       public String toChi(String input) {

          try {

              byte[] bytes = input.getBytes("ISO8859-1");

              return new String(bytes, "GBK");

            }

          catch (Exception ex) {

            }

          return null;

     }

          /**

           * Return the HttpServletRequest holded by this object.

           */

          private HttpServletRequest getHttpServletRequest()

          {

              return (HttpServletRequest)super.getRequest();

          }

       /**

       * 讀取參數 -- 修正了中文問題.

       */

          public String getParameter(String name)

          {

            return

    toChi(getHttpServletRequest().getParameter(name));

          }

       /**

       * 讀取參數列表 - 修正了中文問題.

       */

          public String[] getParameterValues(String name)

          {

              String values[] =

    getHttpServletRequest().getParameterValues(name);

              if (values != null) {

                for (int i = 0; i < values.length; i++) {

                  values[i] = toChi(values[i]);

                }

              }

              return values;

          }

     }

     public void destroy() {

     }

     public void doFilter(ServletRequest request, ServletResponse

    response,

       FilterChain chain) throws IOException, ServletException {

        HttpServletRequest httpreq = (HttpServletRequest)request;

       if(httpreq.getMethod().equals("POST")) {

       request.setCharacterEncoding("GBK");

     } else {

       request = new Request(httpreq);

     }

     chain.doFilter(request, response);

     }

     public void init(FilterConfig filterConfig) throws

    ServletException {

     }

    }

    清單 8.5 過濾器代碼

    然后修改 web.xml 加入 Servlet 定義,修改后的代碼清單如下所示:

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

     <servlet>

       <description>

          This is the description of my J2EE component

       </description>

       <display-name>

          This is the display name of my J2EE component

       </display-name>

       <servlet-name>LoginServlet</servlet-name>

       <servlet-class>servlets.LoginServlet</servlet-class>

     </servlet>

     <filter>

       <filter-name>TomcatFormFilter</filter-name>

       <filter-class>filters.TomcatFormFilter</filter-class>

     </filter>

     <filter-mapping>

       <filter-name>TomcatFormFilter</filter-name>

       <url-pattern>/*</url-pattern>

     </filter-mapping>

     <servlet-mapping>

       <servlet-name>LoginServlet</servlet-name>

       <url-pattern>/login.aspx</url-pattern>

     </servlet-mapping>

     <welcome-file-list>

       <welcome-file>index.jsp</welcome-file>

     </welcome-file-list>

    </web-app>

    清單 8.6加入了過濾器的 web.xml 內容

    清單中的粗斜體部分就是新加入的過濾器的映射信息。

    posted @ 2008-10-01 09:52 Qzi 閱讀(2479) | 評論 (1)編輯 收藏

    一.繼承關系和關聯聚集關系映射
    1.整個類層次使用一張表
    2.每個葉結點使用一張表,該表保存了該類自己的和所繼承的所有屬性
    3.每個類使用一張表,該表只保存OID以及對應類自己的屬性(不含所繼承的屬性)

    1.“1對1”或“1對多”關系的映射,簡單地利用外鍵即可
    2.“多對多”關系的映射,引入一個新的表,專門記錄這種“多對多”關系

    二.編程步驟:事前準備包括建立一個project并且加入外部庫
    新建一個Project HibernateSample,然后在Project上點右鍵,選擇Properties ? Java Build Path ? Libraries。選擇Add External JARs,然后將Hibernate目錄下的hibernate3.jar,以及Hibernate目錄下的lib文件夾中所有的jar文件添加進來。
    另外我們還必須有MySQL的JDBC驅動,用上面的辦法同樣把mysql-connector-java-3.1.12-bin.jar添加進我們的Build Path中。

    1.創建數據庫(例如User表)
    2.建立對應數據庫的類的屬性與操作(例如User類)
    3.編寫映射數據庫表hibernate mapping,命名為***.hbm.xml(例如User.hbm.xml)
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
     <class name="sample.User" table="user">
      <id name="id" column="id" type="java.lang.Integer">
       <generator class="native" />
      </id>
      <property name="name" column="name" type="java.lang.String" />
      <property name="age" column="age" type="java.lang.Integer" />
     </class>
    </hibernate-mapping>
    明顯可見關注點包括
    A)class中包中的類與數據庫中table的對應
    B)property中 類中ID和屬性與table中字段的對應

    4.編寫Hibernate配置文件hibernate configurarion file,通常命名:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
     <session-factory>
      <!-- 是否顯示實際操作數據庫時的SQL -->
      <property name="show_sql">true</property>
      <!-- SQL方言,這邊設定的是MySQL -->
      <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
      <!-- JDBC驅動程序 -->
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <!-- JDBC URL -->
      <property name="connection.url">jdbc:mysql://localhost/Sample</property>
      <!-- 數據庫用戶名 -->
      <property name="connection.username">root</property>
      <!-- 數據庫密碼 -->
      <property name="connection.password">123456</property>
      <!-- 以下設置對象與數據庫表格映像文件 -->
      <mapping resource="sample/User.hbm.xml"/>
     </session-factory>
    </hibernate-configuration>
    關注點包括:
    A)數據庫路徑, 數據庫用戶名, 數據庫密碼,
    B)還有就是指定數據庫映射文件mapping resource

    5.配置log4j.properties
    在src目錄下點右鍵,選擇import,然后選擇General ? File System,接著選擇Hibernate文件夾下的etc文件夾,再選擇log4j.properties文件,最后選擇Finish。
    關鍵配置文件:
    hbm是映射配置
    cfg是密碼,用戶,以及hbm指定配置
    properties是用于配置當前數據庫連接的屬性配置

    6.編程操作數據庫過程
    使用對象增加數據項:
    A)Configuration配置Configuration config = new Configuration().configure();
    B)Session工廠獲得SessionFactory sessionFactory = config.buildSessionFactory();
    C)Session獲得Session session = sessionFactory.openSession();
    D)Transaction事務啟動Transaction tx = session.beginTransaction();
    E)建立映射數據的實體類(例如User的一個實例)
    F)session操作(例如session.save(user)插入到數據庫一個user的對象)
    G)關鍵的Transaction事務提交,tx.commit();
    H)清理包括Transaction對象,session對象,sessionFactory對象的有順序清理

    使用Criteria查詢數據
    A)配置Configuration,SessionFactory,Session與上面相同
    B)創建Criteria criteria=session.createCriteria(User.class);
    C)創建User列表List users = criteria.list();
    D)使用迭代器Iterator iterator = users.iterator();
    E)iterator.hasNext(),iterator.next()的使用
    F)criteria.add(Expression.eq("name","hibernateUser2"));加上查詢約束
    G)users = criteria.list();將會按照查詢約束得到列表.

    使用鼓勵的HQL的Query查詢
    A)創建Query例如Query query = session.createQuery("from User");
    B)獲得數據List uers = query.list();
    C)遍歷器使用Iterator iterator = users.iterator();又如iterator.hasNext();和iterator.next();
    D)使用過濾查詢
    query = session.createQuery("from User user where user.name like ?");
    query.setParameter(0, "hibernateUser2");Query的setParameter()方法第一個參數是指定 ? 出現的位置,從 0 開始,第二個參數則是設定查詢條件。
    然后再List uers = query.list();獲得的將是滿足username==hibernateUser2的條件的結果
    E)清除session和sessionFactory使用close方法.


    hibernate_rar

    posted @ 2008-10-01 09:49 Qzi 閱讀(345) | 評論 (0)編輯 收藏

    • validate: validate the project is correct and all necessary information is available
    • compile: compile the source code of the project
    • test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
    • package: take the compiled code and package it in its distributable format, such as a JAR.
    • integration-test: process and deploy the package if necessary into an environment where integration tests can be run
    • verify: run any checks to verify the package is valid and meets quality criteria
    • install: install the package into the local repository, for use as a dependency in other projects locally
    • deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

    There are two other Maven lifecycles of note beyond the default list above. They are

    • clean: cleans up artifacts created by prior builds
    • site: generates site documentation for this project

    官網文章:http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

    posted @ 2008-09-16 17:06 Qzi 閱讀(506) | 評論 (0)編輯 收藏

    參考站點:都是英文站點。
    第一步站:http://www.eclipse.org/subversive/downloads.php
    里面會有介紹安裝的總領式介紹,他說需要兩個升級來支持這個插件,一個在本站可下,一個需要在外部站點下。
    其中提供三個版本release,他推薦使用第二個。
    第二步站:http://www.eclipse.org/subversive/documentation/gettingStarted/aboutSubversive/install.php
    詳細的安裝步驟,是按照Ganymede Release介紹的,其實將那幾個update site改成Latest Release的update site選上相同的
    包,也是一樣的。但是注意:
    最后一個Subversive Integration Plug-in's就不要好啦,要了也裝不上,會報依賴不滿足的不能安裝的
    第三步站:http://www.polarion.com/products/svn/subversive.php?src=eclipseproject
    這個就是外部的提供另一個站點,提供connetor和Integration Plug-in's(裝不上)的站點。

    我用到的update site是:http://download.eclipse.org/technology/subversive/0.7/update-site/
    http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/

    http://www.polarion.org/projects/subversive/download/integrations/update-site/ 這個也用不上,其實

    posted @ 2008-09-05 11:07 Qzi 閱讀(1248) | 評論 (0)編輯 收藏

    1 String lastUrl = request.getHeader("Referer");
    不好意思,下面的說錯了(所以都標紅了),不過的確這個方法在有框架的時候性能還不清楚,
    貌似是:
    在多個框架中,IE的情況是:如果將在frame觸發的鏈接顯示在frame2中,frame2的Referer就不會改變。firefox的情況是,會變,所以firefox處理的更好。
    請有識之士教導。

    使用到方法來獲得上一次路徑的請注意了,如果頁面涉及到框架frame的話,請留意firefox與IE的不同。

    假如頁面具有整個頁面,上,左,右三個frame四個所謂的windows,假設每一個frame都有自己地址欄,當然真實的地址欄只有整個頁面的一個。
    我出現的情況是:
    1)firefox中:一個右frame的jsp頁面進入的struts的action,在這個action使用這個函數,能夠獲得右frame地址欄原來的字符串。在右frame頁面里使用這個函數,也能夠獲得右frame原來的地址欄的字符串。 算是比較正常吧,獲得所謂的referer的字符串嘛。
    2)IE中:一個右frame的jsp頁面進入的一個action,使用這個函數,獲得的是整個頁面的地址欄原來的字符串。在右frame頁面里使用這個函數,卻獲得的是右frame地址欄原來的字符串。 這樣就不正常啦,我在action里使用獲得的竟然是整個頁面的地址欄原來的字符串,那樣我new ActionForward(這個url)的時候,就會出現框架嵌套框架啦。


    這些問題應該是跟瀏覽器的實現有關。

    我用這個函數主要是想實現返回上一步的功能。但是上一步的路徑獲得那么可預測,這種方法獲得之前頁面看來是不能信賴地用的。

    posted @ 2008-09-02 16:41 Qzi 閱讀(329) | 評論 (0)編輯 收藏

    下面的stirng對象變量都縮寫成str

    四個方法search,split,replace, match

    詳細解說

    search用法:str.search("子串")

    如果str中存在子串,則返回子串開頭字符在str中的索引(即位置,當然是0或者正數),若str中不存在匹配子串則返回-1

    例如:"JavaScript regular expressions are powerful!".search("pow")返回的是35,因為pow在前面字符串的第35位置

    split用法:str.split("分隔字符")

    返回由str中由用戶所定分隔字符的各字符串,字符串間由,號隔開

    例如: "10 / 3 / / 4 / 7 / 9".split    ("/"),返回的是10, 3,空格, 4, 7, 9,認真看一下會發現數字與逗號間也有空格

    文章中有這句話:Using split() with a regular expression argument (rather than a string argument) allows you the flexibility of ignoring multiple whitespace or delimiter characters.

    我這里明顯用的是普通字符串參數,下面用的是正則式參數

    "10 / 3 / / 4 / 7 / 9".split(/[ \/]+/);

    返回的是:10,3,4,7,9,注意這個串與上面串在空格的不同,數字與逗號間沒有空格,這就是所謂的忽略空格

    replace用法:str.replace("匹配子串","替換匹配子串的串")

    如果匹配子串在原串中找不到,將不進行替換,返回是原串,若能找到匹配子串,則返回替換后的串

    例如:var s = "Hello. Regexps are fun.";s = s.replace(".", "!");

    嘆號將代替第一個點號然后返回串,這是此函數特點,只替換第一處匹配的地方,如果要替換每處匹配的地方,需要用到正則式,正則式的作用很大,但是我只會皮毛,在此不舉例。

    match用法:str.match("匹配子串")

    若沒有匹配子串,則返回空,若存在匹配子串,則返回子串

    posted @ 2008-08-31 21:03 Qzi 閱讀(291) | 評論 (0)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 下一頁 
    主站蜘蛛池模板: 亚洲国产一成久久精品国产成人综合| 69pao强力打造免费高清| 免费国产小视频在线观看| 亚洲国产区男人本色| 免费A级毛片无码久久版| 日韩成人毛片高清视频免费看| 久久久久亚洲?V成人无码| 日韩精品无码一区二区三区免费 | 欧美最猛性xxxxx免费| 美美女高清毛片视频黄的一免费 | 中文字幕精品亚洲无线码二区| 久久99热精品免费观看动漫| 一区二区亚洲精品精华液| 亚洲中文字幕无码专区| 91成人免费在线视频| a一级爱做片免费| 国产成人精品亚洲2020| 国产亚洲精品资在线| 美女视频黄免费亚洲| 韩日电影在线播放免费版| 亚洲日本VA中文字幕久久道具| 久久久青草青青亚洲国产免观 | 亚洲一区二区三区无码中文字幕| 一个人看的www在线观看免费| 亚洲五月午夜免费在线视频| 在线观看亚洲AV每日更新无码| 亚洲精品少妇30p| 免费看美女被靠到爽的视频| 99视频在线看观免费| eeuss在线兵区免费观看| 亚洲区日韩精品中文字幕| 老汉色老汉首页a亚洲| 亚洲精品国产综合久久一线| 成年女人视频网站免费m| 7x7x7x免费在线观看| 国产乱子伦精品免费视频| 色网站在线免费观看| 国产成人亚洲综合一区| 4444亚洲国产成人精品| 亚洲精品无码高潮喷水在线| 亚洲精品无码成人片在线观看 |