欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
java教程(四)關(guān)于MVC
   現在許許多多的初學(xué)者和程序員,都在趨之若鶩地學(xué)習Web開(kāi)發(fā)的寶典級框架:Struts2,Spring,Hibernate。似乎這些框架成為了一個(gè)人是否精通Java,是否會(huì )寫(xiě)J2EE程序的唯一事實(shí)標準和找工作的必備基礎。

  然而,如果在面試的時(shí)候問(wèn)這些程序員,你們?yōu)槭裁匆獙W(xué)習這些框架?這些框架的本質(zhì)到底是什么?似乎很少很少有人能夠給我非常滿(mǎn)意的答復。因為他們都在為了學(xué)習而學(xué)習,為了工作而學(xué)習,而不是在真正去深入了解一個(gè)框架。其實(shí)所有的人都應該思考這樣的問(wèn)題:為什么要學(xué)習框架?框架到底給我帶來(lái)了什么?接下來(lái),我們以登錄作為一個(gè)最簡(jiǎn)單的例子,來(lái)看看不同的年代,我們是怎么寫(xiě)Web程序的。

  在很多年前,我們這么寫(xiě)程序的:

  很多年前,那是一個(gè)貧苦的年代,如果我們要使用Java在網(wǎng)頁(yè)上做一些動(dòng)態(tài)的交互功能。很多人會(huì )告訴你一個(gè)技術(shù),叫做JSP。在我還對Java非常困惑的時(shí)候,就有人告訴我,JSP是個(gè)好東西,它可以在HTML代碼里面寫(xiě)Java代碼來(lái)完成邏輯。

Html代碼:

    作為一張JSP,它可以接收從別的JSP發(fā)送過(guò)來(lái)的登錄請求,并進(jìn)行處理。這樣,我們不需要任何額外的配置文件,也不需要任何框架的幫忙,就能完成邏輯。

  后來(lái),程序寫(xiě)得越來(lái)越多,我們發(fā)現,這種在HTML代碼中編寫(xiě)Java代碼來(lái)完成邏輯的方式存在著(zhù)不少問(wèn)題:

  1. Java代碼由于混雜在一個(gè)HTML環(huán)境中而顯得混亂不堪,可讀性非常差。一個(gè)JSP文件有時(shí)候會(huì )變成幾十K,甚至上百K。要找一段邏輯,經(jīng)常無(wú)法定位。

  2. 編寫(xiě)代碼時(shí)非常困惑,不知道代碼到底應該寫(xiě)在哪里,也不知道別人是不是已經(jīng)曾經(jīng)實(shí)現過(guò)類(lèi)似的功能,到哪里去引用。

   3. 突然之間,某個(gè)需求發(fā)生了變化。于是,每個(gè)人蒙頭開(kāi)始全程替換,還要小心翼翼的,生怕把別人的邏輯改了。

  4. 邏輯處理程序需要自己來(lái)維護生命周期,對于類(lèi)似數據庫事務(wù)、日志等眾多模塊無(wú)法統一支持。

  在這個(gè)時(shí)候,如果有一個(gè)產(chǎn)品,它能夠將頁(yè)面上的那些Java代碼抽取出來(lái),讓頁(yè)面上盡量少出現Java代碼,該有多好。于是許多人開(kāi)始使用servlet來(lái)處理那些業(yè)務(wù)邏輯。

  Java代碼:

 

    在這里,我們需要在web.xml中為這個(gè)servlet配置url的請求關(guān)系。

