最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringWebMVC的常用注解及應用分層架構詳解

 更新時間:2024年05月04日 08:59:26   作者:從零開始的-CodeNinja之路  
這篇文章主要介紹了SpringWebMVC的常用注解及應用分層架構,SpringWebMVC是基于ServletAPI構建的原始Web框架,從?開始就包含在Spring框架中,感興趣的朋友可以參考下

一、什么是Spring Web MVC

SpringWebMVC是基于ServletAPI構建的原始Web框架,從?開始就包含在Spring框架中。它的正式名稱“SpringWebMVC”來?其源模塊的名稱(Spring-webmvc),但它通常被稱為)SpringMVC).

MVC是?種架構設計模式,也?種思想,?SpringMVC是對MVC思想的具體實現(xiàn).除此之外,SpringMVC還是?個Web框架.

總結來說,SpringMVC是?個實現(xiàn)了MVC模式的Web框架

MVC的定義

MVC是ModelViewController的縮寫,它是軟件?程中的?種軟件架構設計模式,它把軟件系統(tǒng)分為模型、視圖和控制器三個基本部分

  • View(視圖)指在應?程序中專??來與瀏覽器進?交互,展?數(shù)據(jù)的資源.
  • Model(模型)是應?程序的主體部分,?來處理程序中數(shù)據(jù)邏輯的部分.
  • Controller(控制器)可以理解為?個分發(fā)器,?來決定對于視圖發(fā)來的請求,需要?哪?個模型來處理,以及處理完后需要跳回到哪?個視圖。即?來連接視圖和模型

二、Spring MVC中常用注解的使用

2.1@RequestMapping:地址映射

@RequestMapping既可修飾類,也可以修飾?法,當修飾類和?法時,訪問的地址是類路徑+?法路徑.

@RequestMapping標識?個類:設置映射請求的請求路徑的初始信息

@RequestMapping標識?個?法:設置映射請求請求路徑的具體信息

@RequestMapping("/user")
@RestController
public class UserController {
	@RequestMapping("/sayHi")
	public String sayHi(){
	return "hello,Spring MVC";
	}
}

2.2@RequestBody:請求正文

RequestBody:請求正?,意思是這個注解作?在請求正?的數(shù)據(jù)綁定,請求參數(shù)必須在寫在請求正?中

@RequestMapping(value = "/m7")
public Object method7(@RequestBody Person person) {
	return person.toString();
}

2.3@PathVariable:路徑變量

pathvariable:路徑變量

和字?表達的意思?樣,這個注解主要作?在請求URL路徑上的數(shù)據(jù)綁定

默認傳遞參數(shù)寫在URL上,SpringMVC就可以獲取到

后端實現(xiàn)代碼:

@RequestMapping("/m8/{id}/{name}")
public String method8(@PathVariable Integer id, @PathVariable("name") StringuserName){
		return "解析參數(shù)id:"+id+",name:"+userName;
}

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

如果?法參數(shù)名稱和需要綁定的URL中的變量名稱不?致時,需要@PathVariable的屬性value賦值,如上述例?中的userName變量

2.4@RequestPart:上傳文件

RequestPart主要是用于客戶端上傳文件交給服務器進行處理

后端代碼實現(xiàn):

@RequestMapping("/m9")
public String getfile(@RequestPart("file") MultipartFile file) throwsIOException {
	//獲取?件名稱
		String fileName = file.getOriginalFilename();
	//?件上傳到指定路徑
		file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));
		return "接收到?件名稱為: "+fileName;
}

2.5@RequestParam:重命名

某些特殊的情況下,前端傳遞的參數(shù)key和我們后端接收的key可以不?致,?如前端傳遞了?個time給后端,?后端是使?createtime字段來接收的,這樣就會出現(xiàn)參數(shù)接收不到的情況,如果出現(xiàn)這種情況,我們就可以使? @RequestParam 來重命名前后端的參數(shù)值

后端實現(xiàn)代碼:

@RequestMapping("/m4")
public Object method_4(@RequestParam("time") String createtime) {
		return "接收到參數(shù)createtime:" + createtime;
}

可以得出結論:

  • 使? @RequestParam 進?參數(shù)重命名時,請求參數(shù)只能和 @RequestParam 聲明的名稱?
  • 致,才能進?參數(shù)綁定和賦值.使? @RequestParam 進?參數(shù)重命名時,參數(shù)就變成了必傳參數(shù).

