【Spring教程23】Spring框架實戰:從零開始學習SpringMVC 之 SpringMVC簡介與SpringMVC概述

目錄

  • 1,SpringMVC簡介
  • 2、SpringMVC概述

歡迎大家回到《Java教程之Spring30天快速入門》,本教程所有示例均基于Maven實現,如果您對Maven還很陌生,請移步本人的博文《如何在windows11下安裝Maven并配置以及 IDEA配置Maven環境》,本文的上一篇為《Spring事務角色與 Spring事務屬性、事務傳播行為》
在這里插入圖片描述

1,SpringMVC簡介

從這一節開始,我們開始學 習SpringMVC,看到SpringMVC這個名字我們會發現其中包含Spring,那么SpringMVC和Spring之間的會有關系么?答案是肯定有,SpringMVC隸屬于Spring,是Spring技術中的一部分。那么SpringMVC到底是用來做什么的呢?

  • 回想web階段,我們學習過Servlet,而SpringMVC與Servlet技術功能等同,均屬于web層或者說表現層開發技術。

那么既然已經有了Servlet為什么還需要花時間再學習一個SpringMVC技術?要回答這個問題,我們
就需要搞清楚SpringMVC與Servlet相比,有什么優勢:

框架我們都知道是用來簡化開發的,所以SpringMVC與Servlet相比,開發起來更簡單快捷,用更少的代碼完成表現層代碼的開發,那么問題又來了,到底有多簡單呢?我們通過一個例子來體驗一把吧。

將資料中的項目導入到IDEA中,打開后格式如下
在這里插入圖片描述

  • UserSaveServlet:使用Servlet開發的用戶新增模塊
@WebServlet("/user/save")
public class UserSaveServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//1.接收請求參數String name = req.getParameter("name");System.out.println("servlet save name ==> " + name);//2.生產響應resp.setContentType("text/json;charset=utf-8");PrintWriter pw = resp.getWriter();pw.write("{'module':'servlet save'}");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req,resp);}
}
  • UserUpdateServlet:使用Servlet開發的用戶修改模塊
@WebServlet("/user/update")
public class UserUpdateServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//1.接收請求參數String name = req.getParameter("name");System.out.println("servlet update name ==> " + name);//2.生產響應resp.setContentType("text/json;charset=utf-8");PrintWriter pw = resp.getWriter();pw.write("{'module':'servlet update'}");
}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req,resp);}
}
  • UserDeleteServlet:使用Servlet開發的用戶刪除模塊
@WebServlet("/user/delete")
public class UserDeleteServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//1.接收請求參數String name = req.getParameter("name");System.out.println("servlet delete name ==> " + name);//2.生產響應resp.setContentType("text/json;charset=utf-8");PrintWriter pw = resp.getWriter();pw.write("{'module':'servlet delete'}");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req,resp);}
}
  • UserSelectServlet:使用Servlet開發的用戶查詢模塊
@WebServlet("/user/select")
public class UserSelectServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//1.接收請求參數String name = req.getParameter("name");System.out.println("servlet select name ==> " + name);//2.生產響應resp.setContentType("text/json;charset=utf-8");PrintWriter pw = resp.getWriter();pw.write("{'module':'servlet select'}");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req,resp);}
}

啟動項目,測試結果如下:
在這里插入圖片描述
上面就是通過Servlet的方式來實現的用戶模塊的增刪改查功能。那么如果使用SpringMVC來開發相
同的功能,做出來是什么樣子的呢?

打開項目springmvc包下的UserController類,內容如下:

@Controller
public class UserController {@RequestMapping("/save")@ResponseBodypublic String save(String name){System.out.println("springmvc save name ==> " + name);return "{'module':'springmvc save'}";}@RequestMapping("/delete")@ResponseBodypublic String delete(String name){System.out.println("springmvc delete name ==> " + name);return "{'module':'springmvc delete'}";}@RequestMapping("/update")@ResponseBodypublic String update(String name){System.out.println("springmvc update name ==> " + name);return "{'module':'springmvc update'}";}@RequestMapping("/select")@ResponseBodypublic String select(String name){System.out.println("springmvc select name ==> " + name);return "{'module':'springmvc select'}";}
}

啟動項目,測試結果如下:
在這里插入圖片描述
通過兩種技術對相同功能的實現,我們會發現打印輸出的結果是一樣的,但是對比編寫的代碼會發現
SpringMVC這種開發方式更簡單、更高效

所以接下來我們就需要來學習下SpringMVC這門技術,主要學習那些內容呢?

