1政敢、什么是SpringMVC其徙?簡單介紹下你對SpringMVC的理解?
Spring MVC是一個基于Java的實現(xiàn)了MVC設(shè)計模式的請求驅(qū)動類型的輕量級Web框架喷户,通過把Model唾那,View,Controller分離褪尝,將web層進行職責(zé)解耦闹获,把復(fù)雜的web應(yīng)用分成邏輯清晰的幾部分,簡化開發(fā)河哑,減少出錯避诽,方便組內(nèi)開發(fā)人員之間的配合。
2璃谨、SpringMVC的流程沙庐?
(1)用戶發(fā)送請求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到請求后佳吞,調(diào)用HandlerMapping處理器映射器拱雏,請求獲取Handle;
(3)處理器映射器根據(jù)請求url找到具體的處理器底扳,生成處理器對象及處理器攔截器(如果有則生成)一并返回給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視圖解析器進行解析柒昏;
(9)ViewResolver解析后返回具體View;
(10)DispatcherServlet對View進行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)
(11)DispatcherServlet響應(yīng)用戶熙揍。
4职祷、SpringMVC的主要組件?
(1)前端控制器 DispatcherServlet(不需要程序員開發(fā))
作用:接收請求、響應(yīng)結(jié)果有梆,相當(dāng)于轉(zhuǎn)發(fā)器是尖,有了DispatcherServlet 就減少了其它組件之間的耦合度。
(2)處理器映射器HandlerMapping(不需要程序員開發(fā))
作用:根據(jù)請求的URL來查找Handler
(3)處理器適配器HandlerAdapter
注意:在編寫Handler的時候要按照HandlerAdapter要求的規(guī)則去編寫泥耀,這樣適配器HandlerAdapter才可以正確的去執(zhí)行Handler饺汹。
(4)處理器Handler(需要程序員開發(fā))
(5)視圖解析器 ViewResolver(不需要程序員開發(fā))
作用:進行視圖的解析,根據(jù)視圖邏輯名解析成真正的視圖(view)
(6)視圖View(需要程序員開發(fā)jsp)
View是一個接口痰催, 它的實現(xiàn)類支持不同的視圖類型(jsp兜辞,freemarker,pdf等等)
5夸溶、SpringMVC和struts2的區(qū)別有哪些逸吵?
(1)SpringMVC的入口是一個Servlet即前端控制器(DispatchServlet),而struts2入口是一個filter過慮器(StrutsPrepareAndExecuteFilter)缝裁。
(2)SpringMVC是基于方法開發(fā)(一個url對應(yīng)一個方法)扫皱,請求參數(shù)傳遞到方法的形參,可以設(shè)計為單例或多例(建議單例)捷绑,struts2是基于類開發(fā)韩脑,傳遞參數(shù)是通過類的屬性,只能設(shè)計為多例粹污。
(3)Struts采用值棧存儲請求和響應(yīng)的數(shù)據(jù)段多,通過OGNL存取數(shù)據(jù),SpringMVC通過參數(shù)解析器是將request請求內(nèi)容解析厕怜,并給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對象蕾总,最后又將ModelAndView中的模型數(shù)據(jù)通過request域傳輸?shù)巾撁嬷嗪健SP視圖解析器默認使用JSTL。
9生百、SpringMVC的異常處理 递雀?
答:可以將異常拋給Spring框架,由Spring框架來處理蚀浆;我們只需要配置簡單的異常處理器缀程,在異常處理器中添視圖頁面即可。
10市俊、SpringMVC的控制器是不是單例模式,如果是,有什么問題,怎么解決杨凑?
答:是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段。
20摆昧、SpringMVC里面攔截器是怎么寫的撩满?
有兩種寫法,一種是實現(xiàn)HandlerInterceptor接口,另外一種是繼承適配器類,接著在接口方法當(dāng)中伺帘,實現(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>