一直從事Java企業級開發,因此接觸過不少Java的開發框架。目前作一個多用戶商城的創業項目,因為本人只專著于JAVA,那沒有辦法,都不用選型了。進入JAVA世界之后又有很多框架可以選擇,列舉幾個熟悉的,例如表示層struts, spring mvc, jsf,tapestry..., 控制層:spring/ejb, ejb不知道算不算阿,反正spring的作者說了他開發spring是為了跟ejb抗衡而生的,見那本經典的紅皮書:Expert One-on-One J2EE Development without EJB,這本也是我剛學spring所用到的。數據持久層:hibernate/ibatis/jdbc,歸根到底都是jdbc,這個一定要掌握。下面說說各個層面的選型比較。除了這幾個層面的,當然還有其他的框架要選擇的了,java就是框架太多了,剛進門的朋友估計眼睛都看花了。不過我奉勸各位新入門的朋友,一定要注意Java基礎,所有的框架都是在這些基礎上幻變而成,而Java作web應用的核心技術就servlet/jsp/jdbc/這幾個(ejb應該也算吧,我看到很多大型應用都離不開JMS/EJB等),有空研究一下JDK,Spring,Hibernate,Tomcat等開源框架的代碼,里面體現了n多的設計模式,代碼規范等,一定會給你帶來技術上的升華。我本人也剛開始看,覺得獲益不淺,如果我們只是知道怎么應用框架而不知道他底層的含義,那只是停留在程序員的水平而以,所以往架構師方向發展的話,Java要越做越底層。
先交待一下項目背景,要不就不知道為啥要這么選擇了。現在電子商務是越來越火,淘寶和京東的廣告已經滲透和生活的各個角落。雖然最近團購網是不太景氣,也有不少電商關門大吉。
但是我們有理由相信未來十年電子商務也是處于上升空間的。理由有下:
1.有研究說美國的電子商務比例要比中國大很多,中國IT行業流行的東西往往要比外國晚一些,中國電子商務還是有很大的發展空間。
2.中國上網人群越來越多,現在哪個小孩子不會使用電腦,哪怕是窮二代也好。而年紀大的人不一定會的
3.網購確實給人們生活帶來了方便,尤其經濟不好時,可以給大家提供更便宜合適的產品。
4.中國做的有點規模的公司應該不會只滿足于在淘寶/拍拍等網站上面開個店而已,京東/走秀網的成功會刺激其他人加入這個行業競爭。
5.淘寶實行提高門檻的做法,可能會把一部分小商家擠出來,不排除這些商家有建立獨立網站的需求,但是要解決信用,流量的問題先。
開始分析目前獨立商城系統的競爭對手。
目前php商城占據了大部分市場,跟著是.net商城,java商城沒有幾個好的,為排除作廣告嫌疑,這里不出現任何商城系統的名字。為什么有這個現象呢,其實java語言的優勢是非常明顯的,銀行電信行業基本都是以java為主,這個是我本人工作經歷所見。包括現在淘寶/京東都有向java方向靠攏的趨勢,由于java語言本身的架構是比較合適做大型應用,我們有理由相信java商城會由更大的發展空間。我們要著手解決Java開發成本高的問題,因此好的框架和開發模式是少不了的。
因此我們寫了一個Java多用戶商城系統立足B2C,跟進C2C,前面的C其實是很多個B組成的,可以理解為B2B2C,類似淘寶商城模式。這樣我們可以滿足B2C的需求,也可以滿足那些C2C人的要求,也避開市場上已有的成熟的商城的競爭。這里有一個好處是可以結合淘寶和百姓網趕集網模式作本地商家運營,就是每個城市或者高校都找一家代理商獨自運營,數據都單獨保留在他們的服務器上,我們總站只保留少量數據,例如單點登陸,統一的社區,統一的搜索體驗等,這是個大project,暫時還沒能推進下去,但是這個前途是無可限量的。已經有好些人咨詢過類似方案,這樣可以集百家之長來跟一些大型的商城抗衡,也就是B2B2C的模式吧,是個很好的思路,但是需要有實力的人去推動才行,估計以后會由類似商城出現。
說太多的背景了,話回主題。目前系統已經小有成績,但是也遇到不少問題,這里拿出來跟大家分享。
我心目中最好的框架組合是:
表示層:spring mvc 3.1 +annotation
控制層:spring 3.1
持久層:hibernate 3.6+jdbcTemplate
后臺列表控件:displaytag 1.2
Ajax框架: DWR 3
JS框架 : Jquery
緩存機制:spring 3.1 cache +ehcache/memcached
靜態化機制: Freemarker靜態化/spring mvc偽靜態化
頁面技術: EL + JSTL +JSP
安全框架 spring security
搜索引擎: Lucene
中文分詞:IKAnalyzer
模板引擎: apache tiles 2.22
以上框架均使用目前最新框架,如果有更新特性出來的話可能會更換。
部署視圖所需:
數據庫: mysql
Web 服務器: windows 下用apache, linux 下用ngnix
應用服務器: Tomcat
另外一些分布式的技術,例如EJB/web service/JMS等沒有使用,如果改變部署方案時或者需要集成其他系統時可能會引入。
一個中小型的部署方案是1臺Web 服務器 + 2臺Tomcat服務器 + 1臺memcached服務器 + 1臺圖片服務器 + 1臺數據庫,此方案是方便系統不斷的升級,而又使得投資比較少。
當然更大型的解決方案需要更多的服務器和在數據庫上做更多的優化動作。最省錢的辦法就是1個服務器就運行以上所有的服務,這個也不是不行,有個1G的內存都已經能應付不少流量了。在那些便宜的JSP空間只要有256/512M內存也可以跑,大有大的跑法,小有小的跑法。
下面就比較關注的框架做個簡單的對比:
1.spring mvc vs struts2
我們本來是采用struts1.3來開發,struts那層用的非常的薄,只是用于接收頁面參數和拿到數據庫數據之后打印到request中讓頁面展現。按理應該直接升級為struts2才對,但是看了spring mvc 2.5的annotation版本之后就拋棄struts2了,spring mvc可以讓我很容易從頁面拿到數據,并且采用非常少的配置和具有很強的靈活性,看了struts2之后覺得都是大同小異的思路,那我何必再引入更多的jar..
2.hibernate va jpa ibatis
Jpa跟Hibernate很類似,個人感覺沒有hibernate靈活,hibernate在快速開發上是很有優勢的,加上cache可以部分彌補性能上的損耗,另外盡量不用他的那個配置做復雜的關聯。
另外可以用jdbcTemplate頂上用的比較多的地方以提高性能。
3.DWR vs Jquery
DWR在js和后臺java代碼之間是很好的橋梁,尤其是跟spring配合的很好,但是Jquery在頁面的功能是少不了,還好兩者不排斥對方,那就一起用了。
4.spring 3.1 cache +ehcache/memcached
spring 3.1 直接支持cache了,這次hibernate的二級緩存可以退休了。如果在單機選擇ehcache,集群方式采用memcached。 memcached是遠程調用,性能必然會有損耗。
5.JSP vs freemarkervelocity
自從JSP有了JSTL之后, struts 的標簽我已經不用了,加上EL之后我也沒有找到用freemarker velocity的理由,除了靜態化之外,貌似JSP也可以做靜態化的,這個我研究不深,如果有反對意見可以提出來。
6.apache tiles vs sitemesh
由于是學struts出身,tiles熟悉阿,而且現在也支持模糊匹配了,看一些網上評論說性能不會有太大差別,sitemesh3也許會好些,用生不如用熟。不過均不能達到那種實時生效的模板效果,誰能說說java怎么做?
7.其余幾個就沒什么懸念了, 由于現在免費的jsp空間比較多的支持mysql和tomcat, 所以這2個是我們要優先支持的,雖然我們也支持oracle等。 南方愛迪實訓,開設電子商務、移動開發、JAVA、.NET等就業課程,讓你短時間成為IT高手,保障終身就業。