Spring Web MVC 是基于 Servlet API 構建的原始 Web 框架,從?開始就包含在 Spring 框架中。它的正式名稱“Spring Web MVC”來?其源模塊的名稱(Spring-webmvc),但它通常被稱為"Spring MVC".
Servlet 是?種實現動態??的技術. 準確來講Servlet是?套 Java Web 開發的規范,或者說是?套
Java Web 開發的技術標準. 只有規范并不能做任何事情,必須要有?去實現它. 所謂實現 Servlet 規范,就是真正編寫代碼去實現 Servlet 規范提到的各種功能,包括類、?法、屬性等.
Servlet 規范是開放的,除了 Sun 公司,其它公司也可以實現 Servlet 規范,?前常?的實現了Servlet 規范的產品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它們都被稱 為"Servlet 容器". Servlet 容器?來管理程序員編寫的 Servlet 類.
Web服務器
瀏覽器和服務器兩端進?數據交互, 使?的就是HTTP協議
HTTP 協議就是 HTTP 客戶端和 HTTP 服務器之間的交互數據的格式.
Web 服務器就是對HTTP協議進?封裝, 程序員不需要直接對協議進?操作(??寫代碼去解析http協議規則),讓Web開發更加便捷, 所以Web服務器也被稱為WWW服務器, HTTP服務器, 主要功能是提供?上信息瀏覽服務.
常?的Web服務器有: Apache,Nginx, IIS, Tomcat, Jboss等
在springboot里默認集成了tomcat服務器,tomcat的默認端口就是8080,所以訪問我們所運行的程序端口就是8080;
我們訪問本機服務器的默認網址就是 http://127.0.0.1:8080
瀏覽器輸?URL之后, 發起請求, 就和服務器之間建?了連接


訪問常見錯誤
404 表??戶訪問的資源不存在.,?概率是 URL 的路徑寫的不正確.
要么是訪問的路徑寫錯了,要么是程序的路徑配置錯了。
500 服務器出現內部錯誤. ?般是服務器的代碼執?過程中遇到了?些特殊情況(服務器異常崩潰)會產?這個狀態碼.
2XX 表示成功
3XX 表示重定向
4XX 客戶端錯誤(請求有問題,比如參數錯了,路徑錯了,格式錯了)
5XX 服務端錯誤
Spring-Web-Mvc
Mvc定義

View(視圖) 指在應?程序中專??來與瀏覽器進?交互,展?數據的資源.
Model(模型) 是應?程序的主體部分,?來處理程序中數據邏輯的部分.
Controller(控制器)可以理解為?個分發器,?來決定對于視圖發來的請求,需要?哪?個模型 來處理,以及處理完后需要跳回到哪?個視圖。即?來連接視圖和模型
什么是spring web mvc
MVC 是?種架構設計模式, 也是?種思想, ? Spring MVC 是對 MVC 思想的具體實現. 除此之外,
Spring MVC還是?個Web框架.
總結來說,Spring MVC 是?個實現了 MVC 模式的 Web 框架.
所以, Spring MVC主要關注有兩個點:
MVC
Web框架
Spring MVC 全稱是 Spring Web MVC
Spring Boot 只是實現Spring MVC的其中?種?式?已.
Spring Boot 可以添加很多依賴, 借助這些依賴實現不同的功能. Spring Boot 通過添加Spring Web MVC框架, 來實現web功能.
?如: 廚房可以?來做飯, 但真實實現做飯功能的是?以及各種做飯相關的?材和?具.
廚房就好?是SpringBoot, 廚房可以裝柜?, 實現收納功能, 裝燃?灶等, 實現做飯功能.
做飯這個事, 就是MVC, 在?千年前, 有?有?材就可以實現做飯

使用MVC
建立連接
獲取請求
返回響應
項目準備
建立連接

