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

java?SpringBootWeb請(qǐng)求響應(yīng)舉例詳解

 更新時(shí)間:2024年05月09日 10:44:30   作者:0cfjg0  
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說(shuō)是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開發(fā)的腳手架,這篇文章主要給大家介紹了關(guān)于java?SpringBootWeb請(qǐng)求響應(yīng)的相關(guān)資料,需要的朋友可以參考下

Servlet

用java編寫的服務(wù)器端程序

客戶端發(fā)送請(qǐng)求至服務(wù)器

服務(wù)器啟動(dòng)并調(diào)用Servlet,Servlet根據(jù)客戶端請(qǐng)求生成響應(yīng)內(nèi)容并將其傳給服務(wù)器

服務(wù)器將響應(yīng)返回給客戶端

javaweb的工作原理

在SpringBoot進(jìn)行web程序開發(fā)時(shí),內(nèi)置了一個(gè)核心的Servlet程序DispatcherServlet,稱之為核心控制器.

DispatcherServlet負(fù)責(zé)接收頁(yè)面發(fā)送的請(qǐng)求,根據(jù)資源鏈接執(zhí)行的規(guī)則,將請(qǐng)求再分發(fā)給部署在tomcat中的請(qǐng)求處理器Controller,請(qǐng)求處理器處理完請(qǐng)求之后,最終再由DispatcherServlet給瀏覽器響應(yīng)數(shù)據(jù).

瀏覽器發(fā)送請(qǐng)求到后端服務(wù)器tomcat后,tomcat會(huì)負(fù)責(zé)解析這些請(qǐng)求數(shù)據(jù),將解析后數(shù)據(jù)傳遞到Servlet程序的HttpServletRequest對(duì)象,意味著HttpServletRequest對(duì)象可以獲取到請(qǐng)求數(shù)據(jù).同時(shí)傳遞了一個(gè)HttpServletResponse對(duì)象,來(lái)給瀏覽器設(shè)置響應(yīng)數(shù)據(jù).

請(qǐng)求:瀏覽器->HTTP->tomcat(內(nèi)置servlet解析)->request對(duì)象->數(shù)據(jù)

響應(yīng):數(shù)據(jù)->response對(duì)象->servlet解析->HTTP->瀏覽器

請(qǐng)求

接收頁(yè)面?zhèn)鬟f來(lái)的請(qǐng)求數(shù)據(jù)

后端接收前端傳遞的數(shù)據(jù)

底層依賴于getset方法進(jìn)行取值(反射)

Postman

一款功能強(qiáng)大的網(wǎng)頁(yè)調(diào)試和發(fā)送網(wǎng)頁(yè)HTTP請(qǐng)求的Chrome插件

用于接口測(cè)試

接口測(cè)試:模擬前端發(fā)送請(qǐng)求,檢驗(yàn)數(shù)據(jù)傳輸?shù)恼_性

界面功能如下所示

后端資源鏈接不能重復(fù)

簡(jiǎn)單參數(shù)

通過(guò)Servlet中提供的API HttpServletRequest可以獲取請(qǐng)求的相關(guān)信息

@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request){
	String name = request.getParameter("name");
	String age = request.getParameter("age");
	System.out.println(name+" : "+age);
	return "OK";
}
//request對(duì)象中包含請(qǐng)求數(shù)據(jù),可以直接通過(guò)getParameter()方法進(jìn)行獲取

使用SpringBoot方式

在SpringBoot環(huán)境中,對(duì)原始的API進(jìn)行了封裝,接收參數(shù)形式更加簡(jiǎn)單.

可以直接定義同名參數(shù)接收數(shù)據(jù).

@RequestMapping("/simpleParam")
	public String simpleParam(String name , Integer age ){
	System.out.println(name+" : "+age);
	return "OK";
}

使用postman進(jìn)行測(cè)試

快速提交帶參數(shù)的請(qǐng)求

參數(shù)名不一致

可以使用@RequestParam進(jìn)行映射

用法如下

@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam("username") String name ,Integer age){
	System.out.println(name+" : "+age);
	return "OK";
}
//在形參前加上注解完成映射

實(shí)體參數(shù)

如果參數(shù)數(shù)量比較多,可以通過(guò)封裝到一個(gè)pojo對(duì)象的方式進(jìn)行數(shù)據(jù)封裝

參數(shù)名需與POJO屬性名一致

簡(jiǎn)單實(shí)體對(duì)象

定義一個(gè)pojo實(shí)體類

