?Spring架構(gòu)
1.框架結(jié)構(gòu) 如圖:
2.架構(gòu)流程
?1、用戶發(fā)送請求至前端控制器DispatcherServlet
?2窍仰、DispatcherServlet收到請求調(diào)用HandlerMapping處理器映射器礼殊。
?3晶伦、處理器映射器根據(jù)請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)并 返回給DispatcherServlet族沃。
?4、DispatcherServlet通過HandlerAdapter處理器適配器調(diào)用處理器
?5常空、執(zhí)行處理器(Controller漓糙,也叫后端控制器)烘嘱。
?6、Controller執(zhí)行完成返回ModelAndView
?7醉鳖、HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet
?8哮内、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
?9牍蜂、ViewReslover解析后返回具體View
10、DispatcherServlet對View進行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。
11从绘、DispatcherServlet響應(yīng)用戶
3.框架組件
以下組件通常使用框架提供實現(xiàn):
DispatcherServlet:前端控制器是牢,用戶請求到達前端控制器驳棱,它就相當(dāng)于mvc模式中的c,dispatcherServlet是整個流程控制的中心驻债,由它調(diào)用其它組件處理用戶的請求合呐,dispatcherServlet的存在降低了組件之間的耦合性笙以。
HandlerMapping:處理器映射器,HandlerMapping負責(zé)根據(jù)用戶請求url找到Handler即處理器恨闪,springmvc提供了不同的映射器實現(xiàn)不同的映射方式放坏,例如:配置文件方式轻姿,實現(xiàn)接口方式互亮,注解方式等。
Handler:處理器炊昆,Handler 是繼DispatcherServlet前端控制器的后端控制器威根,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理凤巨。
由于Handler涉及到具體的用戶業(yè)務(wù)請求,所以一般情況需要程序員根據(jù)業(yè)務(wù)需求開發(fā)Handler洛搀。
HandlAdapter:處理器適配器敢茁,通過HandlerAdapter對處理器進行執(zhí)行,這是適配器模式的應(yīng)用留美,通過擴展適配器可以對更多類型的處理器進行執(zhí)行彰檬。
ViewResolver:視圖解析器,View Resolver負責(zé)將處理結(jié)果生成View視圖谎砾,View Resolver首先根據(jù)邏輯視圖名解析成物理視圖名即具體的頁面地址逢倍,再生成View視圖對象,最后對View進行渲染將處理結(jié)果通過頁面展示給用戶景图。
View:視圖较雕,springmvc框架提供了很多的View視圖類型的支持,包括:jstlView挚币、freemarkerView宛蚓、pdfView等远舅。我們最常用的視圖就是jsp。
說明:在springmvc的各個組件中蚤吹,處理器映射器、處理器適配器、視圖解析器稱為springmvc的三大組件秉沼。需要用戶開發(fā)的組件有handler、view
4棘捣、默認加載的組件
組件掃描器:
使用組件掃描器省去在spring容器配置每個Controller類的繁瑣。使用<context:component-scan>自動掃描標記@Controller的控制器類邑彪,在springmvc.xml配置文件中配置如下:
<!-- 配置controller掃描包,多個包之間用,分隔?-->
<context:component-scan?base-package="com.bigdata.springmvc.controller"?/>
注解映射器和適配器
配置處理器映射器
注解式處理器映射器,對類中標記了@ResquestMapping的方法進行映射篮迎。根據(jù)@ResquestMapping定義的url匹配@ResquestMapping標記的方法,匹配成功返回HandlerMethod對象給前端控制器难裆。
HandlerMethod對象中封裝url對應(yīng)的方法Method。
從spring3.1版本開始症虑,廢除了DefaultAnnotationHandlerMapping的使用,推薦使用RequestMappingHandlerMapping完成注解式處理器映射。
在springmvc.xml配置文件中配置如下:
<!-- 配置處理器映射器 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"?/>
注解描述:
@RequestMapping:定義請求url到處理器功能方法的映射
配置處理器適配器
注解式處理器適配器沈条,對標記@ResquestMapping的方法進行適配。
從spring3.1版本開始月而,廢除了AnnotationMethodHandlerAdapter的使用瞻凤,推薦使用RequestMappingHandlerAdapter完成注解式處理器適配肝集。
在springmvc.xml配置文件中配置如下:
<!-- 配置處理器適配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"?/>
注解驅(qū)動
直接配置處理器映射器和處理器適配器比較麻煩,可以使用注解驅(qū)動來加載勉痴。
SpringMVC使用<mvc:annotation-driven>自動加載RequestMappingHandlerMapping和RequestMappingHandlerAdapter
可以在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解處理器和適配器的配置胸嘴。
<!-- 注解驅(qū)動 -->
<mvc:annotation-driven />
5.視圖解析器
視圖解析器使用SpringMVC框架默認的InternalResourceViewResolver,這個視圖解析器支持JSP視圖解析绑青。在springmvc.xml配置文件中配置如下:
<!-- Example: prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" ->
"/WEB-INF/jsp/test.jsp" -->
<!-- 配置視圖解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置邏輯視圖的前綴 -->
<property?name="prefix"?value="/WEB-INF/jsp/"?/>
<!-- 配置邏輯視圖的后綴 -->
<property?name="suffix"?value=".jsp"?/>
</bean>
邏輯視圖名需要在controller中返回ModelAndView指定邪乍,比如邏輯視圖名為ItemList否纬,則最終返回的jsp視圖地址:
“WEB-INF/jsp/itemList.jsp”
最終jsp物理地址:前綴+邏輯視圖名+后綴