Xml代碼:

 

    代碼重構到這里,我們發(fā)現,其實(shí)我們的工作量本身并沒(méi)有減少,只是代碼從JSP移動(dòng)到了Servlet,使得整個(gè)流程看上去稍微清楚了一些。然而,為了這么點(diǎn)干凈,我們付出的代價(jià)是什么?為每個(gè)servlet都在web.xml里面去做一個(gè)url的請求配置!

    時(shí)代進(jìn)一步發(fā)展,人們發(fā)現簡(jiǎn)單的JSP和Servlet已經(jīng)很難滿(mǎn)足人們懶惰的要求了。于是,人們開(kāi)始試圖總結一些公用的Java類(lèi),來(lái)解決Web開(kāi)發(fā)過(guò)程中碰到的問(wèn)題。這時(shí),橫空出世了一個(gè)框架,叫做struts。它非常先進(jìn)地實(shí)現了MVC模式,成為了廣大程序員的福音。

  struts的代碼示例我就不貼了,網(wǎng)上隨便搜搜你可以發(fā)現一堆一堆的。在一定程度上,struts能夠解決web開(kāi)發(fā)中的職責分配問(wèn)題,使得顯示與邏輯分開(kāi)。不過(guò)在很長(cháng)一段時(shí)間內,使用struts的程序員往往無(wú)法分別我們到底需要web框架幫我們做什么,我們到底需要它完成點(diǎn)什么功能?

  我們到底要什么?

  在回顧了我們寫(xiě)代碼的歷史之后,我們回過(guò)頭來(lái)看看,我們到底要什么?

  無(wú)論是使用JSP,還是使用Struts1,或是Struts2,我們至少都需要一些必須的元素(如果沒(méi)有這些元素,或許我還真不知道這個(gè)程序會(huì )寫(xiě)成什么樣子):

  1. 數據

  在這個(gè)例子中,就是name和password。他們共同構成了程序的核心載體。事實(shí)上,我們往往會(huì )有一個(gè)User類(lèi)來(lái)封裝name和password,這樣會(huì )使得我們的程序更加OO。無(wú)論怎么說(shuō),數據會(huì )穿插在這個(gè)程序的各處,成為程序運行的核心。

  2. 頁(yè)面展示

  在這個(gè)例子中,就是login.jsp。沒(méi)有這個(gè)頁(yè)面,一切的請求、驗證和錯誤展示也無(wú)從談起。在頁(yè)面上,我們需要利用HTML,把我們需要展現的數據都呈現出來(lái)。同時(shí)我們也需要完成一定的頁(yè)面邏輯,例如,錯誤展示,分支判斷等等。

  3. 處理具體業(yè)務(wù)的場(chǎng)所

  在這里,不同階段,處理具體業(yè)務(wù)的場(chǎng)所就不太一樣。原來(lái)用JSP和Servlet,后來(lái)用Struts1或者Struts2的Action。

  上面的這些必須出現的元素,在不同的年代,被賦予了不同的表現形式,有的受到時(shí)代的束縛,其表現形式非常落后,有的已經(jīng)不再使用。但是撥開(kāi)這些外在的表現形式,我們就可以發(fā)現,這不就是我們已經(jīng)熟門(mén)熟路的MVC嘛?

  數據 ———— Model

  頁(yè)面展示 ———— View

  處理具體業(yè)務(wù)的場(chǎng)所 ———— Control

  所以,框架不重要,概念是王道。只要能夠深刻理解MVC的概念,框架對你來(lái)說(shuō),只是一個(gè)jar包而已。

  MVC的概念其實(shí)就那么簡(jiǎn)單,這些概念其實(shí)早已深入我們的內心,而我們所缺乏的是將其本質(zhì)挖掘出來(lái)。我們來(lái)看看下面這幅圖,這是一副流行了很多年的講述MVC模型的圖:

 

    在這幅圖中,MVC三個(gè)框框各司其職,結構清晰明朗。不過(guò)我覺(jué)得這幅圖忽略了一個(gè)問(wèn)題,就是數據是動(dòng)的,數據在View和Control層一旦動(dòng)起來(lái),就會(huì )產(chǎn)生許多的問(wèn)題:

  1. 數據從View層傳遞到Control層,如何使得一個(gè)個(gè)扁平的字符串,轉化成一個(gè)個(gè)生龍活虎的Java對象

  2. 數據從View層傳遞到Control層,如何方便的進(jìn)行數據格式和內容的校驗?

  3. 數據從Control層傳遞到View層,一個(gè)個(gè)生龍活虎的Java對象,又如何在頁(yè)面上以各種各樣的形式展現出來(lái)

  4. 如果你試圖將數據請求從View層發(fā)送到Control層,你如何才能知道你要調用的究竟是哪個(gè)類(lèi),哪個(gè)方法?一個(gè)Http的請求,又如何與Control層的Java代碼建立起關(guān)系來(lái)?

  除此之外,Control層似乎也沒(méi)有想象中的那么簡(jiǎn)單,因為它作為一個(gè)控制器,至少還需要處理以下的問(wèn)題:

  1. 作為調用邏輯處理程序的facade門(mén)面,如果邏輯處理程序發(fā)生了異常,我們該如何處理?

  2. 對于邏輯處理的結果,我們需要做怎么樣的處理才能滿(mǎn)足豐富的前臺展示需要?

  這一個(gè)又一個(gè)問(wèn)題的提出,都基于對MVC的基本概念的挖掘。所以,這些問(wèn)題都需要我們在寫(xiě)程序的時(shí)候去一一解決。說(shuō)到這里,這篇文章開(kāi)頭所提的問(wèn)題應該可以有答案了:框架是為了解決一個(gè)又一個(gè)在Web開(kāi)發(fā)中所遇到的問(wèn)題而誕生的。不同的框架,都是為了解決不同的問(wèn)題,但是對于程序員而言,他們只是jar包而已??蚣艿膬?yōu)缺點(diǎn)的評論,也完全取決于其對問(wèn)題解決程度和解決方式的優(yōu)雅性的評論。所以,千萬(wàn)不要為了學(xué)習框架而學(xué)習框架,而是要為了解決問(wèn)題而學(xué)習框架,這才是一個(gè)程序員的正確學(xué)習之道。


  

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
MVC框架的困惑
Java框架筆記(一) — 初識Struts2
Java Web目前主流的框架以及正在興起的框架
Java知識拾遺:三大框架的技術(shù)起源
用struts framework開(kāi)發(fā)應用程序
JSF,早晨八九點(diǎn)鐘的太陽(yáng)冉冉升起
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久