@RequestMapping
@RequestMapping 是 Spring Web MVC 應?程序中最常被?到的注解之?,它是?來注冊接?的
路由映射的.
表?服務收到請求時, 路徑為 /sayHi 的請求就會調? sayHi 這個?法的代碼.
路由映射: 當??訪問?個 URL 時, 將??的請求對應到程序中某個類的某個?法的過程就叫路由映射.
這個注解同時是類注解和方法注解,在同時在一個類上給類和方法進行注解,那么這個路由映射訪問的地址就是類路徑+方法路徑
@RequestMapping 同時支持get和post。
如何指定支持get或者post。
我們可以顯?的指定@RequestMapping 來接收POST的情況,如下所示:
如果要指定接收的話,那么就要在注解前面添加屬性名。
因為該注解只有一個參數默認就是給value的,如果有多個參數就要指明屬性。
實際上網絡傳遞過來的都是String類型,他會在匹配類型的時候進行轉換,匹配的上就轉換賦值,匹配不上就不賦值。
要想只支持get的話,把method 里的 post 改成 get。
@GetMapping 和?@PostMapping 和上面的等價。
路徑在請求方法不同時,可以一樣,其他都不行。
@RestController
在接收web請求的時候,項目有很多類,不可能每個類都掃描一遍,這個注解的其中一個功能就是能夠起到一個標識的作用,會在接收請求的時候掃描這個類有沒有對應的路由映射。不加的話可能會報錯。
傳參
傳遞單個參數
接收單個參數, 在 Spring MVC 中直接??法中的參數就可以

使?瀏覽器發送請求并傳參
http://127.0.0.1:8080/param/m1?name=spring

可以看到, 后端程序正確拿到了name參數的值.
Spring MVC 會根據?法的參數名, 找到對應的參數, 賦值給?法

在傳遞參數的時候,參數名一定要一樣的,如果不一樣是接收不到參數的。

使?基本類型來接收參數時, 參數必須傳(除boolean類型), 不傳參數會報500錯誤
對于包裝類型, 如果不傳對應參數,Spring 接收到的數據則為null
所以企業開發中,對于參數可能為空的數據,建議使?包裝類型
基本類型數據類型不匹配時, 會報400錯誤.
傳遞多個參數
使?瀏覽器發送請求并傳參: http://127.0.0.1:8080/param/m2?name=zhangsan&password=123456


當有多個參數時,前后端進?參數匹配時,是以參數的名稱進?匹配的,因此參數的位置是不影響后端獲取參數的結果
?如訪問: http://127.0.0.1:8080/param/m2?password=123456&name=zhangsan 同樣可以拿到正
確的結果

傳遞對象
如果參數?較多時, ?法聲明就需要有很多形參. 并且后續每次新增?個參數, 也需要修改?法聲明.
可以把這些參數封裝為?個對象.
Spring MVC 也可以?動實現對象參數的賦值,?如 Person 對象:


使?瀏覽器發送請求并傳參: http://127.0.0.1:8080/param/m3?
id=5&name=zhangsan&password=123456

可以看到, 后端程序正確拿到了Person對象?各個屬性的值

Spring 會根據參數名稱?動綁定到對象的各個屬性上, 如果某個屬性未傳遞, 則賦值為null(基本類型則賦值為默認初識值, ?如int類型的屬性, 會被賦值為0)
后端參數重命名(后端參數映射)
某些特殊的情況下,前端傳遞的參數 key 和我們后端接收的 key 可以不?致,?如前端傳遞了?個time 給后端,?后端是使? createtime 字段來接收的,這樣就會出現參數接收不到的情況,如果出現這種情況,我們就可以使? @RequestParam 來重命名前后端的參數值.
具體?例如下,后端實現代碼:

使?瀏覽器發送請求并傳參: http://127.0.0.1:8080/param/m4?time=2023-09-12

可以看到, Spring可以正確的把瀏覽器傳遞的參數time綁定到了后端參數caretetime參數上
此時, 如果瀏覽器使?createtime進?參數傳遞呢?
訪問URL: http://127.0.0.1:8080/param/m4?createtime=2023-09-12
瀏覽器響應結果:


