2021-02-08

1、什么是SpringMVC?簡(jiǎn)單介紹下你對(duì)SpringMVC的理解?

Spring MVC是一個(gè)基于Java的實(shí)現(xiàn)了MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,通過把Model,View,Controller分離,將web層進(jìn)行職責(zé)解耦,把復(fù)雜的web應(yīng)用分成邏輯清晰的幾部分,簡(jiǎn)化開發(fā),減少出錯(cuò),方便組內(nèi)開發(fā)人員之間的配合。

2、SpringMVC的流程?

(1)用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet;

(2) DispatcherServlet收到請(qǐng)求后,調(diào)用HandlerMapping處理器映射器,請(qǐng)求獲取Handle;

(3)處理器映射器根據(jù)請(qǐng)求url找到具體的處理器,生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet;

(4)DispatcherServlet 調(diào)用 HandlerAdapter處理器適配器;

(5)HandlerAdapter 經(jīng)過適配調(diào)用 具體處理器(Handler,也叫后端控制器);

(6)Handler執(zhí)行完成返回ModelAndView;

(7)HandlerAdapter將Handler執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet;

(8)DispatcherServlet將ModelAndView傳給ViewResolver視圖解析器進(jìn)行解析;

(9)ViewResolver解析后返回具體View;

(10)DispatcherServlet對(duì)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)

(11)DispatcherServlet響應(yīng)用戶。

4、SpringMVC的主要組件?

(1)前端控制器 DispatcherServlet(不需要程序員開發(fā))

作用:接收請(qǐng)求、響應(yīng)結(jié)果,相當(dāng)于轉(zhuǎn)發(fā)器,有了DispatcherServlet 就減少了其它組件之間的耦合度。

(2)處理器映射器HandlerMapping(不需要程序員開發(fā))

作用:根據(jù)請(qǐng)求的URL來(lái)查找Handler

(3)處理器適配器HandlerAdapter

注意:在編寫Handler的時(shí)候要按照HandlerAdapter要求的規(guī)則去編寫,這樣適配器HandlerAdapter才可以正確的去執(zhí)行Handler。

(4)處理器Handler(需要程序員開發(fā))

(5)視圖解析器 ViewResolver(不需要程序員開發(fā))

作用:進(jìn)行視圖的解析,根據(jù)視圖邏輯名解析成真正的視圖(view)

(6)視圖View(需要程序員開發(fā)jsp)

View是一個(gè)接口, 它的實(shí)現(xiàn)類支持不同的視圖類型(jsp,freemarker,pdf等等)

5、SpringMVC和struts2的區(qū)別有哪些?

(1)SpringMVC的入口是一個(gè)Servlet即前端控制器(DispatchServlet),而struts2入口是一個(gè)filter過慮器(StrutsPrepareAndExecuteFilter)。

(2)SpringMVC是基于方法開發(fā)(一個(gè)url對(duì)應(yīng)一個(gè)方法),請(qǐng)求參數(shù)傳遞到方法的形參,可以設(shè)計(jì)為單例或多例(建議單例),struts2是基于類開發(fā),傳遞參數(shù)是通過類的屬性,只能設(shè)計(jì)為多例。

(3)Struts采用值棧存儲(chǔ)請(qǐng)求和響應(yīng)的數(shù)據(jù),通過OGNL存取數(shù)據(jù),SpringMVC通過參數(shù)解析器是將request請(qǐng)求內(nèi)容解析,并給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對(duì)象,最后又將ModelAndView中的模型數(shù)據(jù)通過request域傳輸?shù)巾?yè)面。JSP視圖解析器默認(rèn)使用JSTL。

9、SpringMVC的異常處理 ?

答:可以將異常拋給Spring框架,由Spring框架來(lái)處理;我們只需要配置簡(jiǎn)單的異常處理器,在異常處理器中添視圖頁(yè)面即可。

10、SpringMVC的控制器是不是單例模式,如果是,有什么問題,怎么解決?

答:是單例模式,所以在多線程訪問的時(shí)候有線程安全問題,不要用同步,會(huì)影響性能的,解決方案是在控制器里面不能寫字段。

20、SpringMVC里面攔截器是怎么寫的?

有兩種寫法,一種是實(shí)現(xiàn)HandlerInterceptor接口,另外一種是繼承適配器類,接著在接口方法當(dāng)中,實(shí)現(xiàn)處理邏輯;然后在SpringMVC的配置文件中配置攔截器即可。

<mvc:interceptors>

<bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean>

<mvc:interceptor>

<mvc:mapping path="/modelMap.do" />

<bean class="com.zwp.action.MyHandlerInterceptorAdapter" />

</mvc:interceptor>

</mvc:interceptors>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容