Spring MVC 是一種基於 Java 的實現了 Web MVC 設計模式的請求驅動類型的輕量級 Web 框架, 即便用了MVC 架構模式的思想,將 web 層進行職責解耦, 基於請求驅動指的就是使用請求-響應模型, 框架的目的就是幫助咱們簡化開發, Spring Web MVC 也是要簡化咱們平常 Web 開發的。前端
▶ 進行更簡潔的 Web 層的開發;java
▶ 天生與 Spring 框架集成(如 IoC 容器、 AOP 等);web
▶ 提供強大的約定大於配置的契約式編程支持;spring
▶ 能簡單的進行 Web 層的單元測試;提供強大的約定大於配置的契約式編程支持;編程
▶ 能簡單的進行 Web 層的單元測試;設計模式
▶ 支持靈活的 URL 到頁面控制器的映射;數據結構
▶ 很是容易與其餘視圖技術集成,如 Velocity、FreeMarker 等等, 由於模型數據不放在特定的 API 裏,而是放在一個Model 裏(Map 數據結構實現, 所以很容易被其餘框架使用);架構
▶ 很是靈活的數據驗證、 格式化和數據綁定機制, 能使用任何對象進行數據綁定, 沒必要實現特定框架的 API;提供一套強大的 JSP 標籤庫, 簡化 JSP 開發;
▶ 支持靈活的本地化、 主題等解析;
▶ 更加簡單的異常處理;
▶ 對靜態資源的支持;
▶ 支持 Restful 風格。mvc
▶ DispatcherServlet: 前端控制器
▶ HandlerMapping: 將請求映射處處理器
▶ HandlerAdapter: 把處理器包裝爲適配器, 用來支持多種類型的處理器
▶ View Resolver: 視圖解析器
▶ Controller接口: 頁面控制器/動做/處理器
▶ LocalResolver: 本地化解析, 由於Spring支持國際化,所以LocalResolver解析客戶端的Locale信息從而方便
進行國際化
▶ ThemeResovler: 主題解析, 經過它來實現一個頁面多套風格, 即常見的相似於軟件皮膚效果app
▶ MultipartResolver:文件上傳解析, 用於支持文件上傳
▶ HandlerExceptionResolver: 解析並處理異
▶ RequestToViewNameTranslator: 當處理器沒有返回邏輯視圖名等相關信息時,自動將請求URL映射爲邏輯
視圖名
▶ FlashMapManager: 用於管理FlashMap的策略接口,FlashMap用於存儲一個請求的輸出, 當進入另外一個請求時做爲該請求的輸入, 一般用於重定向場景
spring mvc 處理流程
spring mvc 開發步驟
▶ DispatcherServlet 在 web.xml 中的部署描述, 從而攔截請求到 Spring MVC
▶ 配置HandlerMapping, 從而將請求映射處處理器
▶ 配置HandlerAdapter, 從而支持多種類型的處理器
▶ 配置ViewResolver, 從而將邏輯視圖名解析爲具體視圖技術
▶ 配置處理器(頁面控制器), 從而進行功能處理
一、清晰的角色劃分: 前端控制(DispatcherServlet)、請求處處理器映射(HandlerMapping)、 處理器適配器(HandlerAdapter)、 視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、 驗證器(Validator)、 命令對象(Command 請求參數綁定到的對象就叫命令對象)、表單對象(Form Object 提供給表單展現和提交到的對象就叫表單對象)。
二、 分工明確, 並且擴展點至關靈活, 能夠很容易擴展,雖然幾乎不須要;
三、 因爲命令對象就是一個 POJO, 無需繼承框架特定API, 可使用命令對象直接做爲業務對象;
四、 和 Spring 其餘框架無縫集成,是其它 Web 框架所不具有的;
五、 可適配, 經過 HandlerAdapter 能夠支持任意的類做爲處理器;
六、 可定製性, HandlerMapping、 ViewResolver 等可以很是簡單的定製;
七、 功能強大的數據驗證、 格式化、 綁定機制;
八、 利用 Spring 提供的 Mock 對象可以很是簡單的進行Web 層單元測試;
九、 本地化、 主題的解析的支持, 使咱們更容易進行國際化和主題的切換。
十、 強大的 JSP 標籤庫, 使 JSP 編寫更容易。
1.在web.xml下面配置DispatcherServlet
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 啓動優先級 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- /標示前臺全部url請求都會被 DispatcherServlet 攔截--> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 針對Post方式的請求進行編碼的設置 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.在/WEB-INF/springmvc-servlet.xml中配置 HandlerMapping 和 HandlerAdapter 和 ViewResolver
<!-- 配置HandlerMapping 默認配置,可省略 --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <!-- 配置HandlerAdapter 默認配置,可省略 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 配置ViewResolver--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <!-- 第一個斜槓/不能省略 --> <property name="prefix" value="/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <bean class="com.hejie.controller.HelloWorldController"></bean>
3.最後編寫controller便可
@Controller public class HelloWorldController { @RequestMapping (value="/hello") public Model helloWorld (HttpServletRequest request, HttpServletResponse response,Model model) { //獲取前端傳遞的值 String name = request.getParameter("name"); System.out.println("name==============="+name); model.addAttribute("name", name); return model; } }