public class User {
	private String name;
	private Integer age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
 		this.age = age;
     }

 	@Override
 	public String toString() {
		return "User{" +
			"name='" + name + '\'' +
			", age=" + age +
			'}';
 	}
}

在controller方法中傳入pojo對(duì)象接受數(shù)據(jù)

@RequestMapping("/simplePojo")
public String simplePojo(User user){
	System.out.println(user);
	return "OK";
}
//pojo對(duì)象接受與其屬性名相同的參數(shù)

復(fù)雜實(shí)體對(duì)象

在實(shí)體類中的一個(gè)或多個(gè)屬性為其他實(shí)體類的對(duì)象

封裝需要遵循如下規(guī)則:

請(qǐng)求參數(shù)名與形參對(duì)象的屬性名相同,即接收屬性中的實(shí)體類對(duì)象屬性時(shí),參數(shù)需要為對(duì)象.屬格式.

數(shù)組集合參數(shù)

數(shù)組參數(shù)

請(qǐng)求參數(shù)名和形參對(duì)象屬性名相同且請(qǐng)求參數(shù)為多個(gè).

即接收多個(gè)同名參數(shù)

傳遞形式:

集合

集合參數(shù)

請(qǐng)求參數(shù)名和形參集合對(duì)象名字相同且請(qǐng)求參數(shù)為多個(gè)

使用@RequestParam綁定參數(shù)關(guān)系

@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
	System.out.println(hobby);
	return "OK";
}

傳遞形式

日期參數(shù)

對(duì)日期類型的參數(shù)進(jìn)行封裝的時(shí)候,需要通過(guò)@DateTimeFormat注解,以及其中的pattern屬性來(lái)設(shè)置日期格式

pattern屬性中制定了前端傳遞參數(shù)時(shí)的規(guī)格.

@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
	System.out.println(updateTime);
	return "OK";
}

傳遞形式

JSON參數(shù)

比較復(fù)雜的參數(shù)可以通過(guò)JSON格式進(jìn)行傳輸,JSON數(shù)據(jù)鍵名和形參對(duì)象屬性名相同,定義POJO類型形參即可接收參數(shù),controller方法需要使用@RequestBody注解

使用實(shí)體類對(duì)象接受

@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
	System.out.println(user);
	return "OK";
}

傳遞形式

路徑參數(shù)

通過(guò)請(qǐng)求URL傳遞參數(shù),使用{}進(jìn)行標(biāo)識(shí),需要使用@PathVariable注解獲取路徑參數(shù)

參數(shù)盡量使用包裝類

@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
	System.out.println(id);
	return "OK";
}

@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable
String name){
	System.out.println(id+ " : " +name);
	return "OK";
}

傳遞形式

響應(yīng)

@RestController注解

包含@Controller注解和@ResponseBody注解

Controller注解聲明類為控制器

ResponseBody將返回值解析為JSON或者XML格式

可以在controller類中響應(yīng)一個(gè)實(shí)體對(duì)象或者集合

eg:

響應(yīng)一個(gè)實(shí)體類對(duì)象

@RequestMapping("/simpleParam")
public String simpleParam( String name , Integer age){
	User user = new User();
    user.setName();
    user.setAge();
    return user;
}

響應(yīng)一個(gè)集合

@RequestMapping("/list")
public ArrayList<String> simpleParam( String name , Integer age){
	ArrayList<String> list = new ArrayList<>();
    return list;
}

無(wú)論響應(yīng)數(shù)據(jù)形式是什么,都應(yīng)該以Result形式返回(統(tǒng)一規(guī)范)

Result

{
	Integer code//1:成功 0:失敗
	String msg//響應(yīng)碼 描述字符串
	Object data//使用Object類型可以接收任意數(shù)據(jù)
    static Result success(data){
        //返回成功時(shí)的result
    }
    static Result error(msg){
        //返回失敗時(shí)的result
    }
}

綜合案例(解析xml文件傳遞到前端頁(yè)面)

前端

頁(yè)面綁定js數(shù)據(jù),數(shù)據(jù)綁定鉤子函數(shù)請(qǐng)求的數(shù)據(jù)

鉤子函數(shù):

mounted() {
       axios.get("/User").then(result=>(
            this.tableData=result.data.data
       ))
},

在組件加載階段使用axios異步請(qǐng)求數(shù)據(jù)

后端

讀取解析xml文件

String file = 
類名.class//獲取字節(jié)碼文件
.getClassLoader()//獲取類加載器
.getResource()//獲得資源
.File()//文件路徑
XmlParserUtils.parse(file)對(duì)xml進(jìn)行解析,得到一個(gè)對(duì)象集合