控制臺打印?志顯?: 請求參數 'time' 不存在
可以得出結論:
使? @RequestParam 進?參數重命名時, 請求參數只能和 @RequestParam 聲明的名稱? 致, 才能進?參數綁定和賦值.
使? @RequestParam 進?參數重命名時, 參數就變成了必傳參數.
@RequestParam 本質上是對參數進行綁定。
可以通過required設置false改為非必傳參數。
傳遞數組
當多個參數命名一樣時,會自動組合成數組傳遞過去。
或者將一個參數內的數據通過逗號分隔,也會視為一個數組

使?瀏覽器發送請求并傳參:
數組參數:請求參數名與形參數組名稱相同且請求參數為多個, 后端定義數組類型形參即可接收參數
http://127.0.0.1:8080/param/m5?
arrayParam=zhangsan&arrayParam=lisi&arrayParam=wangwu
或者使? http://127.0.0.1:8080/param/m6?listParam=zhangsan%2clisi%2cwangwu
或者使? http://127.0.0.1:8080/param/m5?arrayParam=zhangsan,lisi,wangwu

傳遞集合
集合參數:和數組類似, 同?個請求參數名有為多個, 且需要使? @RequestParam 綁定參數關系
因為在默認的情況下,請求中參數名相同的多個值,是封裝到數組里的. 如果要封裝到集合,要使?@RequestParam 綁定參數關系,綁定好后就傳遞給了集合。
請求?式和數組類似:瀏覽器傳參:
?式?: http://127.0.0.1:8080/param/m6?listParam=zhangsan&listParam=lisi&listParam=wangwu
?式?: http://127.0.0.1:8080/param/m6?listParam=zhangsan%2clisi%2cwangwu
%2c 是逗號的轉義編碼, 解碼后的url為: http://127.0.0.1:8080/param/m6?
listParam=zhangsan,lisi,wangwu


Json
JSON概念
JSON:JavaScript Object Notation 【JavaScript 對象表?法】
JSON是?種輕量級的數據交互格式. 它基于 ECMAScript (歐洲計算機協會制定的js規范)的?個?集,
采?完全獨?于編程語?的?本格式來存儲和表?數據。--百度百科
簡單來說:JSON就是?種數據格式, 有??的格式和語法, 使??本表??個對象或數組的信息, 因此
JSON本質是字符串. 主要負責在不同的語?中數據傳遞和交換.
類似于:
國際通?語?-英語
中國56個?族不同地區的通?語?-普通話
在國際上使用英語來溝通,但各民族也有自己的語言
JSON語法
JSON 是?個字符串,其格式?常類似于 JavaScript 對象字?量的格式
我們先來看?段JSON數據


和上?描述的數據?樣, 只不過上?的進?了格式化, 更易讀.
JSON的語法:
數據在 鍵值對(Key/Value) 中
數據由逗號 , 分隔
對象? {} 表?
數組? [] 表?
值可以為對象, 也可以為數組, 數組中可以包含多個對象
JSON的兩種結構
對象: ?括號 {} 保存的對象是?個?序的 鍵值對 集合. ?個對象以左括號 { 開始, 右括號 }
結束。每個"鍵"后跟?個冒號 : ,鍵值對使?逗號 , 分隔
數組: 中括號 [] 保存的數組是值(value)的有序集合. ?個數組以左中括號 [ 開始, 右中括
號 ] 結束,值之間使?逗號 , 分隔。
Json字符串和Java對象互轉
JSON本質上是?個字符串, 通過?本來存儲和描述數據
Spring MVC框架也集成了JSON的轉換?具jackson,這只是轉換工具的一種,想去用其他的可以自己導入依賴,我們可以直接使?, 來完成JSON字符串和Java對象的互轉。

