javascript
从Servlet到JSP,从Model1到Model2
Servlet的出現(xiàn)
Servlet技術和JSP技術是利用Java語言開發(fā)Web應用程序的兩個主要技術,1996年Sun公司首次推出Servlet技術來解決Web程序當中的性能問題。Servlet在首次被用戶請求的時候加載到內(nèi)存當中,之后將一直駐留在內(nèi)存里,對同一個servlet的后續(xù)請求將不用再對這個servlet的類進行實例化,這種機制大大提高了Web應用程序的相應速度。
可是Servlet并不是那么完美,當人們在編寫Servlet的時候發(fā)現(xiàn)所有HTML輸出代碼都封裝在String對象里,然后再用out對象的print方法向用戶展示出來,這不免增加了編碼的難度,而且維護起來也十分麻煩,即使稍微一點點的改動也需要重新編譯Servlet才行。
JSP以及相關技術的出現(xiàn)
Sun公司意識到了這個問題,并提出了JSP技術。JSP允許Java代碼和HTML標簽混雜在一起以簡化頁面的開發(fā),修改頁面無需重新編譯,當?shù)谝淮伪徽埱蟮臅r候如果原先的JSP有變化則重新自動編譯,如果沒有變化則直接加載已經(jīng)存在的實例。
但是問題又接踵而至:
l? Java代碼和HTML代碼(邏輯和顯示)混雜在一起使得程序變得難以閱讀和維護
l? 把代碼放在JSP當中很難重用,這與面向?qū)ο蟮乃枷胧窍嚆5?/span>
l? JSP當中編寫代碼IDE對此支持的并不是那么十分的出色
l? 測試變得困難
邏輯和顯示混雜是不被人們所提倡的,早在JSP1.0規(guī)范中就鼓勵程序員使用JavaBean將業(yè)務邏輯代碼封裝,從而把顯示和業(yè)務分開。但是事情并不像想象的那么美好,在JSP當中對JavaBean中的方法命名必須遵守其命名約定,所以偶爾會出現(xiàn)某個方法的名字非常冗長難記。為了實現(xiàn)代碼和HTML更容易的分離JSP1.1定義了幾個自定義標簽庫,他們比JavaBean更加靈活易用。
但是舊的問題解決了,新的問題出現(xiàn):自定義標簽庫很難編寫,并且JSP1.1中的自定義標簽有著非常復雜的生命周期。
后來人們開始給有關的標簽添加一些特定的常用功能。這些標簽庫編譯為幾個庫文件,統(tǒng)稱為JSTL(JavaServer Pages Standard Tag Libraries,JSP標準標簽庫)。
盡管有了JavaBean,JSTL等技術可以把業(yè)務邏輯和顯示代碼分開,但是還是有很多開發(fā)者貪圖方便或者說目光短淺,仍將邏輯與顯示的代碼混雜在一起。
Model1設計模型
至此出現(xiàn)了Java語言開發(fā)Web應用的第一種設計模型我們稱之為Model1,簡而言之就是只用JSP不使用Servlet,將頁面代碼和邏輯代碼混雜在一起。從一個JSP頁面到另外一個JSP頁面是通過頁面里的鏈接完成的。
這種模式的問題就向上面所說的,對于小項目而言開發(fā)可能方便了一些。但是對于大型項目,開發(fā)是苦不堪言的,因為這種架構(gòu)不利于網(wǎng)頁設計師和Web開發(fā)人員之間的勞動分工:開發(fā)人員既要參與頁面的開發(fā),又要參與業(yè)務邏輯的編碼。維護起來就更加痛苦了,邏輯與顯示代碼混雜、頁面之間的聯(lián)系是通過鏈接(這意味著一旦頁面名字改變那么任何使用這個頁面的其他頁面都要更改,嚴重的違背了面向?qū)ο蟮乃枷?#xff09;這對開發(fā)人員來說儼然就是一場噩夢。
Model2設計模型
于是第二種設計模型出現(xiàn)了,我們稱之為Model2,這個模型是MVC(Model-View-Controller,模型-視圖-控制器)設計模式的另一個名字。按照Model2模型開發(fā)的應用程序由三種主要部分組成:模型、視圖、和控制器。
在Model2模型里,所有的頁面都有一個共同的入口點,通常是用一個Servlet或者過濾器(其中Struts1用的是Servlet,而Struts2用的是過濾器)來充當控制器。控制器部分負責接收來自用戶輸入并控制模型和視圖部分做出相應的變化;視圖部分負責實現(xiàn)應用程序的信息顯示功能;模型部分封裝著應用程序的數(shù)據(jù)和業(yè)務邏輯。而在這樣的應用程序里,每一個HTTP請求都必須定向到控制器,而潛在各個請求中的URI里的信息將告訴這個控制需要調(diào)用哪些動作。控制器檢查每個URI以決定應該調(diào)用哪些動作。它還將動作對象保存在一個可以從視圖訪問的地方,這樣服務器端的值就可以顯示在瀏覽器上了。最后控制器使用RequestDispatcher對象把請求傳遞給視圖(即相應的JSP頁面),再由JSP頁面里的定義標簽把動作對象的內(nèi)容顯示出來。
整個的發(fā)展流程
原來:技術的發(fā)展是由問題堆砌起來的。
后面將分別演示用Servlet和過濾器作為控制器實現(xiàn)Model2設計模型,其實可以看作是Struts1和Struts2的demo。
轉(zhuǎn)載于:https://www.cnblogs.com/beijiguangyong/archive/2013/01/03/2847137.html
總結(jié)
以上是生活随笔為你收集整理的从Servlet到JSP,从Model1到Model2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery 选中单选按钮的值
- 下一篇: Spring中的Ibatis之SqlMa