1.Javaweb經歷了三個時期
①JSP Model1第一代
JSP Model1是JavaWeb早期的模型,它適合小型Web項目,開發成本低!Model1第一代時期,服務器端只有JSP頁面,全部的操做都在JSP頁面中,連訪問數據庫的API也在JSP頁面中完成。也就是說,全部的東西都耦合在一塊兒,對後期的維護和擴展極爲不利。css
②JSP Model1第二代
JSP Model1第二代有所改進,把業務邏輯的內容放到了JavaBean中,而JSP頁面負責顯示以及請求調度的工做。雖然第二代比第一代好了些,但還讓JSP作了過多的工做,JSP中把視圖工做和請求調度(控制器)的工做耦合在一塊兒了。html
③JSP Model2
JSP Model2模式已經能夠清晰的看到MVC完整的結構了。
·JSP:視圖層,用來與用戶打交道。負責接收用來的數據,以及顯示數據給用戶;
·Servlet:控制層,負責找到合適的模型對象來處理業務邏輯,轉發到合適的視圖;
JavaBean:模型層,完成具體的業務工做,例如:開啓、轉帳等。前端
這就是javaweb經歷的三個年代,JSP Model2適合多人合做開發大型的Web項目,各司其職,互不干涉,有利於開發中的分工,有利於組件的重用。可是,Web項目的開發難度加大,同時對開發人員的技術要求也提升了。java
2.JavaWeb經典三層框架
咱們常說的三層框架是由JavaWeb提出的,也就是說這是JavaWeb獨有的!
所謂三層是表述層(WEB層)、業務邏輯層(Business Logic),以及數據訪問層(Data Access)。
·WEB層:包含JSP和Servlet等與WEB相關的內容;
·業務層:業務層中不包含JavaWeb API,它只關心業務邏輯;
·數據層:封裝了對數據庫的訪問細節;web
注意,在業務層中不能出現JavaWeb API,例如request、response等。也就是說,業務層代碼是可重用的,甚至能夠應用到非Web環境中。業務層的每一個方法能夠理解成一個萬能,例如轉帳業務方法。業務層依賴數據層,而Web層依賴業務層!
數據庫
一、Servlet的出現
上世紀90年代,隨着Internet和瀏覽器的飛速發展,基於瀏覽器的B/S模式隨之火爆發展起來。 最初,用戶使用瀏覽器向WEB服務器發送的請求都是請求靜態的資源,好比html、css等。 可是能夠想象:根據用戶請求的不一樣動態的處理並返回資源是理所固然必須的要求。編程
java 爲了應對上述需求,就必然推出一種技術來支持動態需求,所以servlet技術誕生後端
使用Servlet技術,頁面中的全部信息須要經過輸出語句來生成。下面的代碼(部分代碼)生成的頁面的內容就是「HelloWorld!」。瀏覽器
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>");
}
二、Jsp的出現
servlet誕生後,sun公司很快發現servlet編程很繁瑣,1)servlet代碼有大量冗餘代碼,out輸出就得寫上百遍;2)開發servlet必須精通網頁前端和美工,你得很是不直觀的在Servlet中寫前端代碼,這使得實現各類頁面效果和風格很是困難。服務器
因此,sun公司借鑑 微軟的asp,正式推出了jsp(servlet1.1)。採用HTML語言直接生成界面,在界面中使用<% %>腳本標識嵌入Java代碼
一個簡單的jsp例子
<html>
<head><title>測試</title></head>
<body>
第一階段<% String str = 「test」 ; out.println(str); %>
</body>
</html>
三、 倡導了MVC思想的servlet版本servlet1.2出現------------jsp+javabean+servlet
jsp出現後,也存在問題,1)前端開發人員須要看大量他看不懂的後端代碼;2)一樣,servlet開發人員也在複雜的前端代碼中找到其能寫servlet代碼的地方
因此,MVC思想的JSP+JavaBean+Servlet誕生了
JSP(V):JSP完成輸入和輸出,主要使用HTML標籤和JSP標籤
Servlet(C):主要完成控制,接收請求,調用業務處理(JavaBean),根據調用的結果找到一個JSP頁面對用戶進行響應
JavaBean(M):完成全部的處理過程
四、框架階段
倡導了MVC思想的jsp+javabean+servlet出現,也存在問題:1)jsp頁面中嵌入了不少java代碼,使得結構很亂;2)對於大型項目,servlet過多,轉向頻繁,流程,配置等不易集中管理,於是出現了struts
4.一、Struts的出現
2001年6月,struts1.0出現,struts針對jsp推出了一套struts標籤,從而使得jsp中沒有了Java代碼,結構清晰,功能強大。針對servlet,它提供了Action類來代替了servlet,這個Action類具備servlet的功能,而且可以進行一些請求過濾和自動轉碼的功能。
4.二、Spring的出現
本來已經開起來很完美了,可是又有一個問題,就是咱們在Action調用DAO、Java bean等對象的時候都須要在自身代碼中構建它們的對象來使用,這樣增長了程序的耦合性,這與咱們:「高內聚、鬆耦合」的思想不符合,那麼怎麼解決這個問題呢?於是出現了Spring框架。
Spring框架有兩大功能:IOC(控制反轉)和AOP(面向切面的編程),其中IOC就是說:當一個類中想要調用另一個類的對象時,不須要再經過new 關鍵字來建立,而是由Spring框架來負責:建立、分配和管理,從而下降了程序中的耦合性。而AOP能夠用來作一些日誌的打印和輸出,用於提示程序執行過程當中的一些具體信息等。
4.3 、SpringMVC的出現
最後struts和Spring的整合,因爲每個bean都要在Spring中註冊,每個URL都要在struts配置文件中配置。當bean不少和URL對應的請求不少的時候,配置文件無疑會是很龐大的,這個就會使得配置起來很麻煩的費力。那麼還有沒有更好的辦法使得可以結合Spring的功能和struts的功能,可是又可使配置文件不會批量的增長?於是SpringMVC出現了
SpringMVC經過「基於註解」的方式代替了struts,而且經過Controller類來代替和實現了Action的功能。因爲是基於註解的,因此不少的配置信息放在了Controller類中配置,從而下降了.xml文件的配置複雜度。