2.6@RestController:數(shù)據(jù)控制器

是Contronller和ResponseBody的封裝,用于返回數(shù)據(jù)同時能夠將注解內容交給Spring進行管理

@RestController = @Controller + @ResponseBody

@Controller :定義?個控制器,Spring框架啟動時加載,把這個對象交給Spring管理.

@ResponseBody :定義返回的數(shù)據(jù)格式為?視圖,返回?個text/html信息

2.7@ResponseBody:數(shù)據(jù)格式

@ResponseBody :定義返回的數(shù)據(jù)格式為?視圖,返回?個text/html信息

@ResponseBody
public class IndexController {
	@RequestMapping("/index")
		public Object index(){
		return "/index.html";
	}
}

@ResponseBody 既是類注解,?是?法注解

如果作?在類上,表?該類的所有?法,返回的都是數(shù)據(jù),如果作?在?法上,表?該?法返回的是數(shù)據(jù).

也就是說:在類上添加 @ResponseBody 就相當于在所有的?法上添加了 @ResponseBody 注解.

同樣,如果類上有 @RestController 注解時:表?所有的?法上添加了 @ResponseBody 注解,也就是當前類下所有的?法返回值做為響應數(shù)據(jù)

設置狀態(tài)碼

SpringMVC會根據(jù)我們?法的返回結果?動設置響應狀態(tài)碼,程序員也可以?動指定狀態(tài)碼

通過SpringMVC的內置對象HttpServletResponse提供的?法來進?設置

	@ResponseBody
	public String setStatus(HttpServletResponse response) {
		response.setStatus(401);
		return "設置狀態(tài)碼成功";
	}

2.8@CookieValue:獲取Cookie

Cook是用戶客戶端用于保存用戶的基本信息,以便于用戶在下一次登錄時可以直接進入

@RequestMapping("/getCookie")
public String cookie(@CookieValue("bite") String bite) {
	return "bite:" + bite;
}

2.9@SessionAttribute:獲取Session

Session是服務器為了保存??信息?創(chuàng)建的?個特殊的對象

Session的本質就是?個"哈希表",存儲了?些鍵值對結構.Key就是SessionID,Value就是??信息(??信息可以根據(jù)需求靈活設計).

SessionId是由服務器?成的?個"唯?性字符串",從Session機制的?度來看,這個唯?性字符串稱為)SessionId).但是站在整個登錄流程中看待,也可以把這個唯?性字符串稱為)token).

  • 當??登陸的時候,服務器在Session中新增?個新記錄,并把sessionId返回給客?端.(通過HTTP響應中的Set-Cookie字段返回).
  • 客?端后續(xù)再給服務器發(fā)送請求的時候,需要在請求中帶上sessionId.(通過HTTP請求中的Cookie字段帶上).
  • 服務器收到請求之后,根據(jù)請求中的sessionId在Session信息中獲取到對應的??信息,再進?后續(xù)操作.找不到則重新創(chuàng)建Session,并把SessionID返回
@RequestMapping("/getSess2")
public String sess2(@SessionAttribute(value = "username",required = false)String username) {
		return "username:"+username;
}

Cookie和Session的區(qū)別

  • Cookie是客?端保存??信息的?種機制.Session是服務器端保存??信息的?種機制.
  • Cookie和Session之間主要是通過SessionId關聯(lián)起來的,SessionId是Cookie和Session之間的

橋梁

  • Cookie和Session經常會在?起配合使?.但是不是必須配合.
  • 完全可以?Cookie來保存?些數(shù)據(jù)在客?端.這些數(shù)據(jù)不?定是???份信息,也不?定是

SessionId

  • Session中的sessionId也不需要?得通過Cookie/Set-Cookie傳遞,?如通過URL傳遞.

2.10@Data:類注解

Lombok是?個Java?具庫,通過添加注解的?式,簡化Java的開發(fā)其中@Data 注解會幫助我們?動?些?法,包含getter/setter,equals,toString等

Lombok的作?如下圖所?:

如果覺得@Data?較粗暴(?成?法太多),lombok也提供了?些更精細粒度的注解