調(diào)用result里的success方法

返回成功對(duì)象

 return Result.success(list);

分層解耦

三層架構(gòu)

數(shù)據(jù)訪問(wèn)->邏輯訪問(wèn)->請(qǐng)求處理

數(shù)據(jù)訪問(wèn):

負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)的維護(hù)操作,包括增,刪,改,查等操作

邏輯處理:

負(fù)責(zé)業(yè)務(wù)邏輯處理的代碼

請(qǐng)求處理,響應(yīng)數(shù)據(jù):

負(fù)責(zé),接收頁(yè)面的請(qǐng)求,給頁(yè)面響應(yīng)數(shù)據(jù)

按照三個(gè)組成部分,將代碼分為三層

Controller(控制層)

接收前端發(fā)送的請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理,并響應(yīng)數(shù)據(jù)

Service(業(yè)務(wù)層)

處理具體的業(yè)務(wù)邏輯,對(duì)數(shù)據(jù)進(jìn)行處理

Dao/Mapper(數(shù)據(jù)訪問(wèn)層/持久層)

負(fù)責(zé)數(shù)據(jù)的訪問(wèn)操作,包含數(shù)據(jù)的增刪改查操作

分層解耦

內(nèi)聚:軟件中各個(gè)功能模塊內(nèi)部的功能聯(lián)系

耦合:軟件中各個(gè)層(模塊)之間的依賴關(guān)聯(lián)程度

IOC/DI技術(shù)(inversion of control/dependency injection)

IOC容器中管理的對(duì)象稱為bean

@Component(加在實(shí)現(xiàn)類上)

@Primary有多個(gè)實(shí)現(xiàn)類對(duì)象時(shí)優(yōu)先用被primary注解標(biāo)注的

把實(shí)現(xiàn)類對(duì)象直接放入IOC容器中(控制反轉(zhuǎn))

@Autowired(加在聲明對(duì)象語(yǔ)句上)

把IOC容器中的對(duì)象拿出來(lái)(依賴注入)

解決創(chuàng)建對(duì)象時(shí)產(chǎn)生的耦合

UserService a = new UserService();
//左側(cè)通過(guò)實(shí)現(xiàn)接口實(shí)現(xiàn)多態(tài)進(jìn)行解耦
//右側(cè)通過(guò)IOC/DI思想解決

Bean的聲明

把對(duì)象交給IOC容器管理,需要以如下注解代替@Component

Dao層->@Repository(自定義名字(默認(rèn)類名小寫))

Service層->@Service(自定義名字(默認(rèn)類名小寫))

Controller層->@Controller(自定義名字(默認(rèn)類名小寫))

其他類對(duì)象->@Componet(自定義名字(默認(rèn)類名小寫))

以上四大注解生效需要被組件掃描注解@ComponentScan掃描

默認(rèn)掃描范圍為引導(dǎo)類所在包以及其子包

Bean注入

@Primary優(yōu)先使用本類對(duì)象

@Qualifier(“str”)選擇名字為str的bean對(duì)象進(jìn)行使用

由SpringBoot框架提供

@Resource(name=“str”)選擇名字為str的bean對(duì)象使用

由java提供

rvice();
//左側(cè)通過(guò)實(shí)現(xiàn)接口實(shí)現(xiàn)多態(tài)進(jìn)行解耦
//右側(cè)通過(guò)IOC/DI思想解決

#### Bean的聲明

把對(duì)象交給IOC容器管理,需要以如下注解代替@Component

Dao層->@Repository(自定義名字(默認(rèn)類名小寫))

Service層->@Service(自定義名字(默認(rèn)類名小寫))

Controller層->@Controller(自定義名字(默認(rèn)類名小寫))

其他類對(duì)象->@Componet(自定義名字(默認(rèn)類名小寫))

以上四大注解生效需要被組件掃描注解@ComponentScan掃描

默認(rèn)掃描范圍為引導(dǎo)類所在包以及其子包


#### Bean注入

@Primary優(yōu)先使用本類對(duì)象

@Qualifier("str")選擇名字為str的bean對(duì)象進(jìn)行使用

由SpringBoot框架提供

@Resource(name="str")選擇名字為str的bean對(duì)象使用

由java提供

總結(jié) 

