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