這篇文章主要講解了“springMVC的工作原理和機(jī)制以及配置”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“springMVC的工作原理和機(jī)制以及配置”吧!
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計,劍川網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:劍川等地區(qū)。劍川做網(wǎng)站價格咨詢:18980820575
下面的是springMVC的工作原理圖:
1、客戶端發(fā)出一個http請求給web服務(wù)器,web服務(wù)器對http請求進(jìn)行解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉(zhuǎn)交給DispatcherServlet.
2、DipatcherServlet接收到這個請求之后將根據(jù)請求的信息(包括URL、Http方法、請求報文頭和請求參數(shù)Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)。
3-4、DispatcherServlet根據(jù)HandlerMapping找到對應(yīng)的Handler,將處理權(quán)交給Handler(Handler將具體的處理進(jìn)行封裝),再由具體的HandlerAdapter對Handler進(jìn)行具體的調(diào)用。
5、Handler對數(shù)據(jù)處理完成以后將返回一個ModelAndView()對象給DispatcherServlet。
6、Handler返回的ModelAndView()只是一個邏輯視圖并不是一個正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖轉(zhuǎn)化為真正的視圖View。
7、Dispatcher通過model解析出ModelAndView()中的參數(shù)進(jìn)行解析最終展現(xiàn)出完整的view并返回給客戶端。
工作機(jī)制是什么
接著對于(二)的補(bǔ)充:主要是小結(jié)下Control的處理邏輯的關(guān)鍵操作;
對于control的處理關(guān)鍵就是:DispatcherServlet的handlerMappings集合中根據(jù)請求的URL匹配每一個handlerMapping對象中的某個handler,匹配成功之后將會返回這個handler的處理連接handlerExecutionChain對象。而這個handlerExecutionChain對象中將會包含用戶自定義的多個handlerInterceptor對象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /** * Return the HandlerExecutionChain for this request. * <p>Tries all handler mappings in order. * @param request current HTTP request * @return the HandlerExecutionChain, or <code>null if no handler could be found */ protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception { for (HandlerMapping hm : this.handlerMappings) { if (logger.isTraceEnabled()) { logger.trace( "Testing handler map [" + hm + "] in DispatcherServlet with name '" + getServletName() + "'"); } HandlerExecutionChain handler = hm.getHandler(request); if (handler != null) { return handler; } } return null; } |
而對于handlerInterceptor接口中定義的三個方法中,preHandler和postHandler分別在handler的執(zhí)行前和執(zhí)行后執(zhí)行,afterCompletion在view渲染完成、在DispatcherServlet返回之前執(zhí)行。
愿意了解更多的技術(shù)知識分享可參考源碼:http://minglisoft.cn/technology
朋友需要請加球球:2042849237
springmvc.xml的配置
視圖解析器的配置:
<!-- 配置視圖解析器 --> <"org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 使用前綴和后綴 --> <"prefix" "/"></<"suffix" ".jsp"></</<!-- 使用組件掃描的方式可以一次掃描多個Controller --> <"com.wxisme.ssm.controller">
也可以使用單個的配置方式,需要指定Controller的全限定名。
<bean name="/queryUser.action" class="com.wxisme.ssm.controller.Controller1"/>
配置注解的處理器適配器和處理器映射器:
<!-- 注解的處理器適配器 --> <"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <!-- 注解的處理器映射器 --> <"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
也可以使用下面的簡化配置:
<!-- 配置注解的處理器映射器和處理器適配器 --> <"conversionService"></<<!-- 直接定義攔截所有請求 --> <"com.wxisme.ssm.interceptor.IdentityInterceptor"></<!-- <mvc:interceptor> 攔截所有路徑的請求 包括子路徑 <mvc:mapping path="/**"/> <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean> </mvc:interceptor> --> </<!-- 定義全局異常處理器 --> <!-- 只有一個全局異常處理器起作用 --> <"exceptionResolver" "com.wxisme.ssm.exception.OverallExceptionResolver"></<!--配置上傳文件數(shù)據(jù)解析器 --> <"multipartResolver" "org.springframework.web.multipart.commons.CommonsMultipartResolver"> <"maxUploadSize"> <</</</<!-- 自定義參數(shù)類型綁定 --> <"conversionService" "org.springframework.format.support.FormattingConversionServiceFactoryBean"> <"converters"> <<!-- 日期類型綁定 --> <"com.wxisme.ssm.controller.converter.DateConverter"/> </</</<"/images/**" "/images/" /> <"/css/**" "/css/" /> <"/js/**" "/js/" /> <"/imgdata/**" "/imgdata/" />
也可以使用默認(rèn),但是需要在web.xml中配置。
<!-- 訪問靜態(tài)資源文件 --> <!-- <mvc:default-servlet-handler/> 需要在web.xml中配置-->
完全可以不攔截所有路徑,大可避免這個問題的發(fā)生。
完整的配置大概是這樣的,需要注意xml文件的命名空間,有時候會有影響的。
"1.0" encoding="UTF-8"<"http://www.springframework.org/schema/beans" "http://www.w3.org/2001/XMLSchema-instance" "http://www.springframework.org/schema/context" "http://www.springframework.org/schema/mvc" "http://www.springframework.org/schema/jdbc" "http://www.springframework.org/schema/jee" "http://www.springframework.org/schema/aop" "http://www.springframework.org/schema/tx" "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置視圖解析器 --> <"org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 使用前綴和后綴 --> <"prefix" "/"></<"suffix" ".jsp"></</<!-- 使用組件掃描的方式可以一次掃描多個Controller --> <"com.wxisme.ssm.controller"> </<!-- 配置注解的處理器映射器和處理器適配器 --> <"conversionService"></<!-- 自定義參數(shù)類型綁定 --> <"conversionService" "org.springframework.format.support.FormattingConversionServiceFactoryBean"> <"converters"> <<!-- 日期類型綁定 --> <"com.wxisme.ssm.controller.converter.DateConverter"/> </</</<!-- 訪問靜態(tài)資源文件 --> <!-- <mvc:default-servlet-handler/> 需要在web.xml中配置--> <"/images/**" "/images/" /> <"/css/**" "/css/" /> <"/js/**" "/js/" /> <"/imgdata/**" "/imgdata/" /> <!-- 定義攔截器 --> <<!-- 直接定義攔截所有請求 --> <"com.wxisme.ssm.interceptor.IdentityInterceptor"></<!-- <mvc:interceptor> 攔截所有路徑的請求 包括子路徑 <mvc:mapping path="/**"/> <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean> </mvc:interceptor> --> </<!--配置上傳文件數(shù)據(jù)解析器 --> <"multipartResolver" "org.springframework.web.multipart.commons.CommonsMultipartResolver"> <"maxUploadSize"> <</</</<!-- 定義全局異常處理器 --> <!-- 只有一個全局異常處理器起作用 --> <"exceptionResolver" "com.wxisme.ssm.exception.OverallExceptionResolver"></</beans>
感謝各位的閱讀,以上就是“springMVC的工作原理和機(jī)制以及配置”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對springMVC的工作原理和機(jī)制以及配置這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
分享名稱:springMVC的工作原理和機(jī)制以及配置
鏈接分享:http://vcdvsql.cn/article14/pejode.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、軟件開發(fā)、品牌網(wǎng)站制作、網(wǎng)站營銷、響應(yīng)式網(wǎng)站、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)