到此這篇關(guān)于java SpringBootWeb請(qǐng)求響應(yīng)的文章就介紹到這了,更多相關(guān)java SpringBootWeb請(qǐng)求響應(yīng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot集成SpringDoc接口文檔方式

    Springboot集成SpringDoc接口文檔方式

    使用Spring Boot 3.0、JDK 17和Springdoc 2.2創(chuàng)建一個(gè)簡(jiǎn)單的API文檔生成器,首先創(chuàng)建了一個(gè)Spring Boot項(xiàng)目并引入了Springdoc依賴,然后編寫了一個(gè)配置文件SpringDocConfig.java,啟動(dòng)項(xiàng)目后,可以通過(guò)訪問(wèn)http://localhost:8080/swagger-ui/index.html來(lái)查看生成的API文檔
    2026-01-01
  • 當(dāng)mybatis返回值遇見內(nèi)部類的問(wèn)題

    當(dāng)mybatis返回值遇見內(nèi)部類的問(wèn)題

    這篇文章主要介紹了當(dāng)mybatis返回值遇見內(nèi)部類的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java 使用foreach遍歷集合元素的實(shí)例

    java 使用foreach遍歷集合元素的實(shí)例

    這篇文章主要介紹了java 使用foreach遍歷集合元素的實(shí)例的相關(guān)資料,這里提供實(shí)例幫助大家理解如何使用foreach 進(jìn)行遍歷,希望能幫助到大家,
    2017-08-08
  • Maven的安裝+配置本地倉(cāng)庫(kù)路徑方式

    Maven的安裝+配置本地倉(cāng)庫(kù)路徑方式

    這篇文章主要介紹了Maven的安裝+配置本地倉(cāng)庫(kù)路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Java實(shí)現(xiàn)模擬機(jī)器人對(duì)話的示例代碼

    Java實(shí)現(xiàn)模擬機(jī)器人對(duì)話的示例代碼

    本文主要介紹了Java實(shí)現(xiàn)模擬機(jī)器人對(duì)話的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++字符串的處理詳解

    C++字符串的處理詳解

    這篇文章主要介紹了C++ string字符串類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Hibernate分頁(yè)的兩種實(shí)現(xiàn)方法

    Hibernate分頁(yè)的兩種實(shí)現(xiàn)方法

    這篇文章主要介紹了Hibernate分頁(yè)的兩種實(shí)現(xiàn)方法,結(jié)合實(shí)例形式講述了criteria分頁(yè)與hql分頁(yè)的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-03-03
  • Java項(xiàng)目開發(fā)中實(shí)現(xiàn)分頁(yè)的三種方式總結(jié)

    Java項(xiàng)目開發(fā)中實(shí)現(xiàn)分頁(yè)的三種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java項(xiàng)目開發(fā)中實(shí)現(xiàn)分頁(yè)的三種方式,通過(guò)這一篇文章可以很快的學(xué)會(huì)java分頁(yè)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • SpringBoot實(shí)現(xiàn)插件化架構(gòu)的4種方案詳解

    SpringBoot實(shí)現(xiàn)插件化架構(gòu)的4種方案詳解

    在復(fù)雜業(yè)務(wù)場(chǎng)景下,傳統(tǒng)的單體應(yīng)用架構(gòu)往往面臨著功能擴(kuò)展困難等困難,插件化架構(gòu)作為一種模塊化設(shè)計(jì)思想的延伸,能夠使系統(tǒng)具備更好的擴(kuò)展性和靈活性,下面我們來(lái)看看SpringBoot環(huán)境下實(shí)現(xiàn)插件化架構(gòu)的4種實(shí)現(xiàn)方案吧
    2025-05-05
  • Mybatis如何使用@Mapper和@MapperScan注解實(shí)現(xiàn)映射關(guān)系

    Mybatis如何使用@Mapper和@MapperScan注解實(shí)現(xiàn)映射關(guān)系

    這篇文章主要介紹了Mybatis使用@Mapper和@MapperScan注解實(shí)現(xiàn)映射關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論

德兴市| 开封县| 岳阳县| 云林县| 曲松县| 蓝山县| 安吉县| 霍城县| 康定县| 秀山| 白玉县| 陵水| 扎赉特旗| 宁城县| 益阳市| 曲阳县| 佛冈县| 河北区| SHOW| 驻马店市| 嘉义市| 吕梁市| 阿拉善右旗| 英山县| 台东县| 泽库县| 邢台市| 元朗区| 崇礼县| 平昌县| 武夷山市| 玉树县| 远安县| 武穴市| 新干县| 依安县| 建阳市| 集贤县| 青海省| 宽城| 洪江市|