隨筆-8  評論-4  文章-0  trackbacks-0
            2008年4月5日
                   Filter是Strusts2中非常重要的機制,而Filter的配置就放在Web.xml文件中,如下:

          <?xml version="1.0" encoding="GBK"?>
          <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

           <!-- 定義Struts2的FilterDispathcer的Filter -->
              <filter>
                  <filter-name>struts2</filter-name>
                  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
              </filter>

           <!-- FilterDispatcher用來初始化struts2并且處理所有的WEB請求。 -->
              <filter-mapping>
                  <filter-name>struts2</filter-name>
                  <url-pattern>/*</url-pattern>
              </filter-mapping>
          </web-app>

          posted @ 2008-04-05 16:52 怡眾科技 閱讀(4204) | 評論 (1)編輯 收藏
            2007年12月7日
          隨著阿里巴巴在香港的上市,今年冬天,馬云注定將成為最引人矚目的中國企業家。在《阿里巴巴:天下沒有難做的生意》一書的序言寫道:“如果說楊致遠是互聯網領域里第一個世界級的華人企業家,那么馬云就可能是下一個。楊致遠是商業的天才,他發現了互聯網搜索的價值,而馬云則是天才的商人,他把一團讓人手足無措的亂麻織成了一匹錦繡。”今天,很多人堅持這樣的判斷。
            要總結馬云的成功秘訣,應該可以羅列出20條以上,其中包括他的奇異長相和一口流利的英語。不過,在眾多答案中,第一條更為專注。
            1999年的春天,馬云從北京鎩羽回到杭州,在城郊的湖畔花園的家里創辦阿里巴巴網站。公司成立的那一天,家里的墻壁突然滲水了,他對大家說,我出去找點材料。過一會兒,他抱了一大卷舊報紙回來,然后大家一起把它們貼在墻上,就這樣開始了公司的第一天。
            阿里巴巴當時總共18個人,馬云對全體員工發表開業演講:“我們要辦的是一家電子商務公司,我們的目標有三個。”馬云的演講很能煽動人,“第一,我們要建立一家生存80年的公司。”
            大家一邊鼓掌,一邊想:“反正能不能活到80年,我們可能誰也看不到。”
            “第二,我們要建設一家為中國中小企業服務的電子商務公司。”大家鼓掌,在這一點上誰也沒有疑問。
            “第三,我們要建成世界上最大的電子商務公司,要進入全球網站排名前十位。”大家你看我,我看你,每個人的心里都在犯嘀咕,“這個目標太具體化了,就憑我們這幾桿槍?”
            后來馬云告訴我,他搞電子商務,從那一天起就鐵了心。
            2001年,全球互聯網遭遇大寒流,那年冬天,他飛赴日本向投資阿里巴巴的軟銀總裁孫正義匯報公司情況,那些日子,孫正義投資的上百家互聯網公司亂成了一團,大家都不知道未來的出路在哪里。那天,前來匯報的各國CEO一個接一個地進去出來,輪到馬云了,當他簡短地講完阿里巴巴的境況后,孫正義幽幽地說:“今天前來匯報的CEO,所說的話都與我當年投資他們時說的不一樣了,只有你還在說當年說過的話。”當時,曾經當過一天世界首富的孫正義的資產已縮水95%,很多投資項目早已面目全非,只有阿里巴巴還是那間他當初投資的電子商務公司,也是軟銀最成功的投資項目之一。
            時間又轉到了2002年底,互聯網世界開始回暖。中國著名的網絡公司如新浪、搜狐等相繼實現盈利,而一些頗有市場前景的互聯網項目也初露端倪,當時阿里巴巴的網商用戶已經超過400萬家,馬云面臨新的誘惑。
            “阿里巴巴擁有那么多有價值的注冊客戶,具備了開拓任何領域的最佳條件。”幾乎所有的人都這么認為。當時,擺在馬云面前的道路有三條。
            第一條道路,是發展短信業務,以搜狐、網易為代表的中國門戶網站均在這個聚寶盆里淘到了大金塊,短信市場已非常成熟,阿里巴巴完全有搶奪蛋糕的能力。
            第二條道路,是投身網絡游戲領域,當時全中國還沒有一家大型網絡游戲公司,陳天橋的盛大才剛剛起步,如果阿里巴巴轉投此領域,應當會有大作為。
            第三條道路,是繼續在尚未成熟的電子商務的“老路”上走下來。
            馬云的抉擇是,不改初衷,一條道走到黑。今天,阿里巴巴沒有成為另一家網易,馬云也失去了成為“中國首富”的機遇。但是,在電子商務領域,阿里巴巴一路狂奔,無人可追。
            所有的成功都是抵抗誘惑的結果。馬云的專注包括三個詞,一是電子商務,二是中國市場,三是中小經營者。目前,阿里巴巴旗下的所有業務,包括淘寶網、支付寶莫不如此,甚至在我看來,他兩年前出手收購的雅虎如果要獲得復蘇,其戰略起點也還是要從自己的專注優勢中去尋找。阿里巴巴上市后,馬云手握重金,又有了一次討伐四野的機遇,不過,“錢多了,犯錯誤的機會也就多了”,不知道馬云還記得當年在舊報紙糊成的墻下說過的那席話嗎?1947年6月6日,亨利 · 福特去世的時候,《紐約時報》撰文說:“當他來到人世時,這個世界還是馬車的時代,當他離開人世時,這個世界已經成了汽車世界。”汽車其實不是福特發明的,不過他讓它成為了一個改變美國的工具。今天的馬云其實也有這樣的機會,電子商務不是他發明的,不過阿里巴巴可能成為改變中國商品和“中國制造”命運的重要推力之一。
          posted @ 2007-12-07 16:44 怡眾科技 閱讀(454) | 評論 (1)編輯 收藏
            2007年12月5日

          Struts 2內嵌了Dojo工具包,實現對Ajax的支持。下面是一個用戶名和密碼都是Admin的Login應用。

           1、在struts.xml中加入一個Action mapping

          xml 代碼

           

          1. <action name="showAjaxLoginForm">  
          2.        <result>/pages/ajaxlogin.jspresult>  
          3. action>  
          4.   
          5. <action name="ajaxLogin" class="net.roseindia.Login">  
          6.        <result name="input">/pages/ajaxlogin.jspresult>  
          7.        <result name="error">/pages/ajaxlogin.jspresult>  
          8.        <result>/pages/ajaxloginsuccess.jspresult>  
          9. > 

           

           2、用Ajax編寫一個Login頁面ajaxlogin.jsp

           這個頁面使用了 標簽, 這個標簽能通過Ajax tags載入頁面內容。jsp頁面還使用了標簽,這個標簽可以利用Ajax來更形頁面元素和提交一個form。當出現錯誤是,標簽執行并顯示錯誤信息。

          xml 代碼 
          1. <%@ taglib prefix="s" uri="/struts-tags"%>  
          2. <html>  
          3.   <head>  
          4.     <s:head theme="ajax" debug="true"/>  
          5.   head>  
          6.   <body>  
          7.     <s:div id="loginDiv" theme="ajax">  
          8.     <div style="width: 300px;border-style: solid">  
          9.       <s:form action="ajaxLogin"  validate="true">  
          10.         <tr>  
          11.           <td colspan="2">  
          12.             Login   
          13.           td>  
          14.         tr>  
          15.         <tr>  
          16.           <td colspan="2">  
          17.             <s:actionerror />  
          18.             <s:fielderror />  
          19.           td>  
          20.         tr>     
          21.           <s:textfield name="username" label="Login name"/>  
          22.           <s:password name="password" label="Password"/>  
          23.           <s:submit theme="ajax" targets="loginDiv" notifyTopics="/ajaxLogin"/>       
          24.       s:form>  
          25.     div>  
          26.     s:div>  
          27.   body>  
          28. html>   

           

           3、編寫一個驗證用戶名和密碼的Action類Login.java

          如果驗證成功返回SUCCESS,失敗就返回ERROR

          java 代碼 
          1. package net.roseindia;   
          2.   
          3. import com.opensymphony.xwork2.ActionSupport;   
          4. import java.util.Date;   
          5.   
          6. /**  
          7.  * Validate a user login.  
          8.  */  
          9. public class Login extends ActionSupport {   
          10.   
          11.     public String execute() throws Exception {   
          12.         System.out.println("Validating login ... ...");   
          13.         System.out.println("User = " + getUsername());   
          14.         if (!getUsername().equals("Admin") || !getPassword().equals("Admin")) {   
          15.             System.out.println("Validating error ! User = " + getUsername());   
          16.             addActionError("Invalid user name or password! Please try again!");   
          17.             return ERROR;   
          18.         } else {   
          19.             System.out.println("Validating success !");   
          20.             return SUCCESS;   
          21.         }   
          22.     }   
          23.   
          24.     // ---- Username property ----   
          25.   
          26.     /**  
          27.      * Field to store User username. 
          28.      */  
          29.     private String username = null;   
          30.   
          31.     public String getUsername() {   
          32.         return username;   
          33.     }   
          34.   
          35.     public void setUsername(String value) {   
          36.         username = value;   
          37.     }   
          38.   
          39.     // ---- Username property ----   
          40.   
          41.     /**  
          42.      * Field to store User password. 
          43.      */  
          44.     private String password = null;   
          45.   
          46.     public String getPassword() {   
          47.         return password;   
          48.     }   
          49.   
          50.     public void setPassword(String value) {   
          51.         password = value;   
          52.     }   
          53.   
          54. }   

           4、編寫一個登錄成功頁面ajaxloginsuccess.jsp

          xml 代碼
          1. <html>  
          2.   <head>  
          3.     <title>Login Successtitle>  
          4.   head>  
          5.   <body>  
          6.     <p align="center"><font color="#000080" size="5">Login Successful !font>p>  
          7.     <h1> Welcome to <%=request.getParameter("username")%>  h1>  
          8.   body>  
          9. html>   

          5、訪問下面連接 http://localhost:8080/s2ajax/showAjaxLoginForm.action

          posted @ 2007-12-05 00:01 怡眾科技 閱讀(987) | 評論 (0)編輯 收藏
            2007年12月4日

           

          http://www.theserverside.com
          權威的的J2EE站點,有最新的消息發布和很多技術文章以及很好的論壇,進行J2EE相關技術
          的全方位的討論,也有電子書可以下載。

          http://www.javaworld.com
          很著名的國外的java技術站點。有一段時間由于一些原因停止了更新,不過不久前有開始了
          更新的工作。

          http://www-900.ibm.com/developerWorks/cn/java/index.shtml
          IBM公司的developerWorks Java技術專區,有很多關于J2EE的技術文章,并且文章的質量很
          高。

          http://www.jdon.com
          國內不錯的J2EE技術站點,有很多技術文章和源代碼。以前推出過漢化的JIVE版本,現在有
          了自己的J2EE框架產品。

          http://www.huihoo.com
          專注于中間件技術的站點和論壇,國內開源軟件做的相當不錯的組織,推出了自己的J2EE服
          發信人: petbear (雨中的人), 信區: J2EE
          標  題: J2EE學習經驗和流程
          發信人: oosky (天天), 信區: J2EE
          標  題: J2EE站點資源
          發信站: BBS 水木清華站 (Wed Mar 31 17:23:27 2004), 轉信


          Java Ftp
          ftp://java:java@219.224.190.248:4021 (歡迎大家使用)
          很多JAVA資源,感謝前輩的工作:)

          務器產品JFox以及相關的
          OpenSource 產品。

          http://gceclub.sun.com.cn
          SUN的中文技術社區,有SUN 的技術人員的支持維護,很多不錯的文章,在線講堂欄目辦的
          很有特色。推出了新
          版的技術論壇,但是人氣一直不是很旺。

          http://www.cnjsp.org
          以前做過JSP的論壇,現在定位于Java技術服務,提供一些J2EE的技術文章,還不錯。

          http://www.chinajavaworld.net
          應該是國內最著名和熱門的java技術站點了,有很j2ee的信息和技術文章和很好的論壇。

          http://www.csdn.net
          程序員都知道的網站:)也把它列進來。有最新的java業界動態和技術文章可以查找。
          http://cwiki.apache.org/S2WIKI/projects-using-webwork-or-struts2.html
          自己喜歡的地方,收藏
          http://sourceforge.net
          很不錯的開源社區

          posted @ 2007-12-04 23:15 怡眾科技 閱讀(265) | 評論 (0)編輯 收藏

          作者:lgx522 發表時間:2007年04月19日 18:04 回復此消息回復

          原貼網址: http://www.jdon.com/jivejdon/thread/31553.html

           

          經過數年的“框架大戰”,Java界的各種框架找到了自己應有的位置。

          Spring+Hibernate+Struts已成為Java開發的主流體系。在這個體系中,Spring+Hibernate的地位應該說短期內是難以撼動了。除了新興的Jboss Seam作為挑戰者之外,幾乎難有勁敵。有趣的是當初Spring、Hibernate作為挑戰者,將官方的EJB成功挑落馬下;這次反倒是官方的EBJ3成了挑戰者,不知結局如何。

          Java B/S編程中歷來戰火最激烈的其實還在Web層,框架的數量最多,爭議最大。
          一切由Struts而起,而Struts最終也坐穩了第一個時代的王座。在技術層面,Struts 1.x已經被無數人抱怨過、批評過,但終于還是穩坐王位,這充分說明了習慣的力量。“穩定壓倒一切”,這句話在IT技術領域仍舊適用。
          其實IT應用技術,什么新鮮玩意并不難學。難的是標準化和規范化。每個程序員都有自己的思路和習慣,寫出來的代碼自然是五花八門。Java何以成為編程界的老大,很重要的一點在于Java的規范化。這種規范化很高的語言適用于多人合作的大型項目,便于溝通和理解,也就便于集成和維護。Java世界為什么會框架橫飛,說到底還是規范化的需要。純JSP和Struts寫Web誰快,擺明了是JSP。那撐飽了用Struts?原因在于100個人寫出來的JSP,有100種寫法;而100個人寫出來的Struts,基本相似。Struts之成功,正緣于其在Java Web層的規范化方面所做出的貢獻。

          然而長江后浪推前浪,Struts 1.x的技術缺陷畢竟是隱患。
          Sun力推JSF,打算一雪Web層框架缺失之恥。可惜JSF既要沿用Swing的技術路線,又要學ASP.NET,還要照顧產商的IDE,結果搞了個四不象,弄得里外不是人。當然Sun的技術實力畢竟是超強的,只要別重蹈EJB的覆轍,拿出點專斷的精神(像這兩年的NetBeans),做出像Swing那樣水準的東西,JSF當大有作為。JSF現在比較有優勢的是對Ajax的集成,這一點走在了其他框架的前面。

          Struts就更沒有志氣了,把WebWork換了個標簽,湊出個Struts2,Bug多多。說實在話,根本不如原版的WebWork。如果不是靠了原先的fans捧場,根本就沒得混。不過Struts原本就不是以技術取勝的,靠的是搶占先機帶來的習慣優勢。如果原先的fans們在這兩年內都能轉到Struts2,那么Struts二世仍將雄霸天下。

          綜上所述,未來兩年,JSF與Struts將展開Java Web框架的最終戰爭。
          以筆者愚見,結局有二:一是不論Struts還是JSF獲勝,Java Web層都將結束混戰的局面,這對Java Web開發的標準化是非常有利的,并有助于鞏固Java在B/S界的地位;二是Struts1.x、Struts2、JSF三分天下,必然從整體上削弱Java在B/S界的競爭力,并將進一步被RoR、ASP.NET、PHP所蠶食。

          posted @ 2007-12-04 23:05 怡眾科技 閱讀(203) | 評論 (0)編輯 收藏

          Design Pattern Practice

          1.序
          本文從一個簡單的多列排序的例子入手,由淺入深地講解Design Pattern(設計模式)的目的、分析和實踐。
          文中的例子用到Compositor Pattern和Decorator Pattern。
          同時,文中的例子也提供了一類問題(條件組合問題)的解決方案。

          2.問題的引入
          Design Pattern(設計模式)的目標是,把共通問題中的不變部分和變化部分分離出來。不變的部分,就構成了Design Pattern(設計模式)。這一點和Framework(框架)有些象。
          下面舉個排序的例子,說明如何抽取問題中的不變部分。
          假設一個Java類Record有field1,field2,field3等字段。


          public class Record{
          public int field1;
          public long field2;
          public double filed3;
          };


          我們還有一個Record對象的數組Record[] records。我們需要對這個數組按照不同的條件排序。
          首先,按照field1的大小從小到大進行升序排序。
          排序函數如下:


          void sort(Record[] records){
          for(int i =…){
          for(int j=…){
          if(records[ i ].field1 > records[ j ].field1)
          // swap records[ i ] and records[ j ]
          }
          }
          }


          其次,按照field2的大小從小到大進行升序排序。

          void sort(Record[] records){
          for(int i =…){
          for(int j=…){
          if(records[ i ].field2 > records[ j ].field2)
          // swap records[ i ] and records[ j ]
          }
          }
          }


          再次,按照field3的大小從小到大進行升序排序。
          ...
          這種要求太多了,我們寫了太多的重復代碼。我們可以看到,問題的變化部分,只有判斷條件部分(黑體的if條件判斷語句)。
          我們可以引入一個Comparator接口,把這個變化的部分抽取出來。

          public interface Comparator(){
          public boolean greaterThan(Record a, Record b);
          };


          sort函數就可以這樣寫(把判斷條件作為參數):


          void sort(Record[] records, Comparator compare){
          for(int i =….){
          for(int j=….){
          if(compare.greaterThen(records[ i ], records[ j ]))
          // swap records[ i ] and records[ j ]
          }
          }
          }


          這樣,對應第一個要求――對records數組按照field1的大小排序。
          我們可以做一個實現Comparator接口的CompareByField1類。


          public class CompareByField1 implements Comparator{
          public boolean greaterThan(Record a, Record b){
          if(a.filed1 > b.filed1){
          return ture;
          }
          return false;
          }
          }


          sort函數的調用為:

          sort(records, new CompareByField1());


          這樣,對應第一個要求――對records數組按照field2的大小排序。
          我們可以做一個實現Comparator接口的CompareByField2類。

          public class CompareByField2 implements Comparator{
          public boolean greaterThan(Record a, Record b){
          if(a.filed2 > b.filed2){
          return ture;
          }
          return false;
          }
          }
          [code]

          sort函數的調用為:
          [code]
          sort(records, new CompareByField2());


          按照C++ STL的叫法,這里的sort稱為算法(Algorithm),records稱為容器(集合),Comparator稱為函數對象(Function Object)。

          JDK的java.util.Collections類的sort方法和java.util.Comparator接口就是按照這樣的思路設計的。下面我們來看看如何應用sort和Comparator解決多列排序問題。

          buaawhl

          發表文章: 18
          注冊時間: 2004年07月06日 10:53
          Re: 這么多設計模式,我的看法和理解 發表: 2004年07月09日 18:37 回復
          3.多列排序問題

          3.1排序條件的數量

          我們知道,SQL語句能夠實現強大的排序功能,能夠按照不同字段的排列進行排序,也能夠按照升序,降序排序。比如下面的語句。
          order by field1 asc, field2 asc, field3 desc。

          這個排序條件按照field1的升序,field2的升序,field3的降序排序。
          注意,排在前面的字段具有較高的優先級。
          比如,兩條紀錄A和B,滿足如下條件:
          (1)A.field1 > B.field1,(2)A.field2 < B.field2。
          這時如果按照order by field1, field2語句排序,那么 A > B。
          如果上述條件中的(1)A.field1 > B.field1變化為A.field1 == B.field1。這時,條件(2)就會起作用。這時,A < B。

          我們來看看在Java中如何實現這種靈活而強大的排序。
          我們還是以上一節的Record類為例。Record類有3個字段,我們來看一看,有多少種可能的排序條件。
          (1)按field1排序。(2)按field2排序。(3)按field3排序。(4)按field1,field2排序。(5)按field1升序,按field2降序排序…...

          各種排序條件的排列組合,大概共有30種。而且,隨著字段個數的增長,排序條件的個數呈冪級數的增長。
          按照上一節的sort和Comparator方法,如果我們需要達到按照任意條件進行排序的目的,那么我們需要為每一個排序條件提供一個Comparator,我們需要30個Comparator類。:-)

          當然,我們不會這么做,我們能夠進一步提取這個問題中的相同重復部分,優化我們的解決方案。

          3.2 問題分析
          我們來分析這個問題中變化的部分和不變的部分。
          上面所有的排序條件中,不變的部分有3部分:
          (1)A.field1和B.field1的比較,
          (2)A.field2和B.field2的比較,
          (3)A.field3和B.field3的比較;

          變化的部分有兩部分,
          (1)這三種比較條件的任意組合排列,
          (2)升序和降序。

          根據這段分析,我們引入兩個類,ReverseComparator類和CompositeComparator類。
          CompositeComparator類用來解決字段的組合排列問題。
          ReverseComparator類用來解決字段的升序、降序問題。

          3.3 ReverseComparator類的代碼

          import java.util.Comparator;

          public class ReverseComparator implements Comparator{
          /** the original comparator*/
          private Comparator originalComparator = null;

          /** constructor takes a comparator as parameter */
          public ReverseComparator(Comparator comparator){
          originalComparator = comparator;
          }

          /** reverse the result of the original comparator */
          public int compare(Object o1, Object o2){
          return - originalComparator.compare(o1, o2);
          }
          }


          3.4 CompositeComparator類的代碼

          import java.util.Comparator;
          import java.util.Iterator;
          import java.util.List;
          import java.util.LinkedList;

          public class CompositeComparator implements Comparator{
          /** in the condition list, comparators' priority decrease from head to tail */
          private List comparators = new LinkedList();

          /** get the comparators, you can manipulate it as need.*/
          public List getComparators(){
          return comparators;
          }

          /** add a batch of comparators to the condition list */
          public void addComparators(Comparator[] comparatorArray){
          if(comparatorArray == null){
          return;
          }

          for(int i = 0; i < comparatorArray.length; i++){
          comparators.add(comparatorArray[i]);
          }
          }

          /** compare by the priority */
          public int compare(Object o1, Object o2){
          for(Iterator iterator = comparators.iterator(); iterator.hasNext();){
          Comparator comparator = (Comparator)iterator.next();

          int result = comparator.compare(o1, o2);

          if(result != 0){
          return result;
          }
          }

          return 0;
          }
          }


          3.5 Comparator的組合應用
          這一節講述上面兩個類的用法。
          對應前面的排序問題,我們只需要3個Comparator類:
          (1)Field1Comaprator;
          (2)Field2Comaprator;
          (3)Field3Comaprator。

          下面舉例說明,如何組合這些Comparator實現不同的排序條件。
          (1)order by field1, field2


          CompoiComparator myComparator = new CompoiComparator();
          myComparator. addComparators(
          new Comparator[]{
          new Field1Comaprator (), new Field2Comaprator ()};
          );

          // records is a list of Record
          Collections.sort(records, myComparator);

          (1)order by field1 desc, field2

          CompoiComparator myComparator = new CompoiComparator();
          myComparator. addComparators(
          new Comparator[]{
          new ReverseComparator(new Field1Comaprator ()),
          new Field2Comaprator ()};
          );

          // records is a list of Record
          Collections.sort(records, myComparator);



          這里提供的ReverseComparator類和CompositeComparator類都采用了Decorator Pattern。
          CompositeComparator類同時也是Composite Pattern。

          4.過濾條件的排列組合
          過濾條件問題也屬于條件組合問題的范疇。比如JDK提供的java.io.File類提供了一個文件過濾方法listFile(FileFilter),用戶可以定制不同的FileFilter,實現不同的過濾條件,比如文件時間在某個范圍內;文件后綴名,文件名符合某種模式;是目錄,還是文件,等等。
          同樣,我們可以應用上述的解決方法,實現靈活的過濾條件組合――用一個CompositeFilter類任意組合過濾條件,用一個ReverseFilter類作為排除條件。

          4.1 CompositeFilter類的代碼

          import java.io.FileFilter;
          import java.io.File;

          import java.util.Iterator;
          import java.util.List;
          import java.util.LinkedList;

          public class CompositeFilter implements FileFilter {

          /** in the filter list, every condition should be met. */
          private List filters = new LinkedList();

          /** get the filters, you can manipulate it as need.*/
          public List getFilters(){
          return filters;
          }

          /** add a batch of filters to the condition list */
          public void addComparators(FileFilter[] filterArray){
          if(filterArray == null){
          return;
          }

          for(int i = 0; i < filterArray.length; i++){
          filters.add(filterArray[i]);
          }
          }

          /** must meet all the filter condition */
          public boolean accept(File pathname) {
          for(Iterator iterator = filters.iterator(); iterator.hasNext();){
          FileFilter filter = (FileFilter)iterator.next();

          boolean result = filter.accept(pathname);

          // if any condition can not be met, return false.
          if(result == false){
          return false;
          }
          }

          // all conditions are met, return true.
          return true;
          }
          }


          4.2 ReverseFilter類的代碼


          import java.util.Comparator;

          public class ReverseComparator implements Comparator{
          /** the original comparator*/
          private Comparator originalComparator = null;

          /** constructor takes a comparator as parameter */
          public ReverseComparator(Comparator comparator){
          originalComparator = comparator;
          }

          /** reverse the result of the original comparator */
          public int compare(Object o1, Object o2){
          return - originalComparator.compare(o1, o2);
          }
          }

          posted @ 2007-12-04 22:48 怡眾科技 閱讀(1320) | 評論 (1)編輯 收藏
            2007年12月3日

           
          (1)部署lib庫中文件Struts+ibatis,共6個。
          (2)配置struts2中的web.xml,目的是讓Struts2來解釋web應用。內容如下:
             <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.4"
           xmlns="http://java.sun.com/xml/ns/j2ee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
           http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
           <filter> <!--定義filter名稱,制定filter使用的類 -->
                   <filter-name>struts2</filter-name>
                   <filter-class>
                             org.apache.struts2.dispatcher.FilterDispatcher
                   </filter-class>
           </filter>
           <filter-mapping>
                   <filter-name>struts2</filter-name>
                   <url-pattern>/*</url-pattern><!--定義filtemapping指定搜索路徑為根路徑開始-->
           </filter-mapping>
            <welcome-file-list>
              <welcome-file>index.jsp</welcome-file>
            </welcome-file-list>
          </web-app>


          (3)配置Struts2的Struts.xml文件,目的是建立struts2中邏輯調用機制。-----------------------改
          內容如下:===============================需要修改
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd">
          <struts>
             <package name="yzth" namespace="/" extends="struts-default">
            <action name="hello" class="org.lxh.struts2.demo.HelloAction">
             <result name="success">
              /hello.jsp
             </result>
             <result name="error">
              /error.jsp
             </result>
            </action>
           </package>
          </struts>
          (4)配置Ibatis中的各個關鍵環節
            POJO類的建立      *** 用于存儲ORMapping映射后的數據記錄,只包含get 和set 方法
            com.mydomain.jata中的
            Account.xml       *** 最重要的ORMapping文件,存儲了對數據訪問的各種映射的SQL操作。
            SqlMapConfig.xml  *** 存儲連接數據的方法,配置數據連接池。
          (5)設計調用界面
              
               index.jsp==>hello.action==>account.class(應該從hello.action中調用ormapping)==>struts.xml==>hello.jsp

          (5.1)index.jsp使用S:標記傳值給hello.action

          <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
          <form action="hello.action" method="post">
              根據ID進行查詢:<input type="text" name="msg">
              <input type="submit" value="提交">
          </form>

          (5.2)hello.action使用Msg接收id后,調用account進行查詢。
          ===========================================================================
          這個過程沒搞清楚,準備找1個struts2+ibatis的開源項目研究一下再繼續。。。。


          posted @ 2007-12-03 21:09 怡眾科技 閱讀(1988) | 評論 (1)編輯 收藏
          用心記錄我們技術的成長過程。
          posted @ 2007-12-03 19:29 怡眾科技 閱讀(226) | 評論 (0)編輯 收藏
          僅列出標題  
          主站蜘蛛池模板: 全椒县| 溧水县| 外汇| 商都县| 资中县| 永康市| 新兴县| 沛县| 封丘县| 页游| 武汉市| 当雄县| 太仆寺旗| 界首市| 东安县| 中卫市| 怀远县| 孙吴县| 内丘县| 鲜城| 滨海县| 海伦市| 南和县| 汉中市| 沅江市| 二连浩特市| 古交市| 两当县| 子长县| 广饶县| 彭泽县| 都兰县| 祁东县| 平谷区| 固镇县| 惠东县| 靖远县| 新泰市| 彭水| 凤台县| 娄底市|