使?ObjectMapper 對象提供的兩個?法, 可以完成對象和JSON字符串的互轉
writeValueAsString: 把對象轉為JSON字符串
readValue: 把字符串轉為對象
JSON優點
簡單易?: 語法簡單,易于理解和編寫,可以快速地進?數據交換
跨平臺?持: JSON可以被多種編程語?解析和?成, 可以在不同的平臺和語?之間進?數據交換和傳輸
輕量級: 相較于XML格式, JSON數據格式更加輕量級, 傳輸數據時占?帶寬較?, 可以提?數據傳輸速度
易于擴展: JSON的數據結構靈活,?持嵌套對象和數組等復雜的數據結構,便于擴展和使?
安全性: JSON數據格式是?種純?本格式,不包含可執?代碼, 不會執?惡意代碼,因此具有較?的安全性。
傳遞JSON對象?
接收JSON對象, 需要使? @RequestBody
注解RequestBody: 請求正?,意思是這個注解作?在請求正?的數據綁定,請求參數必須在寫在請求正?中
后端代碼

成員名要對應,屬性順序不做要求,list和數組對順序有要求。
可以看到顯示的是字符串類型,這是因為spring自動將json轉換成了對象,所以不需要手動轉換。
如果創建了有參的構造函數,最好再創建一個無參的默認構造函數。
獲取URL中參數@PathVariable
path variable: 路徑變量
和字?表達的意思?樣, 這個注解主要作?在請求URL路徑上的數據綁定
默認傳遞參數寫在URL上,SpringMVC就可以獲取到url上的參數
后端實現代碼:

?{}大括號包括的就是@PathVariable的變量,只要匹配的上就可以獲取到,匹配不上的話網頁就會報錯。

如果?法參數名稱和需要綁定的URL中的變量名稱?致時, 可以簡寫, 不?給@PathVariable的屬性賦值, 如上述例?中的id變量
如果?法參數名稱和需要綁定的URL中的變量名稱不?致時, 需要@PathVariable的屬性value賦值,
如上述例?中的userName變量
上傳?件@RequestPart


Cookie和Session
HTTP 協議??是屬于 "?狀態" 協議.
"?狀態" 的含義指的是:
默認情況下 HTTP 協議的客?端和服務器之間的這次通信, 和下次通信之間沒有直接的聯系.
但是實際開發中, 我們很多時候是需要知道請求之間的關聯關系的.
例如登陸?站成功后, 第?次訪問的時候服務器就能知道該請求是否是已經登陸過了.
?如去醫院掛號
看病之前先掛號. 掛號時候需要提供?份證號, 同時得到了?張 "就診卡", 這個就診卡就相當于患者的 "令牌".
后續去各個科室進?檢查, 診斷, 開藥等操作, 都不必再出??份證了, 只要憑就診卡即可識別出當前患者的?份.
看完病了之后, 不想要就診卡了, 就可以注銷這個卡. 此時患者的?份和就診卡的關聯就銷毀了. (類似于?站的注銷操作)
?來看病, 可以辦?張新的就診卡, 此時就得到了?個新的 "令牌"
理解Session
我們先來了解?下什么是會話.
會話: 對話的意思
在計算機領域, 會話是?個客?與服務器之間的不中斷的請求響應. 對客?的每個請求,服務器能夠識別出請求來?于同?個客?. 當?個未知的客?向Web應?程序發送第?個請求時就開始了?個會話.
當客?明確結束會話或服務器在?個時限內沒有接受到客?的任何請求時,會話就結束了.
?如我們打客服電話
每次打客服電話, 是?個會話. 掛斷電話, 會話就結束了
下次再打客服電話, ?是?個新的會話.
如果我們?時間不說話, 沒有新的請求, 會話也會結束.
服務器同?時刻收到的請求是很多的. 服務器需要清楚的區分每個請求是屬于哪個??, 也就是屬于哪個會話, 就需要在服務器這邊記錄每個會話以及與??的信息的對應關系.
Session是服務器為了保存??信息?創建的?個特殊的對象.
Session的本質就是?個 "哈希表", 存儲了?些鍵值對結構. Key 就是SessionID, Value 就是??信息(??信息可以根據需求靈活設計)

