SpringMVC01、回顧MVC

1、回顧MVC

1.1、什么是MVC

  • MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟件設計規范。
  • 是將業務邏輯、數據、顯示分離的方法來組織代碼。
  • MVC主要作用是降低了視圖與業務邏輯間的雙向偶合
  • MVC不是一種設計模式,MVC是一種架構模式。當然不同的MVC存在差異。

Model(模型):數據模型,提供要展示的數據,因此包含數據和行為,可以認為是領域模型或JavaBean組件(包含數據和行為),不過現在一般都分離開來:Value Object(數據Dao) 和 服務層(行為Service)。也就是模型提供了模型數據查詢和模型數據的狀態更新等功能,包括數據和業務。

View(視圖):負責進行模型的展示,一般就是我們見到的用戶界面,客戶想看到的東西。

Controller(控制器):接收用戶請求,委托給模型進行處理(狀態改變),處理完畢后把返回的模型數據返回給視圖,由視圖負責展示。 也就是說控制器做了個調度員的工作。

最典型的MVC就是JSP + servlet + javabean的模式。

1.2、Model1時代

  • 在web早期的開發中,通常采用的都是Model1。

  • Model1中,主要分為兩層,視圖層和模型層。

Model1優點:架構簡單,比較適合小型項目開發;

Model1缺點:JSP職責不單一,職責過重,不便于維護;

1.3、Model2時代

Model2把一個項目分成三部分,包括視圖、控制、模型。

  1. 用戶發請求
  2. Servlet接收請求數據,并調用對應的業務邏輯方法
  3. 業務處理完畢,返回更新后的數據給servlet
  4. servlet轉向到JSP,由JSP來渲染頁面
  5. 響應給前端更新后的頁面

職責分析:

Controller:控制器

  1. 取得表單數據
  2. 調用業務邏輯
  3. 轉向指定的頁面

Model:模型

  1. 業務邏輯
  2. 保存數據的狀態

View:視圖

  1. 顯示頁面

Model2這樣不僅提高的代碼的復用率與項目的擴展性,且大大降低了項目的維護成本。Model 1模式的實現比較簡單,適用于快速開發小規模項目,Model1中JSP頁面身兼View和Controller兩種角色,將控制邏輯和表現邏輯混雜在一起,從而導致代碼的重用性非常低,增加了應用的擴展性和維護的難度。Model2消除了Model1的缺點。

1.4、回顧Servlet

  1. 新建一個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>
  1. 建立一個Moudle:springmvc-01-servlet , 添加Web app的支持!

  2. 導入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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, 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/hello.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

編寫Hello.jsp,在WEB-INF目錄下新建一個jsp的文件夾,新建hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Kuangshen</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>HelloServlet</servlet-name><servlet-class>com.kuang.servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/user</url-pattern></servlet-mapping>
</web-app>
  1. 配置Tomcat,并啟動測試

    • localhost:8080/user?method=add
    • localhost:8080/user?method=delete

MVC框架要做哪些事情

  1. 將url映射到java類或java類的方法 .
  2. 封裝用戶提交的數據 .
  3. 處理請求—調用相關的業務處理—封裝響應數據 .
  4. 將響應的數據進行渲染 . jsp / html 等表示層數據 .

說明:

? 常見的服務器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常見前端MVC框架:vue、angularjs、react、backbone;由MVC演化出了另外一些模式如:MVP、MVVM 等等….

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711773.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker部署前后端服務示例

使用Docker部署js前端 1.創建Dockerfile 在項目跟目錄下創建Dockerfile文件&#xff1a; # 使用nginx作為基礎鏡像 FROM nginx:1.19.1# 指定工作空間 WORKDIR /data/web# 將 yarn build 打包后的build文件夾添加到工作空間 ADD build build# 將項目必要文件添加到工作空間&a…

數據結構—>帶你深入了解單鏈表(基礎篇)

?作者簡介&#xff1a;大家好&#xff0c;我是橘橙黃又青&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;橘橙黃又青-CSDN博客 前面我們學習了順序表&#xff0c;今天我們來學習與順序表類似的單鏈表 1.&#x1f3…

鴻蒙Harmony應用開發—ArkTS聲明式開發(通用屬性:透明度設置)

設置組件的透明度。 說明&#xff1a; 從API Version 7開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。 opacity opacity(value: number | Resource) 設置組件的不透明度。 卡片能力&#xff1a; 從API version 9開始&#xff0c;該接口…

香橙派AIpro快速上手指南

1 前言 作為業界首款基于昇騰深度研發的AI開發板&#xff0c;Orange Pi AIpro無論在外觀上、性能上還是技術服務支持上都非常優秀&#xff0c;其8/20TOPS澎湃算力是目前開發板市場中所具備的最大算力&#xff0c;能覆蓋生態開發板者的主流應用場景&#xff0c;讓用戶實踐各種創…

深入理解Redis中的漸進式Rehash技術

1. 引言 Redis是一款高性能的鍵值存儲系統,被廣泛應用于緩存、隊列、計數器等場景,因其快速、穩定的特性備受開發者青睞。在Redis的背后,有著許多復雜的數據結構和算法支撐著其高效運行,而其中之一就是Rehash操作。 Rehash是Redis中的一個關鍵操作,負責在數據量增加時對…

Web自動化測試平臺開發---Automated_platform

一、項目簡介 歷時一個假期&#xff0c;Automated_platform 第一版完工&#xff0c;是一款基于po模式的自動化測試平臺,采用后端技術為DjangoceleryRabbitMQmysql 配置mysql數據庫&#xff0c;進行數據遷移后&#xff0c;運行項目后&#xff0c;即可成功訪問http://127.0.0.1:8…

