第一篇:WEB框架總結(jié)
概述
開發(fā)框架的選擇,始終是個(gè)仁者見仁、智者見智的事情。尤其是Web層的開發(fā)框架,數(shù)量非常多,而且各有特色,如:Struts、WebWork、Spring
MVC、Tapestry、JSF、WebPage3.0......等等。他們各自的優(yōu)、缺點(diǎn): 框架使用背景
一:使用框架的必然性
框架,即framework。其實(shí)就是某種應(yīng)用的半成品,把不同應(yīng)用程序中有共性的一些東西抽取出來,做成一個(gè)半成品程序,這樣的半成品就是所謂的程序框架。
軟件系統(tǒng)發(fā)展到今天已經(jīng)很復(fù)雜了,特別是服務(wù)器端軟件,涉及到的知識(shí),內(nèi)容,問題太多。在某些方面使用別人成熟的框架,就相當(dāng)于讓別人幫你完成一些基礎(chǔ)工作,你只需要集中精力完成系統(tǒng)的業(yè)務(wù)邏輯設(shè)計(jì)。這樣每次開發(fā)就不用白手起家,而是可以在這個(gè)基礎(chǔ)上開始搭建。
使用框架的最大好處:減少重復(fù)開發(fā)工作量、縮短開發(fā)時(shí)間、降低開發(fā)成本。同時(shí)還有其它的好處,如:使程序設(shè)計(jì)更合理、程序運(yùn)行更穩(wěn)定等?;谶@些原因,基本上現(xiàn)在在開發(fā)中,都會(huì)選用某些合適的開發(fā)框架,來幫助快速高效的開發(fā)應(yīng)用系統(tǒng)。
了解了使用框架的必然性,下面來看看如何選擇,當(dāng)然我們的話題集中在Web層的開發(fā)框架。在談這個(gè)問題之前,先來看看我們?cè)赪eb開發(fā)中究竟需要做些什么工作:
二:Web層開發(fā)的工作
在J2EE開發(fā)中,分層是基本的思想,3層架構(gòu)或者多層架構(gòu)早已深入人心,在這里我們就把目光集中到Web層,看看到底Web層開發(fā)做了那些工作:
1:數(shù)據(jù)展示
Web層需要從邏輯層獲取需要展示的數(shù)據(jù),然后以合理的方式在頁面進(jìn)行展示
2:人機(jī)交互
用戶需要從界面上輸入數(shù)據(jù),在界面上進(jìn)行按鈕點(diǎn)擊,進(jìn)而觸發(fā)事件,標(biāo)準(zhǔn)的事件驅(qū)動(dòng)模型,然后跟后臺(tái)進(jìn)行數(shù)據(jù)交換,出現(xiàn)新的界面。
3:收集數(shù)據(jù),調(diào)用邏輯層接口
Web層收到用戶的事件請(qǐng)求,需要調(diào)用相應(yīng)的邏輯層接口來進(jìn)行處理,Web層是不會(huì)有任何邏輯處理的。調(diào)用邏輯層接口,需要傳遞參數(shù),這時(shí)需要收集用戶在界面上輸入的數(shù)據(jù),然后進(jìn)行組織,組織成為邏輯層接口需要的數(shù)據(jù)封裝形式(通常都是ValueObject)。
4:根據(jù)邏輯層的數(shù)據(jù)來重新展示頁面
邏輯層處理完了,需要返回?cái)?shù)據(jù)或信息到界面上。這個(gè)時(shí)候Web層需要根據(jù)返回的值選擇合適的頁面,然后展示這些數(shù)據(jù)或者信息。
從上面可以看出,Web層開發(fā)的主要工作集中在展示上,也就是圖形用戶界面。這一部分是用戶直觀感受應(yīng)用程序的窗口,也是用戶要求最多的地方,其表現(xiàn)形式也是最豐富的。
三:Web層開發(fā)的步驟
下面再來總結(jié)一下Web層開發(fā)的大致步驟(也就是需要開發(fā)人員做的工作):
注意:這里討論的Web層開發(fā),是不使用任何開發(fā)框架時(shí)候的開發(fā)。
1:寫頁面Html,到底有哪些數(shù)據(jù)需要在界面上表現(xiàn)
2:每個(gè)數(shù)據(jù)的具體表現(xiàn)形式,如:有的需要表現(xiàn)成為下拉列表,有的需要表現(xiàn)成為單選按鈕等。
3:界面表現(xiàn)形式的邏輯布局,所謂邏輯布局是指某些數(shù)據(jù)的表現(xiàn)形式應(yīng)該放在前面,某些應(yīng)該放在后面;某些放在上面,某些放在下面。如:某個(gè)請(qǐng)假申請(qǐng)的業(yè)務(wù),有請(qǐng)假開始時(shí)間和結(jié)束時(shí)間,很明顯開始時(shí)間的表現(xiàn)就應(yīng)該排在結(jié)束時(shí)間的前面。而美工是負(fù)責(zé)最后頁面的美觀,一般美工不能動(dòng)界面的邏輯布局。
4:完成前面3步,頁面的表現(xiàn)形式的大致模樣就有了,下面需要來做功能性的開發(fā)。第一個(gè)就是這些表現(xiàn)形式的值的來源,如:下拉列表顯示的值從什么地方來。值的來源方式很多,有數(shù)據(jù)庫中來、固定值、某斷程序運(yùn)行的中間結(jié)果、前面頁面?zhèn)鬟f過來等等,當(dāng)然典型的還是來自數(shù)據(jù)庫。
好了,確定了值的來源,開發(fā)人員就要寫代碼來獲取這些值,然后把這些值賦值到對(duì)應(yīng)的表現(xiàn)形式里面。
5:還有一些比較特殊,也就是真實(shí)操作的是一類值,但是在界面上顯示的是另一類值,比如:數(shù)據(jù)庫中有用戶編號(hào),到了界面上就得顯示用戶姓名,但是所有的操作都是要操作用戶編號(hào)的。我們把這種情況分做:真實(shí)值和表現(xiàn)值,他們有一定的內(nèi)在聯(lián)系。這些都是要開發(fā)人員去轉(zhuǎn)化和維護(hù)的。
6:接下來就應(yīng)該開發(fā)功能性的事件響應(yīng)了。用戶點(diǎn)擊了某個(gè)按鈕或者觸發(fā)了某個(gè)事件,首先是客戶端:數(shù)據(jù)檢測(cè)、客戶端事件處理;然后提交到服務(wù)端,服務(wù)端要獲取到客戶端提交的數(shù)據(jù),然后調(diào)用相應(yīng)的邏輯層接口來響應(yīng)。當(dāng)然如何寫邏輯層的實(shí)現(xiàn)這里就不去談?wù)摿恕?/p>
7:邏輯層執(zhí)行完過后,返回?cái)?shù)據(jù)和信息到Web層,開發(fā)人員還需要寫代碼去處理,選擇哪個(gè)頁面來顯示,如何顯示這些數(shù)據(jù)和信息等。
8:在整個(gè)交互的過程中,還必須考慮到如何控制權(quán)限,如:某些數(shù)據(jù)不能顯示,某些數(shù)據(jù)不能編輯等等;同樣還需要考慮到消息的配置和國際化等等。這些功能起源于邏輯層,但是實(shí)際的控制要到Web層,這些都需要開發(fā)人員來控制。
9:完成了上面的開發(fā)步驟,頁面基本的功能開發(fā)就告一段落,接下來開發(fā)人員需要考慮頁面美觀的問題了。大家可能會(huì)說:“不是有美工嗎,還需要開發(fā)人員干什么?”。事實(shí)上美工多半只能出一個(gè)靜態(tài)頁面的美化模版,美工對(duì)于一推Java代碼和Html的混雜物,多半是沒有辦法的,更不要說還有一些內(nèi)容是動(dòng)態(tài)生成的,美工就更不可能搞定了。還是得開發(fā)人員上陣,按照美工給的模版,開始添加Css:class、id、style......10:完成上面的開發(fā),基本頁面的開發(fā)工作就完成了,最后的一個(gè)步驟就是把各個(gè)頁面有機(jī)的組織起來,開發(fā)應(yīng)用程序的整體應(yīng)用導(dǎo)航框架,通常就是菜單,然后把各個(gè)功能頁面跟菜單結(jié)合起來,形成一個(gè)完整的應(yīng)用。
在這里我們省略了開發(fā)期反復(fù)的調(diào)試過程,僅總結(jié)開發(fā)的步驟。
四:選擇Web開發(fā)框架的目的了解了如果沒有框架,我們需要做的工作,這對(duì)選擇框架有非常大的幫助。
框架,直白點(diǎn)說,就是一個(gè)半成品,能夠幫我們做一些事情的半成品。
框架的選擇,就是看哪個(gè)框架最合適,從而減少開發(fā)的工作量,提高開發(fā)的效率和質(zhì)量,并有效減少維護(hù)的工作量,最終達(dá)到節(jié)約綜合開發(fā)成本,獲取更多的收益。
五:選擇Web開發(fā)框架的標(biāo)準(zhǔn)
聲明:這里所談的選擇Web開發(fā)框架的標(biāo)準(zhǔn),只是我們的總結(jié)和一家之言,并不是放之四海而皆準(zhǔn)的真理,請(qǐng)根據(jù)您的體會(huì)客觀的看待我們的總結(jié)。
另外:我們這里更多的討論業(yè)務(wù)功能性應(yīng)用程序的Web開發(fā)框架。
1:選擇能夠?qū)ξ覀兊拈_發(fā)過程提供更多、更好幫助的Web開發(fā)框架
2:Web開發(fā)框架的學(xué)習(xí)一定要簡(jiǎn)單,上手一定要快,沒有什么比使用能得到更深的體會(huì)。那些動(dòng)不動(dòng)就需要半個(gè)月或者一個(gè)月學(xué)習(xí)周期的框架,實(shí)在是有些恐怖。
3:一定要能得到很好的技術(shù)支持,在應(yīng)用的過程中,或多或少都會(huì)出現(xiàn)這樣或者那樣的問題,如果不能很快很好的解決,會(huì)對(duì)整個(gè)項(xiàng)目開發(fā)帶來影響。一定要考慮綜合成本,其實(shí)這是目前應(yīng)用開源軟件最大的問題,碰到問題除了死肯文檔就是查閱源代碼,或者是網(wǎng)上搜尋解決的辦法,通常一個(gè)問題就會(huì)導(dǎo)致1-2天的開發(fā)停頓,嚴(yán)重的甚至需要一個(gè)星期或者更長(zhǎng),一個(gè)項(xiàng)目有上這么幾次,項(xiàng)目整體的開發(fā)成本嗖嗖的就上去了。
4:Web開發(fā)框架結(jié)合其他技術(shù)的能力一定要強(qiáng),比如:在邏輯層要使用Spring或者Ejb3,那么Web開發(fā)框架一定要能很容易,很方便的與它們進(jìn)行結(jié)合。
5:Web開發(fā)框架的擴(kuò)展能力一定要強(qiáng)。在好的框架都有力所不及的地方,這就要求能很容易的擴(kuò)展Web開發(fā)框架的功能,以滿足新的業(yè)務(wù)需要。同時(shí)要注意擴(kuò)展的簡(jiǎn)單性,如果擴(kuò)展框架的功能代價(jià)非常大,還不如不用呢。
6:Web開發(fā)框架最好能提供可視化的開發(fā)和配置,可視化開發(fā)對(duì)開發(fā)效率的提高,已經(jīng)得到業(yè)界公認(rèn)。
7:Web開發(fā)框架的設(shè)計(jì)結(jié)構(gòu)一定要合理,應(yīng)用程序會(huì)基于這個(gè)框架,框架設(shè)計(jì)的不合理會(huì)大大影響到整個(gè)應(yīng)用的可擴(kuò)展性。
8:Web開發(fā)框架一定要是運(yùn)行穩(wěn)定的,運(yùn)行效率高的??蚣艿姆€(wěn)定性和運(yùn)行效率直接影響到整個(gè)系統(tǒng)的穩(wěn)定性和效率。
9:Web開發(fā)框架一定要能很好的結(jié)合目前公司的積累。在多年的開發(fā)中已有了很多積累,不能因?yàn)槭褂肳eb開發(fā)框架就不能再使用了,那未免有些得不償失。
10:選擇開發(fā)框架另外要注意的一點(diǎn)就是:任何開發(fā)框架都不可能是十全十美的,也不可能是適應(yīng)所有的應(yīng)用場(chǎng)景的,也就是說任何開發(fā)框架都有它適用的范圍。所以選擇的時(shí)候要注意判斷應(yīng)用的場(chǎng)景和開發(fā)框架的適用性??蚣軠y(cè)評(píng) JSF
優(yōu)點(diǎn):
Java EE標(biāo)準(zhǔn),這意味著有很大的市場(chǎng)需求和更多的工作機(jī)會(huì)
上手快速并且相對(duì)容易
有大量可用的組件庫
缺點(diǎn):
大量的JSP標(biāo)簽
對(duì)REST和安全支持不好
沒有一個(gè)統(tǒng)一的實(shí)現(xiàn)。既有SUN的實(shí)現(xiàn),又有Apache的實(shí)現(xiàn)--MyFaces。
Spring MVC
優(yōu)點(diǎn):
對(duì)覆蓋綁定(overriding binding)、驗(yàn)證(validation)等提供生命周期管理
與許多表示層技術(shù)/框架無縫集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF等
便于測(cè)試--歸功于IoC
缺點(diǎn):
大量的XML配置文件
太過靈活--沒有公共的父控制器
沒有內(nèi)置的Ajax支持
Stripes
優(yōu)點(diǎn):
不需要書寫XML配置文件
良好的學(xué)習(xí)文檔
社區(qū)成員很熱心
缺點(diǎn):
社區(qū)比較小
不如其他的項(xiàng)目活躍
ActionBean里面的URL是硬編碼的 Struts 2
優(yōu)點(diǎn):
架構(gòu)簡(jiǎn)單--易于擴(kuò)展
標(biāo)記庫很容易利用FreeMarker或者Velocity來定制
基于控制器或者基于頁面的導(dǎo)航
缺點(diǎn):
文檔組織得很差
對(duì)新特征過分關(guān)注
通過Google搜索到的大多是Struts 1.x的文檔 Tapestry
優(yōu)點(diǎn):
一旦學(xué)會(huì)它,將極大地提高生產(chǎn)率
HTML模板--對(duì)頁面設(shè)計(jì)師非常有利
每出一個(gè)新版本,都會(huì)有大量的創(chuàng)新
缺點(diǎn):
文檔過于概念性,不夠?qū)嵱?/p>
學(xué)習(xí)曲線陡峭
發(fā)行周期長(zhǎng)--每年都有較大的升級(jí)
Wicket
優(yōu)點(diǎn):
對(duì)Java開發(fā)者有利(不是Web開發(fā)者)
頁面和顯示綁定緊密
社區(qū)活躍--有來自創(chuàng)建者的支持
缺點(diǎn):
HTML模板和Java代碼緊挨著
需要對(duì)OO有較好的理解
Wicket邏輯--什么都用Java搞定
接著,Matt通過采訪這些框架的作者,與他們討論各種開源的Java Web框架,并且突出各個(gè)框架的長(zhǎng)處、聽取框架作者對(duì)其他框架的看法,希望借此了解這些框架的未來發(fā)展方向。
下列是一些被采訪者:
JSF, Jacob Hookom
RIFE, Geert Bevin
Seam, Gavin King
Spring MVC, Rob Harrop
Spring Web Flow, Rob Harrop and Keith Donald
Stripes, Tim Fennell
Struts 1, Don Brown
Tapestry, Howard Lewis Ship
Trails, Chris Nelson
Struts 2, Patrick Lightbody
Wicket, Eelco Hillenius
Matt對(duì)采訪做了如下總結(jié):
JSF:
如果你想讓web應(yīng)用具有類似桌面程序的功能性,那么JSF的標(biāo)準(zhǔn)規(guī)范和大量第三方組件庫的支持值得你 信賴。
Spring MVC:
綜合了許多不同的技術(shù),這使得它可以被廣泛地應(yīng)用到不同類型的項(xiàng)目中去;它可以被當(dāng)作web應(yīng)用開發(fā)的一個(gè)基礎(chǔ)平臺(tái)。
Stripes:
可以被應(yīng)用到存在大量復(fù)雜數(shù)據(jù)交互的程序中;有強(qiáng)大的類型轉(zhuǎn)換、綁定和驗(yàn)證功能;可以使管理大的復(fù)雜表單以及直接映射它們到域?qū)ο笞兊煤?jiǎn)單......Tapestry:
在中到大型項(xiàng)目中,表現(xiàn)突出(當(dāng)然,你也可以只把它應(yīng)用到單個(gè)頁面上),在這些項(xiàng)目中,你可以通過簡(jiǎn)單地創(chuàng)建新的組件起到杠桿作用。
Struts 2:
通常更適合于那些希望可以真正開始做事并且愿意花費(fèi)大量時(shí)間來學(xué)習(xí)他們使用的開源工具的小項(xiàng)目組。Struts 2的目標(biāo)不是那些更喜歡拖放式開發(fā)的“扶手椅程序員”。
Wicket:
非常適合于這樣的內(nèi)/外部網(wǎng)應(yīng)用:UI很復(fù)雜并且你希望可以充分利用你的開發(fā)者資源。
上面的總結(jié),基本是突出了各個(gè)框架的長(zhǎng)處。然而,哪些又是他們不好的地方呢? 評(píng)價(jià)一個(gè)框架好壞與否的標(biāo)準(zhǔn):
Ajax支持
是不是內(nèi)置了?是否便于使用?
書簽?zāi)芰?/p>
用戶能否將某個(gè)頁面收藏起來并且可以方便地返回到該頁面?
驗(yàn)證
使用是否簡(jiǎn)單?是否支持客戶端(JavaScript)驗(yàn)證?
可測(cè)試性
脫離容器測(cè)試控制器,是否足夠簡(jiǎn)單?
提交和重定向
框架如何處理重復(fù)提交問題?
國際化
如何支持國際化?控制器利用國際化信息,是否容易?
頁面修飾
框架支持哪種類型的頁面修飾/組成機(jī)制?
社區(qū)和技術(shù)支持
提出問題,能否被快速地、恭敬地回答?
開發(fā)工具
是否有支持這個(gè)框架的好的工具,尤其是IDE?
市場(chǎng)需求
學(xué)習(xí)了這個(gè)框架,它能否幫你找到份工作?
崗位數(shù)量
在dice.com和indeed.com上,對(duì)這個(gè)框架技能的需求如何? 筆者認(rèn)為這個(gè)評(píng)價(jià)標(biāo)準(zhǔn),值得大家借鑒。
然后,Matt按照這些評(píng)價(jià)標(biāo)準(zhǔn),對(duì)各個(gè)框架做了以下闡述:
Ajax支持
JSF:沒有內(nèi)置的Ajax支持,需要使用ICEfaces和Ajax4JSF
Stripes:沒有對(duì)應(yīng)的類庫,支持流輸出
Struts 2:內(nèi)置Dojo,有用于GWT和JSON的插件
Spring MVC:沒有對(duì)應(yīng)的類庫,需要使用DWR和Spring MVC擴(kuò)展
Tapestry:Tapestry 4.1中,有內(nèi)置的Dojo
Wicket:有Dojo和Script.aculo.us支持
書簽?zāi)芰?/p>
JSF:可以任意提交--URL甚至不被考慮
Stripes:使用約定,但是你可以不加理會(huì)
Struts 2:有命名空間的概念,這使得收藏某個(gè)頁面并返回變得容易
Spring MVC:允許完全的URL控制
Tapestry:依然存在一些丑陋的URL
Wicket:允許裝配(mount)頁面/URL
驗(yàn)證
JSF:默認(rèn)的國際化信息丑陋,但是配置簡(jiǎn)單
Stripes和Wicket:用Java類進(jìn)行驗(yàn)證--不支持客戶端驗(yàn)證
Struts 2:使用OGNL完成強(qiáng)大的表達(dá)式驗(yàn)證功能;只有在Action上指定了規(guī)則,才支持客戶端驗(yàn)證。
Spring MVC:允許你使用公共驗(yàn)證器--這是一種成熟的解決方案
Tapestry:有健壯的驗(yàn)證功能--不需自定義就有漂亮的國際化信息
可測(cè)試性
Spring MVC和Struts 2:允許利用mocks(例如EasyMock、jMock和Spring Mocks)簡(jiǎn)單地進(jìn)行測(cè)試
Tapestry:測(cè)試?yán)щy,因?yàn)轫撁骖惐怀橄?、具體類被簡(jiǎn)化
JSF:頁面類可以方便地被測(cè)試,實(shí)際上很像Struts 2 中的actions
Wicket:有WicketTester--一個(gè)強(qiáng)大的解決方案
Stripes:有Servlet API Mocks和MockRoundtrip
提交和重定向
解決重復(fù)提交問題的最簡(jiǎn)單方法是:在提交后重定向
Spring MVC:允許你將參數(shù)加到重定向URL上
Stripes、Tapestry和Wicket:有“flash式”的支持
Struts 2:需要一個(gè)自定義的解決方案
JSF:需要一個(gè)自定義的解決方案,國際化信息很難加入到頁面bean中
國際化
JSTL的
Stripes、Spring MVC和JSF:每個(gè)地區(qū)使用一個(gè)資源綁定文件
Struts
2、Tapestry和Wicket:提倡把每個(gè)頁面/action用到的資源文件分開
JSF:需要在每個(gè)頁面上定義資源綁定信息
Tapestry:標(biāo)簽比較可怕
頁面修飾
Tiles能夠用于Struts
2、Spring MVC和JSF中;需要對(duì)每個(gè)頁面進(jìn)行配置。
SiteMesh能夠用于所有的這些框架中(不推薦在JSF、Tapestry或者Wicket中使用);在設(shè)置完成后,只需要很少的維護(hù)。
開發(fā)工具
Spring MVC:Spring IDE,但是只做XML校驗(yàn),不是一個(gè)UI/web工具
Struts 2:Eclipse
Tapestry:Spindle,對(duì)編碼者非常有利
JSF:眾多IDE支持,并且做得越來越好
Stripes和Wicket:沒有任何官方工具
NetBeans目前支持Struts *、JSF(+Facelets)、Tapestry和Wicket,尚不支持Stripes和Spring MVC
市場(chǎng)需求
Struts 1:需求依然很大并且被廣泛使用
Spring MVC:越來越受關(guān)注,但大部分是因?yàn)镾pring框架的一些其他特征
JSF:很快地變得流行起來
Struts 2:正在獲得地盤,但是相關(guān)的工作機(jī)會(huì)很少
Tapestry:在過去的數(shù)年里,受歡迎程度不斷增加
Wicket和Stripes:還是未知數(shù)
通過以上的比較,我想大家對(duì)在自己的項(xiàng)目中應(yīng)該選擇哪種Web層框架,應(yīng)該有了更清醒的認(rèn)識(shí)。
最后,Matt列出了一些相關(guān)資源,也供讀者參考。
Strutshttp://004km.cn
Spring IDE: http://004km.cn
Gaijin Studio: http://gaijin-studio.sf.net
Struts 2http://tapestry.apache.org
http://spindle.sourceforge.net
JSFhttp://appfuse.org
演講的最后,Matt以一句“If it works, use it!”作為結(jié)尾,可謂精辟!
通過此文,相信大家可以撥開當(dāng)前Java Web層框架選用上的“迷霧”,見得“月明”了。
第二篇:java web框架簡(jiǎn)介
Java Web框架簡(jiǎn)介
Web框架是人們?cè)谑褂媚撤N語言編寫Web應(yīng)用服務(wù)端時(shí)關(guān)于架構(gòu)的最佳實(shí)踐。
有些Web框架是從實(shí)際的Web項(xiàng)目抽取出來的,也就是說,做一個(gè)具體的應(yīng)用項(xiàng)目時(shí),采取的架構(gòu)比較理想,就把這部分和領(lǐng)域無關(guān),而僅和Web的請(qǐng)求和響應(yīng)處理有關(guān)的設(shè)計(jì)拿出來,形成一個(gè)基礎(chǔ),在開發(fā)別的應(yīng)用項(xiàng)目的時(shí)候則可以從這基礎(chǔ)做起,讓開發(fā)者更關(guān)注領(lǐng)域問題,而不是Web的請(qǐng)求和響應(yīng)的控制。
也有些Web框架是直接設(shè)計(jì)出來的,很多Web框架在設(shè)計(jì)的時(shí)候也都借鑒了別的框架,吸取優(yōu)點(diǎn),修改不足,并根據(jù)自己的框架的定位,在特定方面有自己的發(fā)揮,形成了自己的特點(diǎn),比如有的web框架追求的是松耦合性,層次,結(jié)構(gòu)之間都不密切綁定,有的Web框架則追求敏捷性,強(qiáng)調(diào)約定而不是配置。
Java 的 Web框架雖然各不相同,但基本也都是遵循特定的路數(shù)的:使用Servlet或者Filter攔截請(qǐng)求,使用MVC的思想設(shè)計(jì)架構(gòu),使用約定,XML或 Annotation實(shí)現(xiàn)配置,運(yùn)用Java面向?qū)ο蟮奶攸c(diǎn),面向抽象實(shí)現(xiàn)請(qǐng)求和響應(yīng)的流程,支持Jsp,F(xiàn)reemarker,Velocity等視圖。
JSF
優(yōu)點(diǎn):
Java EE標(biāo)準(zhǔn),這意味著有很大的市場(chǎng)需求和更多的工作機(jī)會(huì)
上手快速并且相對(duì)容易
有大量可用的組件庫
缺點(diǎn):
大量的JSP標(biāo)簽
對(duì)REST和安全支持不好
沒有一個(gè)統(tǒng)一的實(shí)現(xiàn)。既有SUN的實(shí)現(xiàn),又有Apache的實(shí)現(xiàn)——MyFaces。
國內(nèi)的OperaMasks還支持AJAX,以及有開發(fā)工具支持
Spring MVC
優(yōu)點(diǎn):
對(duì)覆蓋綁定(overriding binding)、驗(yàn)證(validation)等提供生命周期管理
與許多表示層技術(shù)/框架無縫集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等
便于測(cè)試——?dú)w功于IoC
缺點(diǎn):
大量的XML配置文件
太過靈活——沒有公共的父控制器
沒有內(nèi)置的Ajax支持
Stripes
優(yōu)點(diǎn):
不需要書寫XML配置文件
良好的學(xué)習(xí)文檔
社區(qū)成員很熱心
缺點(diǎn):
社區(qū)比較小
不如其他的項(xiàng)目活躍
ActionBean里面的URL是硬編碼的 Struts 2
優(yōu)點(diǎn):
架構(gòu)簡(jiǎn)單——易于擴(kuò)展
標(biāo)記庫很容易利用FreeMarker或者Velocity來定制
基于控制器或者基于頁面的導(dǎo)航
缺點(diǎn):
文檔組織得很差
對(duì)新特征過分關(guān)注
通過Google搜索到的大多是Struts 1.x的文檔
Tapestry
優(yōu)點(diǎn):
一旦學(xué)會(huì)它,將極大地提高生產(chǎn)率
HTML模板——對(duì)頁面設(shè)計(jì)師非常有利
每出一個(gè)新版本,都會(huì)有大量的創(chuàng)新
缺點(diǎn):
文檔過于概念性,不夠?qū)嵱?/p>
學(xué)習(xí)曲線陡峭
發(fā)行周期長(zhǎng)——每年都有較大的升級(jí)
Wicket
優(yōu)點(diǎn):
對(duì)Java開發(fā)者有利(不是Web開發(fā)者)
頁面和顯示綁定緊密
社區(qū)活躍——有來自創(chuàng)建者的支持
缺點(diǎn):
HTML模板和Java代碼緊挨著
需要對(duì)OO有較好的理解
Wicket邏輯——什么都用Java搞定
第三篇:web基礎(chǔ)總結(jié)
html 小結(jié)
html不區(qū)分大小寫
超鏈接的運(yùn)用:鏈接名稱錨記的運(yùn)用:錨記名稱
標(biāo)簽的類型與運(yùn)用:
//文檔主體部分
//字體類型
//框架
//字體大小//橫線
//圖片
//列表選項(xiàng)
//段落標(biāo)志
//設(shè)定文本格式
//選擇列表
//強(qiáng)調(diào)文本
//下標(biāo)
//上標(biāo)
屬性:
Position:
第四篇:web 算法總結(jié)
1.去掉超鏈接的下畫線: 在
//添加這句就行。 2.格式為:你需要添加下畫線的文字 3.獲取時(shí)間我們可以通過使用DataTime這個(gè)類來獲取當(dāng)前的時(shí)間。通過調(diào)用類中的各種方法我們可以獲取不同的時(shí)間:如:日期(2008-09-04)、時(shí)間(12:12:12)、日期+時(shí)間(2008-09-04 12:11:10)等。
//獲取日期+時(shí)間
DateTime.Now.ToString();
// 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString();
// 2008-9-4 20:12:12 //獲取日期
DateTime.Now.ToLongDateString().ToString();
// 2008年9月4日 DateTime.Now.ToShortDateString().ToString();
// 2008-9-4 DateTime.Now.ToString(“yyyy-MM-dd”);
// 2008-09-04 DateTime.Now.Date.ToString();
// 2008-9-4 0:00:00 //獲取時(shí)間 DateTime.Now.ToLongTimeString().ToString();
// 20:16:16 DateTime.Now.ToShortTimeString().ToString();
// 20:16 DateTime.Now.ToString(“hh:mm:ss”);
// 08:05:57 DateTime.Now.TimeOfDay.ToString();
// 20:33:50.7187500 //其他
DateTime.ToFileTime().ToString();
// ***000 DateTime.Now.ToFileTimeUtc().ToString();
// ***750 DateTime.Now.ToOADate().ToString();
// 39695.8461709606 DateTime.Now.ToUniversalTime().ToString();
// 2008-9-4 12:19:14 DateTime.Now.Year.ToString();
獲取年份
// 2008 DateTime.Now.Month.ToString();
獲取月份
// 9 DateTime.Now.DayOfWeek.ToString();獲取星期
// Thursday DateTime.Now.DayOfYear.ToString();獲取第幾天
// 248 DateTime.Now.Hour.ToString();
獲取小時(shí)
// 20 DateTime.Now.Minute.ToString();
獲取分鐘
// 31 DateTime.Now.Second.ToString();
獲取秒數(shù)
// 45 //n為一個(gè)數(shù),可以數(shù)整數(shù),也可以事小數(shù) dt.AddYears(n).ToString();
//時(shí)間加n年 dt.AddDays(n).ToString();
//加n天 dt.AddHours(n).ToString();
//加n小時(shí) dt.AddMonths(n).ToString();
//加n個(gè)月 dt.AddSeconds(n).ToString();
//加n秒 dt.AddMinutes(n).ToString();
//加n分 SQL語句使用時(shí)間和日期的函數(shù)
getdate():獲取系統(tǒng)當(dāng)前時(shí)間
dateadd(datepart,number,date):計(jì)算在一個(gè)時(shí)間的基礎(chǔ)上增加一個(gè)時(shí)間后的新時(shí)間值,比如:dateadd(yy,30,getdate())datediff(datepart,startdate,enddate):計(jì)算兩個(gè)時(shí)間的差值,比如:datediff(yy,getdate(),'2008-08-08')dataname(datepart,date):獲取時(shí)間不同部分的值,返回值為字符串 datepart(datepart,date):和datename相似,只是返回值為整型 day(date):獲取指定時(shí)間的天數(shù) month(date):獲取指定時(shí)間的月份 year(date):獲取指定時(shí)間的年份 select year(getdate()):當(dāng)前年份
第五篇:Web課程設(shè)計(jì)總結(jié)
Web課程設(shè)計(jì)總結(jié)
一、作品主題描述
我設(shè)計(jì)的網(wǎng)頁的主題是關(guān)于動(dòng)漫推薦的。
我喜歡動(dòng)漫,各種題材的,古代江湖、歷史故事、恐怖、熱血之類的我都喜歡,做這個(gè)網(wǎng)站是希望把我喜歡的推薦給大家,讓更多的人加入二次元的世界!
二、作品技術(shù)路線
關(guān)于作品技術(shù)路線,我主要用了bootstrap方面的知識(shí),像bootstrap按鈕、下拉菜單、縮略圖、bootstrap輪播之類的,當(dāng)然還有很多基礎(chǔ)知識(shí),例如背景、背景音樂,還有視頻的插入,網(wǎng)頁的鏈接等等。
三、作品素材處理
關(guān)于素材,由于我是做的動(dòng)漫方面的網(wǎng)頁,首先我先去選擇適合主題的圖片,再選擇其中最能代表作品的圖片,再根據(jù)實(shí)際情況修改圖片尺寸,接著再選擇文字素材,選擇簡(jiǎn)短有最能概括作品內(nèi)容的文字。
四、主要問題
在這次設(shè)計(jì)中,我還想實(shí)現(xiàn)排行榜這個(gè)功能,但由于個(gè)人能力不足,還有一部分時(shí)間問題,沒有實(shí)現(xiàn)排行榜功能,心里略微有些遺憾,我會(huì)在交上本次課程設(shè)計(jì)之后繼續(xù)努力完成,還有視頻和背景音樂的插入,沒有成功改變播放器的樣式。
五、網(wǎng)頁制作的心得體會(huì)
轉(zhuǎn)瞬之間,半個(gè)學(xué)期又接近尾聲,在李導(dǎo)師的精心輔導(dǎo)下,度過了這個(gè)富有生機(jī),富有朝氣的學(xué)期。學(xué)到了很多做夢(mèng)也不會(huì)遇到的如此奇特的有趣知識(shí),對(duì)于我來講是一個(gè)很好的鍛煉和充實(shí)的機(jī)會(huì)。
俗話說的好“書山有路勤為徑,學(xué)海無涯苦作舟”。在這一絕世佳句的鼓動(dòng)下,我把握了工作之余的一切可利用的剩余時(shí)間,全心全意投入到網(wǎng)頁世界,去不斷的學(xué)習(xí),去不斷的收索;同時(shí)去不斷的充實(shí),去不斷的完善自我,在網(wǎng)絡(luò)的天空下逐漸的美化自己的人生!
在學(xué)習(xí)網(wǎng)頁制作的過程中,我深深體會(huì)到一點(diǎn)“有付出,就終有回報(bào)”,你的付出與你的回報(bào)終究是成正比的。經(jīng)過了多少漫漫長(zhǎng)路,經(jīng)過了多少忘我的投入,經(jīng)過了多少波折,我的網(wǎng)頁與眾人見面了。當(dāng)我第一眼在網(wǎng)絡(luò)下一覽我的個(gè)人主頁,我是多么的激動(dòng),多么的興奮,就像多年未見的老同學(xué),一種講不出道不明的感覺。
我在制作主頁中的心得體會(huì):做好主頁,并不是一件容易的事,它包括個(gè)人主頁的選題、內(nèi)容采集整理、圖片的處理、頁面的排版設(shè)置、背景及其整套網(wǎng)頁的色調(diào)等很多東西。1.標(biāo)題
在個(gè)人主頁中標(biāo)題起著很重要的作用,它在很大程度上決定了你整套個(gè)人主頁的定位。一個(gè)好的標(biāo)題必須有概括性、簡(jiǎn)短,有特色、容易記,還要符合自己主頁的主題和風(fēng)格,決不要取一個(gè)名不符實(shí)的“好名字”,別人第一次上了當(dāng),下次再也不會(huì)光顧了。2.內(nèi)容的采集
選好標(biāo)題后,開始采集內(nèi)容,內(nèi)容必須與標(biāo)題相符,在采集內(nèi)容的過程中,應(yīng)注重特色,所謂特色應(yīng)該是有一些自己的東西。個(gè)人主頁中的特色,應(yīng)該突出自己的個(gè)性,把自己的興趣、愛好盡情地發(fā)揮出來,因?yàn)樵诰W(wǎng)絡(luò)上不受限制。主頁就是在網(wǎng)絡(luò)上的一個(gè)小小家園,在那里,可以放上自己喜歡的任何東西,包括你自己平時(shí)喜歡一些文章,一些好聽的歌,一些好的動(dòng)畫作品。把這些內(nèi)容按類別進(jìn)行分類,設(shè)置欄目,讓人一目了然,在欄目上不要設(shè)置太多,最好不要超過十個(gè),層次上最好少于五層。3.圖片
做個(gè)人主頁不能只用文字,必須在主頁上適當(dāng)?shù)丶右恍﹫D片,增加可看性,俗話說“一圖勝千言”,我想不無道理,一張?zhí)幚淼煤玫膱D片不需要多做任何解釋,就能讓人一目了然,讓人去思考,去了解它。當(dāng)然處理得不好的以及無關(guān)緊要的圖片最好不要放上去,否則讓人覺得是累贅,同時(shí)也影響網(wǎng)頁的傳輸速度。圖片不僅要好看,還要在保證圖片質(zhì)量的情況下盡量縮小圖片的大?。醋止?jié)數(shù)),在目前網(wǎng)絡(luò)傳輸速度不是很快的情況下,圖片的大小在很大程度上影響了網(wǎng)頁的傳輸速度。那么如何精簡(jiǎn)圖片的大小呢,一般來說,圖片顏色較少的及在256色以內(nèi)的最好把它處理成gif圖像格式,如果是一些色彩比較豐富的圖片,最好把它處理成jpg圖像格式,因?yàn)間if和jpg各有各的壓縮優(yōu)勢(shì),應(yīng)根據(jù)具體的圖片來選擇壓縮比。
4.網(wǎng)頁排版
網(wǎng)頁頁面整體的排版設(shè)計(jì)也是不可忽略的,要讓讀者在狹小的電腦屏幕上閱讀,很重要的一個(gè)原則是合理地運(yùn)用空間,讓自己的網(wǎng)頁井井有條,留下必要的空白,人覺得很輕松。不要把整個(gè)網(wǎng)頁都填得密密實(shí)實(shí)的,沒有一點(diǎn)空隙,這樣會(huì)給人一種壓抑感。5.背景
網(wǎng)頁的背景并不一定非要用白色,選用的背景應(yīng)該和整套頁面的色調(diào)相協(xié)調(diào)。合理的應(yīng)用色彩是非常關(guān)鍵的。
6.其它
如果想自己的網(wǎng)頁更有特色一些,可適當(dāng)?shù)丶右恍┚W(wǎng)頁制作的技巧,諸如聲音、動(dòng)態(tài)網(wǎng)頁等,當(dāng)然這些小技巧最好不要加太多,它會(huì)影響網(wǎng)頁的下載速度。等個(gè)人主頁做得差不多了,可別忘了在個(gè)人主頁上放一個(gè)留言板、一個(gè)計(jì)數(shù)器。前者能及時(shí)獲得參觀者的意見和建議,及時(shí)得到網(wǎng)友反饋的信息,最好能做到有問必答,用行動(dòng)去贏得更多的訪問者;后者能讓知道主頁參觀者的統(tǒng)計(jì)數(shù)據(jù),可以及時(shí)調(diào)整設(shè)計(jì),適應(yīng)不同的瀏覽器和參觀者的要求。
7.宣傳
昨天,網(wǎng)頁與我無緣,那是因?yàn)樯咸觳唤o我們一個(gè)見面的機(jī)會(huì)!
今天,網(wǎng)頁與我相識(shí),與我相知,成為我的一個(gè)最真誠的朋友,那時(shí)因?yàn)槎蠋煹男燎谠耘啵?/p>
明天,網(wǎng)頁與我一生相伴,終身相隨,那是因?yàn)槲翌I(lǐng)悟了什么是“一個(gè)網(wǎng)絡(luò),整個(gè)世界”。
總而言之,我將用畢生的精力,心血去換取網(wǎng)絡(luò)中最燦爛的那顆夜明珠,在網(wǎng)頁的藍(lán)圖里,我將記下人生不朽的個(gè)人詩篇,計(jì)算機(jī)會(huì)在以后的學(xué)習(xí)生活中充當(dāng)越來越重要的角色,相信我也會(huì)學(xué)習(xí)到更多關(guān)于計(jì)算機(jī)和網(wǎng)絡(luò)的知識(shí)。這次制作網(wǎng)頁收獲確實(shí)不?。?!