深圳網(wǎng)站建設(shè)制作公司排名國際新聞頭條
1.0版本javaWeb:原始servlet+jsp+jsbc
早期的jsp:html+java,頁面先在后端被解析,里面的java代碼動態(tài)渲染完成后,成為純html,再通過服務(wù)器發(fā)送給瀏覽器顯示。
缺點(diǎn):
服務(wù)器壓力很大,因?yàn)闊o論是jdbc數(shù)據(jù)庫查詢,servlet請求接受,還是jsp頁面動態(tài)渲染,都是在服務(wù)器端進(jìn)行的。
2.0階段:javaWeb:基于MVC思想的servlet+jsp+jdbc
缺點(diǎn):
java的本質(zhì)是面向?qū)ο?#xff0c;當(dāng)代碼量變大,對象的管理變的混亂不堪。
譬如我想在controller中用一次model的對象,就得new一次。想在controller中用一次view的對象,就得new一次。
3.0階段:javaWeb:基于MVC思想的“SSH框架(Struts+Spring+Hibernate)+jsp”
3.5階段 javaWeb:基于MVC思想的“SSM框架(SpringMvc+Spring+Mybatis)+jsp”
4.0階段:前后端分離:thymeleaf
5.0階段 springboot
javaweb:用java來做web程序,一般都是bs模式。
javaweb流行框架:servlet+jsp+jdbc。
jdbc:提供一系列api,用java去訪問數(shù)據(jù)庫。
servlet:服務(wù)端小程序,接受瀏覽器發(fā)過來的請求并做業(yè)務(wù)處理。
jsp:java服務(wù)端頁面。
早期的jsp:html+java,頁面先在后端被解析,里面的java代碼動態(tài)渲染完成后,成為純html,再通過服務(wù)器發(fā)送給瀏覽器顯示。
早期javaweb對于服務(wù)器壓力很大,因?yàn)闊o論是jdbc數(shù)據(jù)庫查詢,servlet請求接受,還是jsp頁面動態(tài)渲染,都是在服務(wù)器端進(jìn)行的。
此時mvc出現(xiàn)了,分為model+controller+view
model:處理業(yè)務(wù),包括和數(shù)據(jù)庫的交互。
controller:接受請求,然后轉(zhuǎn)發(fā)給相應(yīng)model層業(yè)務(wù)組件處理。
view:頁面渲染。
javaweb轉(zhuǎn)變?yōu)榱嘶趍vc的servlet+jsp+jdbc
但是javaweb的本質(zhì)還是java,java的本質(zhì)是面向?qū)ο蟆?br /> 即使是基于mvc的servlet+jsp+jdbc,當(dāng)代碼量變大,也會變得混亂。譬如我想在controller中用一次model的對象,就得new一次。
想在controller中用一次view的對象,就得new一次。
此時,spring出現(xiàn)了。
spring就是用來管理對象的,把對象起了個新名字,叫bean。
spring中放對象的東西,叫ioc容器。
同時,struts取代了之前的原生servlet開發(fā)。
mybatis/hibernate取代了原生jdbc開發(fā)。
具體來說,一個servelet類對應(yīng)一個請求的處理。
要寫個servlet類,
要繼承httpservlet類并重寫里面的doget和dopost方法,分別對應(yīng)get和post的請求(或者用@webservlet注解配置。)
最后去web.xml里配置。
然后把所有的servlet類放到一個目錄下,譬如com.xxx.servlet。
現(xiàn)在變成,struts用一個xml文件,管理所有servlet(servlet在struts里叫action)
所以javaweb整體演變成了:基于mvc的ssh框架:(structs+hibernate)jsp
spring做整體ssh框架的整合,作為管理者。
后來spring推出了springmvc,成功替代了struts,用來接收和處理請求。
所以javaweb逐漸變成了:基于mvc的ssm框架(springmvc+spring+mybatis)+jsp。
注意springmvc和mvc不是一種東西,前者是用來接受和處理請求的技術(shù)框架,后者是上文提到的思想。
ssm框架的項(xiàng)目一般都有三個包:
controller包,使用的是springmvc,對應(yīng)的mvc中的controller
service和dao/mapper層,service,業(yè)務(wù)層,會交由spring的ioc來管理。dao/mapper使用mybatis,對應(yīng)mvc中的model。
jsp,對應(yīng)mvc中的view。
此時,雖然框架簡化了,但是大部分壓力還是集中在服務(wù)器這里。
真正地前后端分離時代開始了,數(shù)據(jù)渲染丟給前端了。
前端需要數(shù)據(jù)就給后端發(fā)request,后端處理完成后就給前端返回response。json由此出現(xiàn)。
jsp最大的缺陷是,前端不好調(diào)試,怎么樣都會設(shè)計(jì)到后端的地方。無法像html一樣在瀏覽器中打開,要先啟動服務(wù)器,通過servlet來動態(tài)渲染或者后端開發(fā)好再手動替換html。這也是為啥最開始的后端開發(fā),都要會基礎(chǔ)的前端知識的原因。
于是,thymeleaf,模板引擎,出現(xiàn)了,他寫出的頁面就是html頁面,不經(jīng)過后端,就可以直接被瀏覽器解析,方便了前端調(diào)試頁面。但并沒有真正達(dá)到前后端分離的效果,因?yàn)橄胍嬲@示完整的頁面,還需要后端controller層返回的數(shù)據(jù)。
此時前后端聯(lián)調(diào)要輕松許多,但是后端的配置依舊繁瑣。
譬如,spring要管理所有的對象,那么他怎么知道一個類的一個對象是一個bean呢,怎么知道那兩個bean之間有依賴關(guān)系捏?
除開spring整合springmvc、mybatis,其他三方等等。項(xiàng)目開發(fā)好后需要打成war包,發(fā)布到tomcat執(zhí)行。這個過程也需要一堆配置。
這時,spring提出了一個公約,將經(jīng)常使用的核心組件的對象抽取出來,自動加入ioc中,再在外部提供一個固定配置文件,application.properties/application.yml,里面放自定義配置。
這就是,約定大于配置,即自動化配置。
基于該思想下,springboot出現(xiàn)了!
springboot自帶tomcat,不需要像以前ssm一樣打成war包再發(fā)布到tomcat的webapps下面。
同時springboot把很多場景都抽象為啟動器starter,在啟動器下導(dǎo)入maven依賴即可達(dá)成自動化配置,從而直接開發(fā),專注于自己的業(yè)務(wù)邏輯。
但springboot有個問題,它不支持jsp,官方支持的是thymeleaf
此時前端也有自己的發(fā)展,vue、react、angular三大js框架,使得前端也可以自己單開一個項(xiàng)目了。