1、什么是SpringMVC
1.1 回顧MVC
1.1.1 什么是MVC
- MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟體設計規范,
- 是將業務邏輯、資料、顯示分離的方法來組織代碼,
- MVC主要作用是降低了視圖與業務邏輯間的雙向偶合,
- MVC不是一種設計模式,MVC是一種架構模式,當然不同的MVC存在差異,
Model(模型):資料模型,提供要展示的資料,因此包含資料和行為,可以認為是領域模型或JavaBean組件(包含資料和行為),不過現在一般都分離開來:Value Object(資料Dao) 和 服務層(行為Service),也就是模型提供了模型資料查詢和模型資料的狀態更新等功能,包括資料和業務,
View(視圖):負責進行模型的展示,一般就是我們見到的用戶界面,客戶想看到的東西,
Controller(控制器):接收用戶請求,委托給模型進行處理(狀態改變),處理完畢后把回傳的模型資料回傳給視圖,由視圖負責展示,也就是說控制器做了個調度員的作業,
最典型的MVC就是JSP + servlet + javabean的模式,
1.1.2 Model1時代
- 在web早期的開發中,通常采用的都是Model1,
- Model1中,主要分為兩層,視圖層和模型層,
Model1優點:架構簡單,比較適合小型專案開發;
Model1缺點:JSP職責不單一,職責過重,不便于維護;
1.1.3 Model2時代
Model2把一個專案分成三部分,包括視圖、控制、模型,
- 用戶發請求
- Servlet接收請求資料,并呼叫對應的業務邏輯方法
- 業務處理完畢,回傳更新后的資料給servlet
- servlet轉向到JSP,由JSP來渲染頁面
- 回應給前端更新后的頁面
職責分析:
Controller:控制器
- 取得表單資料
- 呼叫業務邏輯
- 轉向指定的頁面
Model:模型
- 業務邏輯
- 保存資料的狀態
View:視圖
- 顯示頁面
Model2這樣不僅提高的代碼的復用率與專案的擴展性,且大大降低了專案的維護成本,Model 1模式的實作比較簡單,適用于快速開發小規模專案,Model1中JSP頁面身兼View和Controller兩種角色,將控制邏輯和表現邏輯混雜在一起,從而導致代碼的重用性非常低,增加了應用的擴展性和維護的難度,Model2消除了Model1的缺點,
1.1.4 回顧Servlet
-
新建一個Maven工程當做父工程!pom依賴!
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> -
建立一個Moudle:springmvc-01-servlet , 添加Web app的支持!
-
匯入servlet 和 jsp 的 jar 依賴
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> -
撰寫一個Servlet類,用來處理用戶的請求
package com.kuang.servlet; //實作Servlet介面 public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException { //取得引數 String method = req.getParameter("method"); if (method.equals("add")){ req.getSession().setAttribute("msg","執行了add方法"); } if (method.equals("delete")){ req.getSession().setAttribute("msg","執行了delete方法"); } //業務邏輯 //視圖跳轉 req.getRequestDispatcher("/WEB-INF/jsp/user.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException { doGet(req,resp); } } -
撰寫Hello.jsp,在WEB-INF目錄下新建一個jsp的檔案夾,新建user.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} </body> </html> -
在web.xml中注冊Servlet
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.chen.servlet.UseroServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/user</url-pattern> </servlet-mapping> </web-app> -
配置Tomcat,并啟動測驗
-
- localhost:8080/user?method=add
- localhost:8080/user?method=delete
MVC框架要做哪些事情
- 將url映射到java類或java類的方法 .
- 封裝用戶提交的資料 .
- 處理請求--呼叫相關的業務處理--封裝回應資料 .
- 將回應的資料進行渲染 . jsp / html 等表示層資料 .
說明:
? 常見的服務器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常見前端MVC框架:vue、angularjs、react、backbone;由MVC演化出了另外一些模式如:MVP、MVVM 等等....
1.2 SpringMVC概述
Spring MVC是Spring Framework的一部分,是基于Java實作MVC的輕量級Web框架,
官方檔案:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web
Spring MVC的特點:
- 輕量級,簡單易學
- 高效 , 基于請求回應的MVC框架
- 與Spring兼容性好,無縫結合
- 約定優于配置
- 功能強大:RESTful、資料驗證、格式化、本地化、主題等
- 簡潔靈活
Spring的web框架圍繞DispatcherServlet [ 調度Servlet ] 設計,
DispatcherServlet的作用是將請求分發到不同的處理器,從Spring 2.5開始,使用Java 5或者以上版本的用戶可以采用基于注解形式進行開發,十分簡潔,
1.3 中心控制器
? Spring的web框架圍繞DispatcherServlet設計,DispatcherServlet的作用是將請求分發到不同的處理器,從Spring 2.5開始,使用Java 5或者以上版本的用戶可以采用基于注解的controller宣告方式,
? Spring MVC框架像許多其他MVC框架一樣, 以請求為驅動 , 圍繞一個中心Servlet分派請求及提供其他功能,DispatcherServlet是一個實際的Servlet (它繼承自HttpServlet 基類),
SpringMVC的原理:
? 當發起請求時被前置的控制器攔截到請求,根據請求引數生成代理請求,找到請求對應的實際控制器,控制器處理請求,創建資料模型,訪問資料庫,將模型回應給中心控制器,控制器使用模型與視圖渲染視圖結果,將結果回傳給中心控制器,再將結果回傳給請求者,
1.4 SpringMVC執行原理
簡要分析執行流程
-
DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心,用戶發出請求,DispatcherServlet接收請求并攔截請求,
我們假設請求的url為 : http://localhost:8080/SpringMVC/hello
如上url拆分成三部分:
http://localhost:8080服務器域名
SpringMVC部署在服務器上的web站點
hello表示控制器
通過分析,如上url表示為:請求位于服務器localhost:8080上的SpringMVC站點的hello控制器,
-
HandlerMapping為處理器映射,DispatcherServlet呼叫HandlerMapping,HandlerMapping根據請求url查找Handler,
-
HandlerExecution表示具體的Handler,其主要作用是根據url查找控制器,如上url被查找控制器為:hello,
-
HandlerExecution將決議后的資訊傳遞給DispatcherServlet,如決議控制器映射等,
-
HandlerAdapter表示處理器配接器,其按照特定的規則去執行Handler,
-
Handler讓具體的Controller執行,
-
Controller將具體的執行資訊回傳給HandlerAdapter,如ModelAndView,
-
HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet,
-
DispatcherServlet呼叫視圖決議器(ViewResolver)來決議HandlerAdapter傳遞的邏輯視圖名,
-
視圖決議器將決議的邏輯視圖名傳給DispatcherServlet,
-
DispatcherServlet根據視圖決議器決議的視圖結果,呼叫具體的視圖,
-
最終視圖呈現給用戶,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/252918.html
標籤:其他
上一篇:方法多載與可變引數與遞回
下一篇:LinkedList詳解
