1.Javaweb經歷了三個時期
①JSP Model1第一代
JSP Model1是JavaWeb早期的模型,它適合小型Web項目,開發成本低!Model1第一代時期,服務器端只有JSP頁面,所有的操作都在JSP頁面中,連訪問數據庫的API也在JSP頁面中完成。也就是說,所有的東西都耦合在一起,對后期的維護和擴展極為不利。

②JSP Model1第二代
JSP Model1第二代有所改進,把業務邏輯的內容放到了JavaBean中,而JSP頁面負責顯示以及請求調度的工作。雖然第二代比第一代好了些,但還讓JSP做了過多的工作,JSP中把視圖工作和請求調度(控制器)的工作耦合在一起了。

③JSP Model2
JSP Model2模式已經可以清晰的看到MVC完整的結構了。
·JSP:視圖層,用來與用戶打交道。負責接收用來的數據,以及顯示數據給用戶;
·Servlet:控制層,負責找到合適的模型對象來處理業務邏輯,轉發到合適的視圖;
JavaBean:模型層,完成具體的業務工作,例如:開啟、轉賬等。

這就是javaweb經歷的三個年代,JSP Model2適合多人合作開發大型的Web項目,各司其職,互不干涉,有利於開發中的分工,有利於組件的重用。但是,Web項目的開發難度加大,同時對開發人員的技術要求也提高了。
2.JavaWeb經典三層框架
我們常說的三層框架是由JavaWeb提出的,也就是說這是JavaWeb獨有的!
所謂三層是表述層(WEB層)、業務邏輯層(Business Logic),以及數據訪問層(Data Access)。
·WEB層:包含JSP和Servlet等與WEB相關的內容;
·業務層:業務層中不包含JavaWeb API,它只關心業務邏輯;
·數據層:封裝了對數據庫的訪問細節;
注意,在業務層中不能出現JavaWeb API,例如request、response等。也就是說,業務層代碼是可重用的,甚至可以應用到非Web環境中。業務層的每個方法可以理解成一個萬能,例如轉賬業務方法。業務層依賴數據層,而Web層依賴業務層!

1、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>");
}
2、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>
3、 倡導了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):完成所有的處理過程
4、框架階段
倡導了MVC思想的jsp+javabean+servlet出現,也存在問題:1)jsp頁面中嵌入了很多java代碼,使得結構很亂;2)對於大型項目,servlet過多,轉向頻繁,流程,配置等不易集中管理,因而出現了struts
4.1、Struts的出現
2001年6月,struts1.0出現,struts針對jsp推出了一套struts標簽,從而使得jsp中沒有了Java代碼,結構清晰,功能強大。針對servlet,它提供了Action類來代替了servlet,這個Action類具有servlet的功能,並且能夠進行一些請求過濾和自動轉碼的功能。
4.2、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文件的配置復雜度。