javaWeb发展历史
javaWeb發展歷史
- 前述-BS架構與CS架構
- 1.1 CS架構
- 1.2 BS架構
- 2 JavaWeb發展歷史
- 2.1 servlet之前
- 2.2 Servlet出現(純Servlet開發)
- 2.3 JSP(純JSP開發)——也叫model1第一代
- 2.3.1 JSP+JavaBean(Model1第二代)
- 2.3.2 Servlet+JSP+JavaBean(Model2)
- 2.4 JavaWeb經典三層框架
- 2.5 框架階段
- 2.5.1 Struts
- 2.5.2 Spring
- 2.5.3 SpringMVC
- 小計
前述-BS架構與CS架構
1.1 CS架構
產品:在C/S結構的情況下,不同的服務需要安裝不同的客戶端軟件,比如QQ、迅雷、Foxmail。這種情況下安裝的軟件會越來越多,同時也有許多弊端,比如A出差,需要在B電腦上查收郵件,但是B電腦并未安裝Foxmail等類似的客戶端軟件。
1,數據傳輸流程
1)、客戶端軟件產生數據,存放于客戶端軟件的內存中,然后調用接口將自己內存中的數據發送/拷貝給操作系統內存
2)、客戶端操作系統收到數據后,按照客戶端軟件指定的規則(即協議)、調用網卡發送數據
3)、網絡傳輸數據
4)、服務端軟件調用系統接口,想要將數據從操作系統內存拷貝到自己的內存中
5)、服務端操作系統收到4的指令后,使用與客戶端相同的規則(即協議)從網卡接收到數據,然后拷貝給服務端軟件
2,cs架構圖
CS:(Client/Server,客戶端/服務器模式),桌面級應用 響應速度快,安全性強,個性化能力強,響應數據較快
1.2 BS架構
1,通信流程
具體參考一個請求到響應的過程
2,BS架構圖
BS:(Browser/Server,瀏覽器/服務器模式),web應用 可以實現跨平臺,客戶端零維護,但是個性化能力低,響應速度較慢。
2 JavaWeb發展歷史
2.1 servlet之前
servlet大多數人還是了解的,也還在使用,這里就從servlet說起吧。傳說在上世紀90年代,因為nternet和瀏覽器的飛速發展,使得基于瀏覽器的B/S模式隨之火爆發展起來。最初,用戶使用瀏覽器向WEB服務器發送的請求都是請求靜態的資源,比如html、css等。 但是可以想象:根據用戶請求的不同動態的處理并返回資源是理所當然必須的要求,例如用戶提交一些東西,服務器就能按提交的內容反饋用戶不同的效果。所以人們應該非常迫切想要推出一項技術來實現動態的處理, java 為了應對上述需求,促進了servlet技術誕生。
2.2 Servlet出現(純Servlet開發)
SUN公司剛剛推出JavaEE(Java企業版)時,推出了Servlet這個東西,命名就是Service+Applet,即服務小程序。Servlet可以說是Java技術中最早的Web解決方案,Servlet與普通Java類的編寫非常類似。在Servlet中可以通過挨著行輸出Html等語句來實現頁面的樣式和輸出,數據的動態功能當然也就實現了。表現、邏輯、控制、業務全部混在Servlet類中。下面給出一個簡單例子來直觀感受一下。
public void doGet(HttpServletRequest request,HttpServletResponse)throws IOException,ServletException {response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>Hello World!</title></head>");out.println("<body>");out.println("<p>Hello World!</p>");out.println("</body></html>"); }這樣就動態的生成了一個內容為Hello World!的HTML頁面在瀏覽器上顯示。
注意:這里所有代碼的實現都在servlet這個類里實現,沒有html,沒有前端
一項技術的出現必然解決了一些現存的問題,但是我們知道servlet之后還有好些技術來替代在servlet中生成HTML頁面的方式,那就說明servlet還存在痛點。從上面代碼中我們可以看到servlet編程其實很繁瑣:
servlet代碼有大量冗余代碼,out輸出就得寫上百遍;
開發servlet必須精通網頁前端和美工,你得非常不直觀的在Servlet中寫前端代碼,這使得實現各種頁面效果和風格非常困難。
對于后端來說,所有的業務邏輯、頁面跳轉、央視表現全部混雜在同一個類中,并且一項業務一般只有一個Servlet類與其對應,實在是….太麻煩了。
所以為了解決這些問題(真慶幸晚生了好多年),sun公司借鑒 微軟的asp,正式推出了JSP(servlet1.1)
2.3 JSP(純JSP開發)——也叫model1第一代
經過純Servlet開發的噩夢之后,Sun公司又推出(或者說是倡導)了JSP技術,全稱是Java Server Page,JSP中采用HTML語言直接生成界面,還可以在界面中使用<% %>腳本標識嵌入Java代碼,揪其本質也是最終生成一個Servlet類來編譯解析。如果要開發具有大量網頁內容的網站,可以先使用網頁編輯工具編寫網頁,然后在網頁中嵌入處理代碼即可。再來一個簡單的例子:
<html><head><title>測試</title></head><body>顯示的內容是:<% String aa= “hello” ; out.println(aa); %></body> </html>注意:此時所有的代碼實現都在jsp里實現,包括調用數據庫的操作
雖然JSP可以實現網站的快速開發,但依然存在缺點:網站的輸入輸出、處理、控制全部夾雜在一起,維護不方便,即使只需要修改該頁面的一個簡單按鈕文本,或者一段靜態的文本內容,也不得不打開混雜的動態腳本的頁面源文件進行修改。當網站中需要進行大量的處理代碼的時候,JSP文件將很難維護,并且代碼也不容易共享。
前端開發人員需要看大量他看不懂的后端代碼;
同樣,servlet開發人員也要在復雜的前端代碼中找到其能寫servlet代碼的地方
因為JSP在編寫網頁方面具有優勢,而編寫處理代碼存在很多問題,所以人們把JSP中的處理代碼使用JavaBean來實現。于是出現了JSP+JavaBean的開發模式(javaBean這里負責業務邏輯和實體類模型)。
2.3.1 JSP+JavaBean(Model1第二代)
這里就要首先弄清楚JavaBean到底是啥?JavaBean 是一種JAVA語言寫成的可重用組件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數的構造器。JavaBean 通過提供符合一致性設計模式的公共方法將內部域暴露成員屬性,set和get方法獲取(百度)。其實可以理解就是Java類,這里我理解為JavaBean的出現作為和數據庫交互的類,Jsp頁面里邊中寫部分Java代碼用于轉發等操作以及HTML頁面的生成代碼,而獲取數據的方式以及業務邏輯(這里的業務邏輯就是非請求轉發部分的代碼)則通過JavaBean來實現。
javabea的功能:封裝數據和封裝業務邏輯
整體結構
這種開發模式有一個簡單的分層 JSP:表現層、控制層; JavaBean:模型層 利用我們現在熟悉的MVC模型的思想去看,雖然編寫代碼十分容易,但Jsp混淆了MVC模型中的視圖層和控制層, 高度耦合的結果是Jsp代碼十分復雜,后期維護依舊困難。由原有的Model1第二代開發模式轉變成Model2開發模式,即Servlet+JSP+JavaBean。同時也使得在Web項目中將MVC設計模式實現。
2.3.2 Servlet+JSP+JavaBean(Model2)
Model1第二代雖然在一定程度上解耦了,但JSP依舊即要負責頁面控制,又要負責邏輯處理,職責不單一!此時Model2應運而生,使得各個部分各司其職,Model2是基于MVC模式的。Model2的開發模式是:Jsp+Servlet+JavaBean的模式,它和Model1不同的是,增加了Servlet。
在這種開發模式下,JSP頁面中就可以不用任何的<%%>語句了,包括<%=%>全部用EL表達式來代替,列表的遍歷和條件判斷等(Java中的for循環和if語句)也可以通過JSTL來代替。 這樣的話視圖層相比較之前的開發模式來說要薄得多的多,JSP中不涉及任何的業務邏輯,前端人員修改樣式也十分方便。這里可以理解為JSP為MVC設計模式中的V,即視圖。
控制層通過Servlet來實現,獲取前臺傳的參數、控制頁面跳轉,封裝對象、向前臺傳輸對象或者參數。并且可以由自己設計,設法用一個Servlet類實現該模塊的所有功能的頁面跳轉。這里可以理解為Servlet為MVC設計模式中的C,即控制器。
但這里要說明的是Model2并不是一個完全標準的MVC設計模式,因為JavaBean還過于臃腫,并不能完全作為M層存在,所以將JavaBean中的封裝業務功能再一次進行分割:業務邏輯、數據持久化。
2.4 JavaWeb經典三層框架
三層架構:
表現層(Web層):通俗說就是用戶所能看到的直觀的界面。其作用就是接收用戶提交的請求數據,以及將程序對用戶請求所產生的響應數據反饋給用戶。目的就是為用戶提供可交互的操作界面。所以,表現層就像已經搭好的積木。
業務邏輯層:簡單講就是“具體問題,具體分析”。它根據用戶的不同請求而做出不同響應的處理。可以說是對數據層的一種整合方式。所以,就如同每個人會根據自己的喜好搭建不同的積木一樣,業務邏輯層代表的就是搭積木的方式。
數據訪問層(持久化):它只是提供對數據庫操作的多種途徑。不同的數據就好比形狀各異的積木,而數據訪問層就好比取出或放回這些積木的動作。
MVC設計模式:
模型(Model):封裝的是數據源和所有基于對這些數據的操作。在一個組件中,Model往往表示組件的狀態和操作狀態的方法。
視圖(View):封裝的是對數據源Model的一種顯示。一個模型可以由多個視圖,而一個視圖理論上也可以與不同的模型關聯起來。
控制器(Control):封裝的是外界作用于模型的操作。通常,這些操作會轉發到模型上,并調用模型中相應的一個或者多個方法。一般Controller在Model和View之間起到了溝通的作用,處理用戶在View上的輸入,并轉發給Model。這樣Model和View兩者之間可以做到松散耦合,甚至可以彼此不知道對方,而由Controller連接起這兩個部分。
至此,頁面的表現由jsp實現,轉發控制由servlet實現,業務邏輯寫在業務邏輯層,操作數據庫部分寫在持久化層,封裝數據放在bean層, 分工明確,各司其職。Model1、Model2、三層是在解耦的基礎上一步步進化而來,通過解耦我們可以進行進一步的抽象,以應對現實需求的變動。這里要說的就是,從servlet一直到三層架構的轉變,其實都是為了實現高內聚,低耦合。一步一步將各個功能分配到不同的地方實現。
2.5 框架階段
倡導了MVC思想的jsp+javabean+servlet出現,也存在問題:
jsp頁面中嵌入了很多java代碼,使得結構很亂;
對于大型項目,servlet過多,轉向頻繁,流程,配置等不易集中管理
因而出現了struts框架
2.5.1 Struts
2001年6月,struts1.0出現,struts針對jsp推出了一套struts標簽,從而使得jsp中沒有了Java代碼,結構清晰,功能強大。針對servlet,它提供了Action類來代替了servlet,這個Action類具有servlet的功能,并且能夠進行一些請求過濾和自動轉碼的功能。
2.5.2 Spring
原本已經開起來很完美了,但是又有一個問題,就是我們在Action調用DAO、Java bean等對象的時候都需要在自身代碼中構建它們的對象來使用,這樣增加了程序的耦合性,這與我們:“高內聚、松耦合”的思想不符合,那么怎么解決這個問題呢?因而出現了Spring框架。
Spring框架有兩大功能:IOC(控制反轉)和AOP(面向切面的編程),其中IOC就是說:當一個類中想要調用另外一個類的對象時,不需要再通過new 關鍵字來創建,而是由Spring框架來負責:創建、分配和管理,從而降低了程序中的耦合性。而AOP可以用來做一些日志的打印和輸出,用于提示程序執行過程中的一些具體信息等。
2.5.3 SpringMVC
最后struts和Spring的整合,由于每一個bean都要在Spring中注冊,每一個URL都要在struts配置文件中配置。當bean很多和URL對應的請求很多的時候,配置文件無疑會是很龐大的,這個就會使得配置起來很麻煩的費力。那么還有沒有更好的辦法使得能夠結合Spring的功能和struts的功能,但是又可以使配置文件不會批量的增加?因而SpringMVC出現了
SpringMVC通過“基于注解”的方式代替了struts,并且通過Controller類來代替和實現了Action的功能。由于是基于注解的,所以很多的配置信息放在了Controller類中配置,從而降低了.xml文件的配置復雜度。
小計
1,Javabean既可以封裝數據同時也可以封裝業務邏輯,那它的封裝業務邏輯和在servlet寫業務邏輯有什么區別嗎?
Servlet中的業務邏輯也可以說是業務管理,是直接與前臺頁面相關聯的,一般都是和請求轉發有關。而javabean中的業務邏輯主要還是直接或間接與訪問數據庫有關的代碼。
2,JavaBean的發展
3,至此,頁面的表現由jsp實現,轉發控制由servlet實現,業務邏輯寫在業務邏輯層,操作數據庫部分寫在持久化層,封裝數據放在bean層,
總結
以上是生活随笔為你收集整理的javaWeb发展历史的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vcpkg的使用
- 下一篇: vcpkg如何全面卸载和重新安装包