01.SpringMVC基本應用
1.MVC模式
MVC是軟體工程中的一種軟體架構模式,它是一種分離業務邏輯與顯示界面的開發思想。
- M(model)模型:處理業務邏輯,封裝實體
- V(view) 視圖:展示内容
- C(controller)控制器:負責排程分發(1.接收請求、2.調用模型、3.轉發到視圖)
2.SpringMVC概述
SpringMVC 是一種基于 Java 的實作 MVC 設計模式的輕量級 Web 架構,屬于SpringFrameWork 的後續産品,已經融合在 Spring Web Flow 中。
SpringMVC 已經成為目前最主流的MVC架構之一,并且随着Spring3.0 的釋出,全面超越 Struts2,成為最優秀的 MVC 架構。它通過一套注解,讓一個簡單的 Java 類成為處理請求的控制器,而無須實作任何接口。同時它還支援 RESTful 程式設計風格的請求。
總結:
SpringMVC對原來Servlet進行了封裝,其作用就是實作排程分發功能。
2.Spring MVC執行流程
1. SpringMVC的執行流程
- 使用者發送請求給前端控制器DispatcherServlet。
- 前端控制器DispatcherServlet收到請求,調用處理器映射器HandlerMapping
- 通過處理器映射器HandlerMapping找到具體的處理器,生成處理器對象傳回給前端控制器。
- 前端控制器DispatcherServlet調用處理器擴充卡HandlerAdaptor。
- 通過處理器擴充卡調用具體的處理器Handler(Controller,也叫後端控制器)。
- Handler(也就是處理器Controller)傳回一個ModeAndView給處理擴充卡。
- 處理器擴充卡HandlerAdaptor将ModeAndView傳回給前端控制器。
- 前端控制器把該對象傳給視圖解析器ViewResolver。
- 視圖解析器解析後傳回具體的view。
-
前端控制器DispatcherServlet根據View進行渲染視圖響應給使用者。
用自己的話總結:
使用者發送請求給前端控制器DispatcherServlet,前端控制器請求處理器映射器并傳回一個處理器對象給前端控制器,前端控制器通過調用處理器擴充卡HandlerAdaptor找到具體的controller,并通過處理器擴充卡傳回一個ModelAndView對象給前端控制器,前端控制器把該對象傳給視圖解析器ViewResolver,通過視圖解析器解析後傳回具體的view,進行渲染視圖響應給使用者。
2.SpringMVC元件解析
-
前端控制器:DispatcherServlet
使用者請求到達前端控制器,它就相當于 MVC 模式中的 C,DispatcherServlet 是整個流程控制的中心,由它調用其它元件處理使用者的請求,DispatcherServlet 的存在降低了元件之間的耦合性。
-
處理器映射器:HandlerMapping
HandlerMapping 負責根據使用者請求找到 Handler 即處理器,SpringMVC 提供了不同的映射器實作不同的映射方式,例如:配置檔案方式,實作接口方式,注解方式等。
-
處理器擴充卡:HandlerAdapter
通過 HandlerAdapter 對處理器進行執行,這是擴充卡模式的應用,通過擴充擴充卡可以對更多類型的處理器進行執行。
-
處理器:Handler【開發者編寫】
它就是我們開發中要編寫的具體業務控制器。由 DispatcherServlet 把使用者請求轉發到Handler。由Handler 對具體的使用者請求進行處理。
-
視圖解析器:ViewResolver
View Resolver 負責将處理結果生成 View 視圖,View Resolver 首先根據邏輯視圖名解析成實體視圖名,即具體的頁面位址,再生成 View 視圖對象,最後對 View 進行渲染将處理結果通過頁面展示給使用者。
-
視圖:View 【開發者編寫】
SpringMVC 架構提供了很多的 View 視圖類型的支援,包括:jstlView、freemarkerView、pdfView等。最常用的視圖就是 jsp。一般情況下需要通過頁面标簽或頁面模版技術将模型資料通過頁面展示給使用者,需要由程式員根據業務需求開發具體的頁面。
-
springmvc中的三大元件是什麼?
處理器映射器:HandlerMapping、處理器擴充卡:HandlerAdapter、
視圖解析器:ViewResolver
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- IOC注解掃描-->
<context:component-scan base-package="com.weihong"></context:component-scan>
<!--處理器映射器和處理器擴充卡 功能增強 支援json的讀寫-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 視圖解析-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
3 SpringMVC注解解析
<!--配置注解掃描-->
<context:component-scan base-package="com.lagou.controller"/
* 作用:
用于建立請求 URL 和處理請求方法之間的對應關系
* 位置:
1.類上:請求URL的第一級通路目錄。此處不寫的話,就相當于應用的根目錄。寫的話需要以/開頭。
它出現的目的是為了使我們的URL可以按照子產品化管理:
使用者子產品
/user/add
/user/update
/user/delete
...
賬戶子產品
/account/add
/account/update
/account/delete
2.方法上:請求URL的第二級通路目錄,和一級目錄組成一個完整的 URL 路徑。
* 屬性:
1.value:用于指定請求的URL。它和path屬性的作用是一樣的
2.method:用來限定請求的方式
3.params:用來限定請求參數的條件
例如:params={"accountName"} 表示請求參數中必須有accountName
pramss={"money!100"} 表示請求參數中money不能是100