Spring學習筆記_6_Sping MVC 簡介

6.1MVC模式概述

Model Ⅰ 和Model Ⅱ

model Ⅰ:jsp
改進的model Ⅰ:jsp文件負責程序的流程控制邏輯和數據顯示邏輯任務,JavaBean負責處理業務邏輯任務
model Ⅱ:jsp負責數據顯示邏輯任務,servlet負責程序流程控制邏輯任務,JavaBean負責處理業務邏輯任務。
在這裏插入圖片描述

MVC模式及其優勢

MVC思想將一個應用分成三個基本部分:Model(模型),View(視圖)和Controller(控制器),這三個部分以最少的耦合協同工作,從而提高應用的可擴展性和可維護性。
在這裏插入圖片描述

6.2Spring MVC概述

Spring MVC是Spring框架中用於Web開發的一個模塊,是Spring提供的一個基於MVC設計模式的輕量級Web框架。Spring框架提供了構建Web應用程序的全功能MVC模塊。Spring MVC框架本質上相當於servlet,提供了一個DispatcherServlet作爲前端控制器來分派請求,同時提供靈活的配置處理程序映射、視圖解析、語言環境和主題解析,並支持文件上傳暫時先不管這個
在MVC設計模式中,Spring MVC作爲控制器(Controller)來建立模型與視圖的數據交互, 是一個典型的MVC框架
在這裏插入圖片描述

  • Spring MVC擁有強大的靈活性、非侵入性(不需要用戶代碼引入框架代碼,直接用就可以了)、可配置性(文件可以通過配置文件來實現)。
  • Spring MVC提供了一個前端控制器DispatcherServlet,開發者無需額外開發控制器對象
  • Spring MVC分工明確,包括控制器、驗證器、命令對象、模型對象、處理程序映射視圖解析器等等,每一個功能實現由一個專門的對象負責
  • Spring MVC可以自動綁定用戶輸入,並正確轉換數據類型。
  • Spring MVC使用一個名稱/值的Map對象實現更加靈活的模型數據類型。
  • Spring MVC內置了常見的校驗器,可以檢驗用戶輸入,如果校驗不同,則重定向回輸入表單。輸入校驗是可選的,並且支持編程方式即聲明方式。
  • Spring MVC支持國際化,支持根據用戶區域顯式多國語言,並且國際化的配置非常簡單
  • Spring MVC支持多種視圖技術,最常見的有JSP技術以及其他技術,包括Velocity和FreeMarker。
  • Spring MVC提供了一個簡單而強大的JSP標籤庫,支持數據綁定功能,使得編寫JSP頁面更加容易。
  • 特點很重要的,最好記一下,後面都會講到。

6.3Spring MVC環境搭建

新建一個web項目
在這裏插入圖片描述
在這裏插入圖片描述
添加需要的jar包(16個)
在這裏插入圖片描述
在web.xml文件中,配置Spring MVC的前端控制器DispatcherServlet
Spring MVC是基於Servlet的框架,DispatcherServlet是整個Spring MVC框架的核心,它負責接收請求並將其分派給相應的處理器處理,關鍵配置代碼如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>springmvc-1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!--配置spring MVC的前端控制器DispatcherServlet  -->
  <servlet>
  		<servlet-name>dispatcherServlet</servlet-name>
  		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  		<!--初始化參數,配置Spring MVC配置文件的位置以及名稱  -->
  		<init-param>
  			<param-name>contextConfigLocation</param-name>
  			<param-value>classpath:springmvc.xml</param-value>
  		</init-param>
  		<!--表示容器啓動時,立即加載 DispatcherServlet -->
  		<load-on-startup>1</load-on-startup>
  </servlet>
  <!--Spring MVC的前端控制器攔截所有的請求  -->
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

新建springmvc.xml文件在src目錄下
在springmvc.xml文件中,首先要引入beans、aop、context和mvc命名空間;然後主要完成配置處理器映射和配置視圖解析器。
① 配置處理器映射器
Spring提供了多種處理器映射(HanderMapping)支持,例如:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.web.servlet.SimpleUrlHandlerMapping
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
可以根據需求選擇處理器映射,這裏我們選擇BeanNameUrlHandlerMapping,若沒有明確聲明任何處理器映射,Spring會默認使用BeanNameUrlHandlerMapping,即在Spring容器中查找與請求URL同名的Bean,通過聲明HelloController業務控制器類,並將其映射到/hello請求。
② 配置視圖解析器
處理請求的最後一件事就是解析輸出,該任務由視圖(這裏使用JSP)實現,那麼需要確定:指定的請求需要使用哪個視圖進行請求結果的解析輸出?DispatcherServlet會查找到一個視圖解析器,將控制器返回的邏輯視圖名稱轉換解析成結果的實際視圖。Spring提供了多種視圖解析器,例如:
org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.view.ContentNegotiatingViewResolver
在springmvc.xml配置文件中,並沒有配置處理器映射和處理器適配器,當用戶沒有配置這兩項時,Spring會使用默認的處理器映射和處理器適配器處理請求。
在這裏插入圖片描述
創建處理請求的控制器類
在這裏插入圖片描述
上面程序的HelloController是一個實現Controller接口的控制器,他可以處理一個單一的請求動作,handleRequest是Controller接口必須要實現的方法,該方法必須返回一個包含視圖名或視圖名和模型的ModelAndView對象(後面會詳解),該對象既包含視圖信息,也包含模型數據信息。
創建視圖頁面
在這裏插入圖片描述
測試運行
在這裏插入圖片描述
運行tomcat服務器
打開瀏覽器
在這裏插入圖片描述

6.4Spring MVC請求流程

當用戶發送URL請求http://localhost:8080/springmvc-1/hello時,根據web.xml中對於DispatcherServlet的配置,該請求被DispatcherServlet截獲,並根據HandlerMapping找到處理相應請求的Controller控制器(HelloController);Controller處理完成後,返回ModelAndView對象;該對象告訴DispatcherServlet需要通過哪個視圖來進行數據模型的展示,DispatcherServlet根據視圖解析器把Controller返回的邏輯視圖名渲染成真正的視圖並輸出,呈現給用戶。
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章