华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java面試題 >> 文章內(nèi)容

簡述springMVC的執(zhí)行流程

來源:中華考試網(wǎng)  [2020年10月26日]  【

  一、 簡述springMVC的執(zhí)行流程。

  用戶發(fā)起請求到前端控制器(Controller)

  前端控制器沒有處理業(yè)務(wù)邏輯的能力,需要找到具體的模型對象處理(Handler),到處理器映射器(HandlerMapping)中查找Handler對象(Model)。

  HandlerMapping返回執(zhí)行鏈,包含了2部分內(nèi)容: ① Handler對象、② 攔截器數(shù)組

  前端處理器通過處理器適配器包裝后執(zhí)行Handler對象。

  處理業(yè)務(wù)邏輯。

  Handler處理完業(yè)務(wù)邏輯,返回ModelAndView對象,其中view是視圖名稱,不是真正的視圖對象。

  將ModelAndView返回給前端控制器。

  視圖解析器(ViewResolver)返回真正的視圖對象(View)。

  (此時前端控制器中既有視圖又有Model對象數(shù)據(jù))前端控制器根據(jù)模型數(shù)據(jù)和視圖對象,進(jìn)行視圖渲染。

  返回渲染后的視圖(html/json/xml)返回。

  給用戶產(chǎn)生響應(yīng)。

  二、抽象和封裝的不同點(diǎn)

  抽象,是指從眾多的事務(wù)中抽取出具有共同的、本質(zhì)性的特征作為一個整體。是共同特質(zhì)的集合形式。

  封裝,是將通過抽象所得到的數(shù)據(jù)信息和操作進(jìn)行結(jié)合,使其形成一個有機(jī)的整體。對內(nèi)執(zhí)行操作,對外隱藏細(xì)節(jié)和數(shù)據(jù)信息。

  兩者的區(qū)別,在于抽象是一種思維方式,而封裝則是一種基于抽象性的操作方法。我們通過抽象所得到數(shù)據(jù)信息及其功能,以封裝的技術(shù)將其重新聚合,形成一個新的聚合體,也就是類;蛘哒f,兩者是合作者的關(guān)系,如果沒有抽象,封裝就無從談起,如果沒有封裝,抽象也將沒有意義。

  三、創(chuàng)建線程有幾種不同的方式?你選擇哪一種?為什么?

  1、繼承Thread類創(chuàng)建線程類

  (1)定義Thread類的子類,并重寫該類的run方法,該run方法的方法體就代表了線程要完成的任務(wù)。因此把run()方法稱為執(zhí)行體。

  (2)創(chuàng)建Thread子類的實(shí)例,即創(chuàng)建了線程對象。

  (3)調(diào)用線程對象的start()方法來啟動該線程。

  2、通過Runnable接口創(chuàng)建線程類

  (1)定義runnable接口的實(shí)現(xiàn)類,并重寫該接口的run()方法,該run()方法的方法體同樣是該線程的線程執(zhí)行體。

  (2)創(chuàng)建 Runnable實(shí)現(xiàn)類的實(shí)例,并依此實(shí)例作為Thread的target來創(chuàng)建Thread對象,該Thread對象才是真正的線程對象。

  (3)調(diào)用線程對象的start()方法來啟動該線程。

  3、通過Callable和Future創(chuàng)建線程

  (1)創(chuàng)建Callable接口的實(shí)現(xiàn)類,并實(shí)現(xiàn)call()方法,該call()方法將作為線程執(zhí)行體,并且有返回值。

  (2)創(chuàng)建Callable實(shí)現(xiàn)類的實(shí)例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。

  (3)使用FutureTask對象作為Thread對象的target創(chuàng)建并啟動新線程。

  (4)調(diào)用FutureTask對象的get()方法來獲得子線程執(zhí)行結(jié)束后的返回值

  采用實(shí)現(xiàn)Runnable、Callable接口的方式創(chuàng)見多線程時,優(yōu)勢是:

  線程類只是實(shí)現(xiàn)了Runnable接口或Callable接口,還可以繼承其他類。

  在這種方式下,多個線程可以共享同一個target對象,所以非常適合多個相同線程來處理同一份資源的情況,從而可以將CPU、代碼和數(shù)據(jù)分開,形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?/P>

  劣勢是:

  編程稍微復(fù)雜,如果要訪問當(dāng)前線程,則必須使用Thread.currentThread()方法。

  使用繼承Thread類的方式創(chuàng)建多線程時優(yōu)勢是:

  編寫簡單,如果需要訪問當(dāng)前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當(dāng)前線程。

  劣勢是:

  線程類已經(jīng)繼承了Thread類,所以不能再繼承其他父類。

  感謝大家閱讀Java面試題“簡述springMVC的執(zhí)行流程”希望本篇對大家在面試時有所幫助。

  填寫下面表單即可預(yù)約申請免費(fèi)試聽java課程!害怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國推薦就業(yè)!

預(yù)約申請免費(fèi)聽java課程

  • 地區(qū):
  • 姓名:
  • 手機(jī):
責(zé)編:fushihao
  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學(xué)歷考試
宿州市| 南阳市| 慈利县| 太原市| 诸暨市| 栾城县| 红安县| 从化市| 福州市| 牡丹江市| 新闻| 措美县| 将乐县| 吉木萨尔县| 桐乡市| 沙湾县| 双鸭山市| 邛崃市| 富川| 青铜峡市| 金秀| 平谷区| 通海县| 金寨县| 定安县| 武冈市| 南昌市| 和硕县| 韩城市| 沂水县| 霍城县| 始兴县| 塘沽区| 北宁市| 临澧县| 南宁市| 政和县| 社旗县| 蕉岭县| 曲松县| 通许县|