學習之前大家需要記住一件事是,SpringMVC是用來替換Servlet的,所以Servlet能實現的,
SpringMVC就能實現,主要學習的內容包含如下模塊:

  • SpringMVC簡介
  • 請求與響應
  • REST風格
  • SSM整合(注解版)
  • 攔截器
    在這里插入圖片描述

SpringMVC簡介:主要是來認識下到底什么是SpringMVC。

請求與相應:SpringMVC是替換Servlet處于Web的框架,所以其主要的作用就是用來接收前端發過來的請求和數據然后經過處理并將處理的結果響應給前端,所以如何處理請求和響應是SpringMVC中非常重要的一塊內容。

REST風格:是一種軟件架構風格,可以降低開發的復雜性,提高系統的可伸縮性,在以后開發中非常重要和常用。

SSM整合:是把咱們所學習的SpringMVC+Spring+Mybatis整合在一起來完成業務開發,是對我們所學習這三個框架的一個綜合應用。

攔截器:是SpringMVC中的一個小知識點。

對于SpringMVC的學習,最終要達成的目標:

  1. 掌握基于SpringMVC獲取請求參數和響應json數據操作
  2. 熟練應用基于REST風格的請求路徑設置與參數傳遞
  3. 能夠根據實際業務建立前后端開發通信協議并進行實現
  4. 基于SSM整合技術開發任意業務模塊功能
    在這里插入圖片描述

下面我們就進入SpringMVC這一章內容的學習,在這一章中,我們主要學習如下內容:

  • SpringMVC概述
  • 入門案例
  • 入門案例工作流程分析
  • Controller加載控制
  • PostMan

本章的核心內容為:入門案例和入門案例工作流程分析。

2、SpringMVC概述

我們要學習的SpringMVC究竟是一門什么技術呢?

在這里插入圖片描述
在這里插入圖片描述

當前WEB程序的工作流程:
三層架構

  • web程序通過瀏覽器訪問前端頁面,發送異步請求到后端服務器
  • 后臺服務器采用三層架構進行功能開發
    • 表現層負責接收請求和數據然后將數據轉交給業務層
    • 業務層負責調用數據層完成數據庫表的增刪改查,并將結果返給表現層
    • 表現層將數據轉換成json格式返回給前端
  • 前端頁面將數據進行解析最終展示給用戶。

表現層與數據層的技術選型:

  • 數據層采用Mybatis框架
  • 表現層采用SpringMVC框架,SpringMVC主要負責的內容有:
    • controller如何接收請求和數據
    • 如何將請求和數據轉發給業務層
    • 如何將響應數據轉換成json發回到前端

介紹了這么多,最后我們來對SpringMVC一個概述:

  • SpringMVC是一種基于Java實現MVC模型的輕量級Web框架
  • 優點
    • 使用簡單、開發便捷(相比于Servlet)
    • 靈活性強

這里所說的優點,就需要我們再使用的過程中慢慢體會。從下一節開始,我們將正式開始SpringMVC的學習。

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

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

相關文章

python使用vtk與mayavi三維可視化繪圖

VTK(Visualization Toolkit)是3D計算機圖形學、圖像處理和可視化的強大工具。它可以通過Python綁定使用,適合于科學數據的復雜可視化。Mayavi 依賴于 VTK (Visualization Toolkit),一個用于 3D 計算機圖形、圖像處理和可視化的強大…

AS安裝目錄

編輯器: sdk: gradle: gradle使用的jdk目錄:Gradle使用的jdk是android studio安裝目錄下的jbr 成功項目的android studio配置:

H264碼流結構

視頻編碼的碼流結構是指視頻經過編碼之后得到的二進制數據是怎么組織的,或者說,就是編碼后的碼流我們怎么將一幀幀編碼后的圖像數據分離出來,以及在二進制碼流數據中,哪一塊數據是一幀圖像,哪一塊數據是另外一幀圖像。…

C++面試寶典第4題:合并鏈表

題目 有一個鏈表,其節點聲明如下: struct TNode {int nData;struct TNode *pNext;TNode(int x) : nData(x), pNext(NULL) {} }; 現給定兩個按升序排列的單鏈表pA和pB,請編寫一個函數,實現這兩個單鏈表的合并。合并后,…

scheduleatfixedrate詳解

scheduleatfixedrate詳解 大家好,我是免費搭建查券返利機器人賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!在Java開發中,我們常常需要執行定時任務,并且需要保證任務按照一定…

使用Java實現基數排序算法

文章目錄 基數排序算法 基數排序算法 (1)基本思想:將整數按位數切割成不同的數字,然后按每個位數分別比較。 (2)排序過程:將所有待比較數值(正整數)統一為同樣的數位長…

Vuex快速上手

