要知己知彼,孫子同學說的。用3天瞭解了下J2EE(其實是Struts、Spring、Hibernate這些J2SE的東東搞出來的符合JavaEE規範的東東,當然J2EE架構還有很多,俺就純入門,有錯請指正),稍微和Asp.Net對比一下。
.aspx和.jsp的訪問過程:
Asp.Net Page是一個HttpHandler,預設是處理到*.aspx的請求。Asp.Net request pipeline大致是:IIS到aspnet_isapi -> HttpModule1 -> HttpModule2 -> ... -> HttpModuleN -> 對應的HttpHandler -> Response給IIS。不要覺得Page特殊,他只是Asp.Net的N個HttpHandler和N個Control其中一個。
Jsp頁面是一個Servlet。一種訪問伺服器資源方式是直接存取*.jsp,另外一種是通過servlet-mapping訪問一個servlet。不管是哪一種,一般實際可用的Rquest->Response過程都要經過一個以上的servlet。但不好說servlet更像HttpModule還是HttpHandler,因為一般對什麼檔案的request被送給Servlet Container(比如Tomcat)不是他可控的,而是前端伺服器(比如Apache),而進了Servlet Container以後就沒HttpModule、HttpHandler粒度分的這麼細了。
WebForm模型 vs. MVC模型:
區別太多了。。可以看看一個Asp.Net的MVC實現MonoRail和WebForm的對比,個人感覺對Enterprise的應用絕對是MVC好,整個Application的邏輯清晰,易於管理維護;WebForm的優點是單一頁面邏輯清晰,而且在VS的Visual Web Developer這個強大的IDE和控制項機制下提供很好的DesignView(BEA的Jsp Editor是eclipse外掛程式,也可作可視化開發,不過由於Jsp沒控制項這個概念,不好做到準確的Design time rendering)。所以Asp.Net做中小型應用產能絕對高,但要做大型應用,除了原來已有系統更換成本大、Windows太爛之類的因素以外,主觀上他也難做好。(不過俺設想和WF結合起來後會有改善)
Data Access:
相信95%以上的Web應用說白了就是資料庫CRUD,資料訪問絕對是最重要的。Java下面要純ORM的大多數都用Hibernate,特點是難配置,代碼優雅,速度貌似不咋的(當然快慢和寫設定檔的水平有很大關係);還有一種折衷的是用iBatis,這個要自己寫SQL然後M到O,感覺有點不純正,不過效率上應該沒問題了。
而Asp.Net下面的DAL大多是移植的(很多XXX Java項目都有移植,加個N-或者.Net變成NXXX、XXX.Net再到SF一搜。。)。比較著名的還是NHibernate和iBatis.Net,還有Enterprise Library的DAAB。後來有ActiveRecord對NHibernate的進一步封裝,貌似不錯的樣子。不過俺一個可憐的學生沒機會接觸大項目,用可愛的SubSonic加預存程序就能過的挺好,所以也不清楚哪個好。。
Day Dreaming:
Sun已經承諾Java開源了,而.Net想跨個平台還要用Mono,M$有點對不起搞.Net的程式員哦。