文章目錄
- 什么是MVC
- model
- view
- controller
- 職責分析
- 體會MVC
- 什么是SpringMVC
- 中心控制器DispatchServlet
- SpringMVC執行流程
什么是MVC
- MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟體設計規范,
- 是將業務邏輯、資料、顯示分離的方法來組織代碼,
- MVC主要作用是降低了視圖與業務邏輯間的雙向偶合,
- MVC不是一種設計模式,MVC是一種架構模式
model
- 資料模型, 提供要展示的資料,因此包含資料(dao)和行為(service), 也就是model提供了資料查詢和model中資料的狀態更新功能,包含干巴巴的資料也包含處理資料的行為
view
- 負責進行模型的展示,一般就是我們用戶所看見的東西
controller
- 負責接收用戶的請求, 委托給模型進行處理,再把模型處理完的資料結果回傳給視圖,由視圖負責展示結果,也就是說控制器做了門迎禮儀小姐干的活哈哈哈
職責分析
Controller:控制器
- 取得表單資料
- 呼叫業務邏輯
- 轉向指定的頁面
Model:模型
- 業務邏輯
- 保存資料的狀態
View:視圖
- 顯示頁面
-
mvc框架做了哪些事情
-
將url映射到java類中或java類中的方法
-
封裝用戶提交的資料
-
處理請求,呼叫相關的業務處理,然后封裝回應資料
-
將回應的資料進行渲染,jsp/html等表示層資料
最典型的MVC就是JSP + servlet + javabean的模式,

體會MVC
- 創建maven專案匯入jar包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.4.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>
- 撰寫model中的dao部分
public class Database {
public static String username = "hello";
public static String password = "hello";
}
- 撰寫model中的service部分
public class Service {
public String check(String username, String password) {
String response = "";
if (username!= null && password != null && !username.equals("") && !password.equals("")) {
if (username.equals(Database.username)&& password.equals(Database.password)) {
response = "登錄成功!!";
} else {
response = "賬號密碼錯誤";
}
} else {
response = "請出入賬號或者密碼";
}
return response;
}
}
- 撰寫Controller部分
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.獲取引數
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
//2.業務邏輯
Service service = new Service();
String response = service.check(username, password);
//3.回傳view
PrintWriter writer = resp.getWriter();
writer.write(response);
writer.flush();
writer.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- 配置web.xml檔案
<?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>hello</servlet-name>
<servlet-class>controller.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!--配置默認訪問頁面-->
<!-- <welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>-->
<!--配置session有效時間-->
<!-- <session-config>
<session-timeout></session-timeout>
</session-config>-->
</web-app>
- 在index.jsp檔案中寫入form表單
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello</title>
</head>
<body>
<form action="hello">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit">
</form>
</body>
</html>
- 使用tomcat啟動專案測驗

- 上面就是一個簡單的MVC架構下的請求回應的程序, 總之, 使用MVC架構可以降低資料方面, 邏輯代碼方面和視圖方面的耦合性
什么是SpringMVC
- Spring MVC是Spring Framework的一部分,是基于Java實作MVC的輕量級Web框架
- Spring MVC的特點:
- 輕量級,簡單易學
- 高效 , 基于請求回應的MVC框架
- 與Spring兼容性好,無縫結合
- 約定優于配置
- 功能強大:RESTful、資料驗證、格式化、本地化、主題、攔截器等
- 簡潔靈活, 我們可以將SprigMVC中遇到的bean全部注冊要Spring中(使用Spring中的IOC和AOP來簡化SpringMVC)
中心控制器DispatchServlet
-
SPringMVC的根本還是一個MVC設計框架, 只是在其前面加了一個門,這個門就是中心控制器DispatchServlet
-
DispatcherServlet的作用是將請求分發到不同的處理器(Controller)
-
Spring MVC框架像許多其他MVC框架一樣, 以請求為驅動 , 圍繞一個中心Servlet(DispatchServlet)分派請求及提供其他功能,DispatcherServlet實際上就是一個Servlet (它繼承自HttpServlet 基類),
-
SpringMVC的原理如下圖所示:

-
當一個用戶發送一個請求的時候, 如果正常接收到, 必須經過中心控制器也就是DispatchServlet, DispatchServlet將請求進行分發, 委托給對應的處理器(controller), 在controller中呼叫model中的service方法處理邏輯業務, 處理結束后將處理結果回傳給controller處理器, 處理器將處理結果進行封裝形成modelAndView物件回傳給中心控制器(DispatchServlet), 接下來將這個modelAndView再給到視圖決議器去處理, 視圖決議器再將處理結果回傳給中心控制器, 然后將視圖展示給用戶完成一次回應
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就可以知道請求想要哪個控制器,
-
HandlerExecution表示執行器,其主要作用是根據HandlerMapping所知道的結果去查找控制器,如上url被查找控制器為:hello,
-
HandlerExecution將決議后的資訊傳遞給DispatcherServlet,如決議控制器映射等,
-
HandlerAdapter表示處理器配接器,其按照特定的規則去執行Handler, 也就是去找應的處理器去實作這個請求的目的,
-
HandlerAdapter再讓具體的Controller處理器去執行,
-
Controller將具體的執行資訊回傳給HandlerAdapter,如ModelAndView,
-
HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet,
-
DispatcherServlet呼叫視圖決議器(ViewResolver)來決議HandlerAdapter傳遞的邏輯視圖名,
-
視圖決議器將決議的邏輯視圖名傳給DispatcherServlet,
-
DispatcherServlet根據視圖決議器決議的視圖結果,呼叫具體的視圖,
-
最終視圖呈現給用戶,
總結: 有股三顧茅廬的意思, DispatchServlet就是那個茅廬, 一個請求要進進出出三次DispatchServlet, 所以我們在編程的時候只需要注重controller和service就行
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/201674.html
標籤:其他
下一篇:重磅,華為開源JDK!