一、Vuex 概述 目標:明確Vuex是什么,應用場景以及優勢 1.是什么 Vuex 是一個 Vue 的 狀態管理工具,狀態就是數據。 大白話:Vuex 是一個插件,可以幫我們管理 Vue 通用的數據 (多組件共享的數據)。例如:購…

VSCode SSH登錄服務器 提示XHR failed

設置->搜索“代理” 把圖中的√去掉 重啟 即可

OVS主線流程

OVS是open virtual switch的簡稱,是現在廣泛使用的軟件實現的虛擬網絡交換機。 各大云廠商普遍使用OVS來實現自身的虛擬網絡,各廠商會根據自身需要加以修改使之符合自身需求,DPU中也使用OVS來實現流表的offload。OVS中的流表基于多級結構&am…

變相增大BatchSize——梯度累積

常規訓練方式 for x,y in train_loader:pred model(x)loss criterion(pred, label)# 反向傳播loss.backward()# 根據新的梯度更新網絡參數optimizer.step()# 清空以往梯度,通過下面反向傳播重新計算梯度optimizer.zero_grad() pytorch每次forward完都會得到一個…

tidb安裝 centos7單機集群

安裝 [rootlocalhost ~]# curl --proto https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh [rootlocalhost ~]# source .bash_profile [rootlocalhost ~]# which tiup [rootlocalhost ~]# tiup playground v6.1.0 --db 2 --pd 3 --kv 3 --host 192.168.1…

按這個套路寫的年底工作總結,運維人能少背多少鍋?

在職場中,年終工作總結是一項重要的任務,不僅有助于回顧過去一年的工作成果,也為未來設定新的目標提供了參考。在進行年終工作總結的過程中,合理的工作匯報是至關重要的一環。 一、匯報需要堅守的4個法則 01.線索必須單一 觀點&am…

js實現元素可拖拽方法

業務需要:Vueelement plus實現對彈框進行拖拽,并可拖拽到顯示頁面的外面,而element提供的拖拽只能在當前頁面不可超出。所以手寫了拖拽方法。 實現效果 對元素進行拖拽 拖拽方法 function dragElement(ele) {ele.addEventListener("mous…

SQL自學通之函數 :對數據的進一步處理

目錄 一、目標 二、匯總函數 COUNT SUM AVG MAX MIN VARIANCE STDDEV 三、日期/時間函數 ADD_MONTHS LAST_DAY MONTHS_BETWEEN NEW_TIME NEXT_DAY SYSDATE 四、數學函數 ABS CEIL 和FLOOR COS、 COSH 、SIN 、SINH、 TAN、 TANH EXP LN and LOG MOD POW…

【SpringBoot教程】SpringBoot 實現前后端分離的跨域訪問(Nginx)

作者簡介:大家好,我是擼代碼的羊駝,前阿里巴巴架構師,現某互聯網公司CTO 聯系v:sulny_ann(17362204968),加我進群,大家一起學習,一起進步,一起對抗…

Mybatis之核心配置文件詳解、默認類型別名、Mybatis獲取參數值的兩種方式

學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統/深入學習某技術知識點… 一個人摸索學習很難堅持,想組團高效學習… 想寫博客但無從下手,急需…

arm-none-eabi-gcc not find

解決辦法:安裝:gcc-arm-none-eabi sudo apt install gcc-arm-none-eabi; 如果上邊解決問題了就不用管了,如果解決不了,加上下面這句試試運氣: $ sudo apt-get install lsb-core看吧方正我是運氣還不錯,感…

leetcode周賽375 - 12 - 10

比賽地址 : 競賽 - 力扣 (LeetCode) t1 : 直接暴力即可 class Solution { public:int countTestedDevices(vector<int>& b) {int n b.size();int ans 0;for(int i0;i<n;i){if(b[i]>0){ans ;for(int ji1;j<n;j){b[j] max(b[j]-1,0);}}}return ans;} };…

SSL 數字證書的一些細節

參考&#xff1a;TLS/SSL 協議詳解(6) SSL 數字證書的一些細節1 證書驗證 地址&#xff1a;https://wonderful.blog.csdn.net/article/details/77867063 參考&#xff1a;TLS/SSL協議詳解 (7) SSL 數字證書的一些細節2 地址&#xff1a;https://wonderful.blog.csdn.net/articl…

Python學習筆記-類

1 定義類 類是函數的集合&#xff0c;class來定義類 pass并沒有實際含義&#xff0c;只是為了代碼能執行通過&#xff0c;不報錯而已&#xff0c;相當于在代碼種占一個位置&#xff0c;后續完善 類是對象的加工廠 2.創建對象 carCar()即是創建對象的過程 3、類的成員 3.1 實例…