注解作?
@Getter?動添加getter?法
@Setter?動添加setter?法
@ToString?動添加toString?法
@EqualsAndHashCode?動添加equals和hashCode?法
@NoArgsConstructor?動添加?參構造?法
@AllArgsConstructor?動添加全屬性構造?法,順序按照屬性的定義順序
@NonNull屬性不能為null
@RequiredArgsConstructor?動添加必需屬性的構造?法,final+@NonNull的屬性為必需

@Data=@Getter+@Setter+@ToString+@EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor

因此可以說明在創(chuàng)建類對象時可以通過引入lambok工具包中的@Data注解,可以自動為我們添加其很多常用的賦值方法

三、應用分層-三層架構

?前現(xiàn)在更主流的開發(fā)?式是"前后端分離"的?式,后端開發(fā)?程師不再需要關注前端的實現(xiàn),所以對

于Java后端開發(fā)者,?有了?種新的分層架構:把整體架構分為表現(xiàn)層、業(yè)務邏輯層和數(shù)據(jù)層.這種分層

?式也稱之為"三層架構".

  • 表現(xiàn)層:就是展?數(shù)據(jù)結果和接受??指令的,是最靠近??的?層;
  • 業(yè)務邏輯層:負責處理業(yè)務邏輯,??有復雜業(yè)務的具體實現(xiàn);
  • 數(shù)據(jù)層:負責存儲和管理與應?程序相關的數(shù)據(jù)可以看到,咱們前?的代碼,并不符合這種設計思想,?是所有的代碼堆砌在?起

按照上?的層次劃分,SpringMVC站在后端開發(fā)?員的?度上,也進?了?持,

  • 請求處理、響應數(shù)據(jù):負責,接收??的請求,給??響應數(shù)據(jù).
  • 邏輯處理:負責業(yè)務邏輯處理的代碼.
  • 數(shù)據(jù)訪問:負責業(yè)務數(shù)據(jù)的維護操作,包括增、刪、改、查等操作

  • Controller:控制層。接收前端發(fā)送的請求,對請求進?處理,并響應數(shù)據(jù)。
  • Service:業(yè)務邏輯層。處理具體的業(yè)務邏輯。
  • Dao:數(shù)據(jù)訪問層,也稱為持久層。負責數(shù)據(jù)訪問操作,包括數(shù)據(jù)的增、刪、改、查

MVC和三層架構的區(qū)別和聯(lián)系

關于?者的關系,?直存在不同的觀點.有?認為三層架構是MVC模式的?種實現(xiàn),也有?認為MVC是三層架構的替代?案,等等各種說法都有.根本原因是?家站在不同的?度來看待這個問題的.

JavaEE部分的學習重在"實踐",?家根據(jù)??的理解,能夠?圓其說,說出??的觀點即可,也不建議?家去背書.

從概念上來講,?者都是軟件?程領域中的架構模式.

MVC架構模式由三部分組成,分別是:模型(Model),視圖(View)和控制器(Controller).

三層架構將業(yè)務應?劃分為:表現(xiàn)層,業(yè)務邏輯層,數(shù)據(jù)訪問層.

MVC中,視圖和控制器合起來對應三層架構中的表現(xiàn)層.模型對應三層架構中的業(yè)務邏輯層,數(shù)據(jù)層,以及實體類

?者其實是從不同?度對軟件?程進?了抽象.

MVC模式強調數(shù)據(jù)和視圖分離,將數(shù)據(jù)展?和數(shù)據(jù)處理分開,通過控制器對兩者進?組合.

三層架構強調不同維度數(shù)據(jù)處理的?內聚和低耦合,將交互界?,業(yè)務處理和數(shù)據(jù)庫操作的邏輯分開.

?度不同也就談不上互相替代了,在?常的開發(fā)中可以經??吹絻煞N共存的情況,?如我們設計模型層的時候往往也會拆分出業(yè)務邏輯層(Service層)和數(shù)據(jù)訪問層(Dao層)

四、總結

學習SpringMVC,其實就是學習各種Web開發(fā)需要?的到注解

  • @RequestMapping:路由映射
  • @RequestParam:后端參數(shù)重命名
  • @RequestBody:接收JSON類型的參數(shù)
  • @PathVariable:接收路徑參數(shù)
  • @RequestPart:上傳?件
  • @ResponseBody:返回數(shù)據(jù)
  • @CookieValue:從Cookie中獲取值
  • @SessionAttribute:從Session中獲取值
  • @RequestHeader:從Header中獲取值
  • @Controller:定義?個控制器,Spring框架啟動時加載,把這個對象交給Spring管理.默認返回視圖
  • @RestController:@ResponseBody+@Controller返回數(shù)據(jù)