essionId 是由服務器?成的?個 "唯?性字符串", 從 Session 機制的?度來看, 這個唯?性字符串稱為 "SessionId". 但是站在整個登錄流程中看待, 也可以把這個唯?性字符串稱為 "token".
上述例?中的令牌ID, 就可以看做是SessionId, 只不過令牌除了ID之外, 還會帶?些其他信息, ?如時間, 簽名等.
當??登陸的時候, 服務器在 Session 中新增?個新記錄, 并把 sessionId返回給客?端. (通過
HTTP 響應中的 Set-Cookie 字段返回).
客?端后續再給服務器發送請求的時候, 需要在請求中帶上 sessionId. (通過 HTTP 請求中的
Cookie 字段帶上).
服務器收到請求之后, 根據請求中的 sessionId在 Session 信息中獲取到對應的??信息, 再進?后
續操作.找不到則重新創建Session, 并把SessionID返
ession 默認是保存在內存中的. 如果重啟服務器則 Session 數據就會丟失.
Cookie 和 Session 的區別
Cookie 是客?端保存??信息的?種機制. Session 是服務器端保存??信息的?種機制.
Cookie 和 Session之間主要是通過 SessionId 關聯起來的, SessionId 是 Cookie 和 Session 之間的橋梁
Cookie 和 Session 經常會在?起配合使?. 但是不是必須配合.
完全可以? Cookie 來保存?些數據在客?端. 這些數據不?定是???份信息, 也不?定是
SessionId
Session 中的sessionId 也不需要?得通過 Cookie/Set-Cookie 傳遞, ?如通過URL傳遞.
獲取cookie?
Spring MVC是基于 Servlet API 構建的原始 Web 框架, 也是在Servlet的基礎上實現的
HttpServletRequest , HttpServletResponse 是Servlet提供的兩個類, 是Spring
MVC?法的內置對象. 需要時直接在?法中添加聲明即可.
HttpServletRequest
這個類代表客?端的請求, 當客?端通過HTTP協議訪問服務器時,HTTP請求頭中的所有信息都封裝在這個對象中,通過這個對象提供的?法,可以獲得客?端請求的所有信息.
HttpServletResponse
這個類代表服務器的響應. HTTP響應的信息都在這個對象中, ?如向客?端發送的數據, 響應頭, 狀態碼等. 通過這個對象提供的?法, 可以獲得服務器響應的所有內容
Spring MVC在這兩個對象的基礎上進?了封裝, 給我們提供更加簡單的使??法。
這兩個參數要使用的話直接定義在請求里就可以,不規定順序,名稱也可以隨便定義。
簡潔獲取Cookie
也有更簡潔的?式獲取Cookie
獲取session


HttpSession getSession(boolean create);
HttpSession getSession();
Session讀取



獲取Header



響應
對于請求的默認掃描路徑是啟動類的目錄以及其子孫目錄,而為了避免大量的無用掃描就需要加上注解來表明這是一個controller類。
需要用到@restcontroller和@controller和其他特定的注解
這兩個注解的區別
@restcontroller是@controller和@responsebody的組合
@controller注解代表返回的是視圖的路徑;
之前說過現在前后端分離不再返回視圖,所以@controller注解基本上用不到了,但是如果用controller注解給類注解上了,想要返回數據可以在方法上加上@responsebody注解就可以了。
返回json
對象或者數組,list,map這些類型等,默認返回的就是json格式,盡管返回的都是字符串,但是會修改content-type來表明數據的格式,因為content-type沒有對象的類型,所以使用json來傳遞。
設置狀態碼
Spring MVC會根據我們?法的返回結果?動設置響應狀態碼, 程序員也可以?動指定狀態碼
通過Spring MVC的內置對象HttpServletResponse 提供的?法來進?設置