5. 升級 Spring Boot(Upgrading Spring Boot)

5. 升級 Spring Boot&#xff08;Upgrading Spring Boot&#xff09; 項目 wiki 提供如何從 Spring Boot 早期版本升級的說明。請按照 release notes 部分查找要升級到的版本。 升級說明總是版本說明的第一部分。如果您的版本落后一個以上&#xff0c;請確保您已經查看了所跳…

【軟考】數據結構之隊列和棧

目錄 1.例題一1.1題目1.2 題目截圖1.3 題目分析 1.例題一 1.1題目 輸出受限的雙端隊列是指元素可以從隊列的兩端輸入&#xff0c;但只能從隊列的一端輸出&#xff0c;如下圖所示&#xff0c;若有e1&#xff0c;e2&#xff0c;e3&#xff0c;e4依次進入輸出受限的雙端隊列&…

Nginx-location匹配規則

每次配置Nginx的時候&#xff0c;不是多個這匹配不上就是那匹配不上&#xff0c;多個斜線少個斜線的&#xff0c;然后頭疼&#xff0c;尤其多層代理之后&#xff0c;真是瘋狂掉頭發 #mermaid-svg-Z1ScpZFefeixtnn3 {font-family:"trebuchet ms",verdana,arial,sans-s…

Linux——進程控制(一)進程的創建與退出

目錄 一、進程創建 1.寫時拷貝 2.創建多個進程 二、進程終止 1.main函數的返回值 2.bash中的$? 3.自定義退出碼 4.C語言的錯誤碼 5.錯誤碼與退出碼的區別 6.代碼異常終止 7.exit函數 8.總結 一、進程創建 在之前&#xff0c;我們學過linux中的非常重要的函數——…

Git 將dev1.0分支的某些commit合并到dev分支上

前言&#xff1a;dev1.0是新開發的需求內容&#xff0c;但是部分熱更內容在此分支提交&#xff0c;如今需要把熱更的內容發到dev環境&#xff0c;但是dev1.0新需求未開發完畢&#xff0c;不可更新到dev環境。 現在在dev1.0分支 git pull #拉取當前分支最新內容git log #查看最…

3. 文字陰影

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>文字陰影</title><style>*{margin: …

速賣通店鋪營銷秘籍:如何巧妙運用活動提升轉化率

對于速賣通賣家而言&#xff0c;想要提升店鋪的成交率&#xff0c;除了依賴付費推廣外&#xff0c;更重要的是如何通過店鋪營銷來吸引和留住潛在買家。今天&#xff0c;我們就來深入探討一下速賣通店鋪營銷的幾個關鍵策略。 首先&#xff0c;我們要明確一點&#xff0c;速賣通平…

IDEA中的Structure模塊使用詳解

IDEA中的Structure模塊使用詳解 類方法的展示 從左往右介紹&#xff1a; 1、最開頭的 m 標識是表示為方法&#xff0c;如出現 f 標識則表示為屬性&#xff1b; 2、m后面跟著的是方法或者屬性的訪問修飾符&#xff1a; #紅色關閉的鎖表示為private&#xff1b; #圓圈表示不帶…

使用Docker搭建一款實用的個人IT工具箱——It-Tools

作為程序員&#xff0c;在日常工作中&#xff0c;需要借助一些工具來提高我們工作效率&#xff0c;IT-Tools是為開發人員度身打造的一套便捷在線工具。它提供全面功能&#xff0c;使開發者能以更高效方式完成任務。經由IT-Tools&#xff0c;開發人員能輕松應對各類技術挑戰&…

qt QRadioButton 及QButtonGroup 使用

QRadioButton 放在組合框QGroupBox中&#xff0c;再點擊時&#xff0c;即使有多個QRadioButton按鈕&#xff0c;同時選中的也就只有一個。 如下圖所示&#xff0c; 對于多個QRadioButton&#xff0c;每個按鈕都寫一個槽函數是不太明智的選擇&#xff0c;需要將QRadioButton放在…

海外服務器ping丟包怎么辦?

一般跨境企業比如說跨境電商、游戲等等都會有海外各個節點服務器的需求&#xff0c;包括對海外服務器的需求。當使用海外服務器時 &#xff0c;難免會出現一些問題&#xff0c;比如說丟包。那么&#xff0c;當海外服務器丟包的話&#xff0c;該如何處理呢&#xff1f; 說到丟包…

「MySQL」增刪查改

在操作數據庫中的表時&#xff0c;需要先使用該數據庫&#xff1a; use database;新增 創建表 先用 use 指定一個數據庫,然后使用 create 新增一個表 比如建立一個學生表 mysql> use goods; mysql> create table student(-> name varchar(4),-> age int,-> …

Compose 介紹

Compose 介紹 Android Compose 是 Google 官方推出的用于構建原生 Android UI 的現代工具包。它使用 Kotlin 語言編寫&#xff0c;可以幫助開發人員更輕松、更快速地創建精美、響應式和高性能的 Android 應用。 Compose 的優勢 聲明式 UI&#xff1a; Compose 使用聲明式 UI…

IIS部署.Net 7項目

&#x1f468; 作者簡介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;前端領域創作者 ?? 個人主頁&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;點贊&#x1f44d;&#x1f4dd; 評論 ??收藏 文章目錄 前言一、發布項目二、解決發布失敗1.發布失敗2.托管…