Cookie和Session都是會話機制,Cookie是客?端機制,Session是服務端機制.?者通過SessionId來關聯(lián).SpringMVC內置HttpServletRequest,HttpServletResponse兩個對象.需要使?時,直接在?法中添加對應參數(shù)即可,Cookie和Session可以從HttpServletRequest中來獲取,也可以直接使?HttpServletResponse設置Http響應狀態(tài)碼.

以上就是SpringWebMVC的常用注解及應用分層架構詳解的詳細內容,更多關于SpringWebMVC注解與架構的資料請關注腳本之家其它相關文章!

相關文章

  • SpringCloud中的OpenFeign調用解讀

    SpringCloud中的OpenFeign調用解讀

    OpenFeign是一個顯示聲明式的WebService客戶端,使用OpenFeign能讓編寫Web Service客戶端更加簡單OpenFeign的設計宗旨式簡化Java Http客戶端的開發(fā),本文給大家介紹SpringCloud之OpenFeign調用解讀,感興趣的朋友一起看看吧
    2023-11-11
  • springboot 使用自定義的aspect的示例代碼

    springboot 使用自定義的aspect的示例代碼

    這篇文章主要介紹了springboot 使用自定義的aspect的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Spring?異步接口返回結果的四種方式

    Spring?異步接口返回結果的四種方式

    這篇文章主要介紹了Spring?異步接口返回結果的四種方式,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-08-08
  • 基于Java信號量解決死鎖過程解析

    基于Java信號量解決死鎖過程解析

    這篇文章主要介紹了基于Java信號量解決死鎖過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • mybatis的Interceptor機制

    mybatis的Interceptor機制

    這篇文章主要為大家介紹了mybatis的Interceptor機制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Netty啟動流程注冊多路復用源碼解析

    Netty啟動流程注冊多路復用源碼解析

    這篇文章主要介紹了Netty啟動流程注冊多路復用源碼分析,繼續(xù)分析channel是如何注冊到selector中的,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • Spring的@Value如何從Nacos配置中心獲取值并自動刷新

    Spring的@Value如何從Nacos配置中心獲取值并自動刷新

    這篇文章主要介紹了Spring的@Value如何從Nacos配置中心獲取值并自動刷新,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • JAVA序列化和反序列化的底層實現(xiàn)原理解析

    JAVA序列化和反序列化的底層實現(xiàn)原理解析

    這篇文章主要介紹了JAVA序列化和反序列化的底層實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 淺析如何利用Spring AI構建一個簡單的問答系統(tǒng)

    淺析如何利用Spring AI構建一個簡單的問答系統(tǒng)

    Spring AI是Spring生態(tài)系統(tǒng)的最新成員,旨在簡化AI服務與Spring應用的集成過程,本文小編就來和大家簡單介紹一下如何利用Spring AI構建一個簡單的問答系統(tǒng)吧
    2025-05-05
  • 使用Spring?Batch實現(xiàn)大數(shù)據(jù)處理的操作方法

    使用Spring?Batch實現(xiàn)大數(shù)據(jù)處理的操作方法

    通過使用Spring?Batch,我們可以高效地處理大規(guī)模數(shù)據(jù),本文介紹了如何配置和實現(xiàn)一個基本的Spring?Batch作業(yè),包括讀取數(shù)據(jù)、處理數(shù)據(jù)和寫入數(shù)據(jù)的全過程,感興趣的朋友跟隨小編一起看看吧
    2024-07-07

最新評論

西和县| 凤凰县| 仁化县| 沿河| 思南县| 仙游县| 尚志市| 石柱| 柳江县| 鹤庆县| 克什克腾旗| 八宿县| 成安县| 永顺县| 德州市| 横山县| 黄浦区| 洞头县| 永春县| 新闻| 彩票| 弋阳县| 大悟县| 榆社县| 江山市| 古交市| 保靖县| 永福县| 尖扎县| 大石桥市| 固安县| 武冈市| 汾阳市| 手游| 老河口市| 玉田县| 泾川县| 苍山县| 寿光市| 石林| 佛山市|