狀態碼不會影響頁面的顯示,如果要影響頁面的顯示,需要另外修改頁面,這個錯誤頁面的樣式也是可以自定義的
設置heander
Http響應報頭也會向客?端傳遞?些附加信息, ?如服務程序的名稱,請求的資源已移動到新地址等, 如:
Content-Type, Local等.
這些信息通過 @RequestMapping 注解的屬性來實現
value: 指定映射的URL
method: 指定請求的method類型, 如GET, POST等
consumes: 指定處理請求(request)的提交內容類型(Content-Type),例如application/json,
text/html;
produces: 指定返回的內容類型,還可以同時設置返回值的字符編碼
Params: 指定request中必須包含某些參數值時,才讓該?法處理
headers: 指定request中必須包含某些指定的header值,才能讓該?法處理請求
查看fiddler
如果不設置produces , ?法返回結果為String時, Spring MVC默認返回類型, 是text/html
設置其他Header
設置其他Header的話, 需要使?Spring MVC的內置對象HttpServletResponse 提供的?法來進?設置
通過Fiddler來觀察設置的結果:

應用分層
為了保證代碼的美觀和整潔,就用了應用分層。
類似公司的組織架構
公司初創階段, ?個??兼數職, 既做財務, ?做?事, 還有?政.
隨著公司的逐漸壯?, 會把崗位進?細分, 劃分為財務部?, ?事部?, ?政部?等. 各個部?內部還會
再進?細分.
項?開發也是類似, 最開始功能簡單時, 我們前后端放在?起開發, 隨著項?功能的復雜, 我們分為前
端和后端不同的團隊, 甚?更細粒度的團隊. 后端開發也會根據功能再進?細分. MVC就是其中的?種
拆分?式.
但是隨著后端?員不再涉及前端, 后端開發?有了新的分層?式.
阿里開發?冊中, 關于?程結構部分, 定義了常??程的應?分層結構:
?
應?分層 是?種軟件開發設計思想, 它將應?程序分成N個層次, 這N個層次分別負責各?的職責, 多個層次之間協同提供完整的功能. 根據項?的復雜度, 把項?分成三層, 四層或者更多層.
常?的MVC設計模式, 就是應?分層的?種具體體現.
什么需要應?分層?
在最開始的時候,為了讓項?快速上線,我們通常是不考慮分層的. 但是隨著業務越來越復雜,?量的代碼混在?起,會出現邏輯不清晰、各模塊相互依賴、代碼擴展性差、改動?處就牽?發?動全?等問題. 所以學習對項?進?分層就是我們程序員的必修課了.
如何分層(三層架構)
?"MVC", 就是把整體的系統分成了 Model(模型), View(視圖)和Controller
(控制器)三個層次,也就是將??視圖和業務處理隔離開,并且通過控制器連接起來,很好地實現了表現和邏輯的解耦,是?種標準的軟件分層架構。

目前現在更主流的開發?式是 "前后端分離" 的?式, 后端開發?程師不再需要關注前端的實現, 所以對于Java后端開發者, ?有了?種新的分層架構: 把整體架構分為表現層、業務邏輯層和數據層. 這種分層?式也稱之為"三層架構".
表現層: 就是展?數據結果和接受??指令的,是最靠近??的?層;
業務邏輯層: 負責處理業務邏輯, ??有復雜業務的具體實現;
數據層: 負責存儲和管理與應?程序相關的數據

按照上?的層次劃分, Spring MVC 站在后端開發?員的?度上, 也進?了?持, 把上?的代碼劃分為三個部分:
請求處理、響應數據:負責,接收??的請求,給??響應數據.
邏輯處理:負責業務邏輯處理的代碼.
數據訪問:負責業務數據的維護操作,包括增、刪、改、查等操作
三個部分, 在Spring的實現中, 均有體現:

Controller:控制層。接收前端發送的請求,對請求進?處理,并響應數據。
Service:業務邏輯層。處理具體的業務邏輯。
Dao:數據訪問層,也稱為持久層。負責數據訪問操作,包括數據的增、刪、改、查.
MVC 和三層架構的區別和聯系
關于?者的關系, ?直存在不同的觀點. 有?認為三層架構是MVC模式的?種實現, 也有?認為MVC是三層架構的替代?案, 等等各種說法都有. 根本原因是?家站在不同的?度來看待這個問題的
從概念上來講, ?者都是軟件?程領域中的架構模式.
MVC架構模式由三部分組成, 分別是: 模型(Model), 視圖(View)和控制器(Controller).
三層架構將業務應?劃分為:表現層, 業務邏輯層, 數據訪問層
![]()
MVC中, 視圖和控制器合起來對應三層架構中的表現層. 模型對應三層架構中的業務邏輯層, 數據層,
以及實體類?者其實是從不同?度對軟件?程進?了抽象.
MVC模式強調數據和視圖分離, 將數據展?和數據處理分開, 通過控制器對兩者進?組合.
三層架構強調不同維度數據處理的?內聚和低耦合, 將交互界?, 業務處理和數據庫操作的邏輯分開.
?度不同也就談不上互相替代了,在?常的開發中可以經常看到兩種共存的情況,?如我們設計模型層的時候往往也會拆分出業務邏輯層(Service層)和數據訪問層(Dao層)。
但是?者的?的是相同的, 都是"解耦,分層,代碼復?"
軟件設計原則:?內聚低耦合
?內聚指的是:?個模塊中各個元素之間的聯系的緊密程度,如果各個元素(語句、程序段)之間的聯系程度越?,則內聚性越?,即 "?內聚"。
低耦合指的是:軟件中各個層、模塊之間的依賴關聯程序越低越好。修改?處代碼, 其他模塊的代碼改動越少越好
![]()
?內聚低耦合?盾嗎?
不?盾, ?內聚指的是?個模塊中各個元素之間的聯系的緊密程度, 低耦合指的是各個模塊之間的緊 密程度
這就好??個企業, 包含很多部?, 各個部?之間的關聯關系要盡可能的?, ?個部?發?問題, 要盡可能對降低對其他部?的影響, 就是耦合. 但是部?內部員?關系要盡量緊密, 遇到問題?起解決,克服. 這叫做內聚.
?如鄰?鄰居, 樓上漏?, 樓下遭殃, 就是耦合. 家庭?個成員?病, 其他成員幫忙照顧, 就叫內聚.
?個家庭內部的關系越緊密越好, ?個家庭盡可能少的影響另?個家庭, 就是低耦合.
應?分層的好處
降低層與層之間的依賴, 結構更加的明確, 利于各層邏輯的復?
開發?員可以只關注整個結構中的其中某?層, 極?地降低了維護成本和維護時間
可以很容易的?新的實現來替換原有層次的實現
有利于標準化
企業規范
類名使??駝峰?格,但以下情形例外:DO/BO/DTO/VO/AO
?法名、參數名、成員變量、局部變量統?使??駝峰?格
包名統?使??寫,點分隔符之間有且僅有?個?然語義的英語單詞.
常?命名命名?格介紹
?駝峰: 所有單詞?字?都需要?寫, ?叫帕斯卡命名法, ?如: UserController?駝峰: 除了第?個單詞,其他單詞?字??寫,?如: userController
蛇形: ?下劃線(_)作?單詞間的分隔符, ?般?寫, ?叫下劃線命名法, ?如: user_controller
串形: ?短橫線(-)作?單詞間的分隔符, ?叫脊柱命名法, ?如: user-controller
總結
學習Spring MVC, 其實就是學習各種Web開發需要?的到注解
@RequestMapping: 路由映射
@RequestParam: 后端參數重命名
@RequestBody: 接收JSON類型的參數
@PathVariable: 接收路徑參數
@RequestPart: 上傳?件
@ResponseBody: 返回數據
@CookieValue: 從Cookie中獲取值
@SessionAttribute: 從Session中獲取值
@RequestHeader: 從Header中獲取值
@Controller: 定義?個控制器, Spring 框架啟動時加載, 把這個對象交給Spring管理. 默認返回
視圖.
@RestController: @ResponseBody + @Controller 返回數據
Cookie 和Session都是會話機制, Cookie是客?端機制, Session是服務端機制. ?者通過SessionId
來關聯. Spring MVC內置HttpServletRequest, HttpServletResponse兩個對象. 需要使?時, 直接在
?法中添加對應參數即可, Cookie和Session可以從HttpServletRequest中來獲取, 也可以直接使?
HttpServletResponse設置Http響應狀態碼.