欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?SpringBootWeb請求響應舉例詳解

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

Servlet

用java編寫的服務器端程序

客戶端發(fā)送請求至服務器

服務器啟動并調用Servlet,Servlet根據(jù)客戶端請求生成響應內容并將其傳給服務器

服務器將響應返回給客戶端

javaweb的工作原理

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

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

瀏覽器發(fā)送請求到后端服務器tomcat后,tomcat會負責解析這些請求數(shù)據(jù),將解析后數(shù)據(jù)傳遞到Servlet程序的HttpServletRequest對象,意味著HttpServletRequest對象可以獲取到請求數(shù)據(jù).同時傳遞了一個HttpServletResponse對象,來給瀏覽器設置響應數(shù)據(jù).

請求:瀏覽器->HTTP->tomcat(內置servlet解析)->request對象->數(shù)據(jù)

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

請求

接收頁面?zhèn)鬟f來的請求數(shù)據(jù)

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

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

Postman

一款功能強大的網頁調試和發(fā)送網頁HTTP請求的Chrome插件

用于接口測試

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

界面功能如下所示

后端資源鏈接不能重復

簡單參數(shù)

通過Servlet中提供的API HttpServletRequest可以獲取請求的相關信息

@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對象中包含請求數(shù)據(jù),可以直接通過getParameter()方法進行獲取

使用SpringBoot方式

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

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

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

使用postman進行測試

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

參數(shù)名不一致

可以使用@RequestParam進行映射

用法如下

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

實體參數(shù)

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

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

簡單實體對象

定義一個pojo實體類

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對象接受數(shù)據(jù)

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

復雜實體對象

在實體類中的一個或多個屬性為其他實體類的對象

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

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

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

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

請求參數(shù)名和形參對象屬性名相同且請求參數(shù)為多個.

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

傳遞形式:

集合

集合參數(shù)

請求參數(shù)名和形參集合對象名字相同且請求參數(shù)為多個

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

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

傳遞形式

日期參數(shù)

對日期類型的參數(shù)進行封裝的時候,需要通過@DateTimeFormat注解,以及其中的pattern屬性來設置日期格式

pattern屬性中制定了前端傳遞參數(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ù)

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

使用實體類對象接受

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

傳遞形式

路徑參數(shù)

通過請求URL傳遞參數(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";
}

傳遞形式

響應

@RestController注解

包含@Controller注解和@ResponseBody注解

Controller注解聲明類為控制器

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

可以在controller類中響應一個實體對象或者集合

eg:

響應一個實體類對象

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

響應一個集合

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

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

Result

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

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

前端

頁面綁定js數(shù)據(jù),數(shù)據(jù)綁定鉤子函數(shù)請求的數(shù)據(jù)

鉤子函數(shù):

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

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

后端

讀取解析xml文件

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

調用result里的success方法

返回成功對象

 return Result.success(list);

分層解耦

三層架構

數(shù)據(jù)訪問->邏輯訪問->請求處理

數(shù)據(jù)訪問:

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

邏輯處理:

負責業(yè)務邏輯處理的代碼

請求處理,響應數(shù)據(jù):

負責,接收頁面的請求,給頁面響應數(shù)據(jù)

按照三個組成部分,將代碼分為三層

Controller(控制層)

接收前端發(fā)送的請求,對請求進行處理,并響應數(shù)據(jù)

Service(業(yè)務層)

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

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

負責數(shù)據(jù)的訪問操作,包含數(shù)據(jù)的增刪改查操作

分層解耦

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

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

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

IOC容器中管理的對象稱為bean

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

@Primary有多個實現(xiàn)類對象時優(yōu)先用被primary注解標注的

把實現(xiàn)類對象直接放入IOC容器中(控制反轉)

@Autowired(加在聲明對象語句上)

把IOC容器中的對象拿出來(依賴注入)

解決創(chuàng)建對象時產生的耦合

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

Bean的聲明

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

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

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

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

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

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

默認掃描范圍為引導類所在包以及其子包

Bean注入

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

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

由SpringBoot框架提供

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

由java提供

rvice();
//左側通過實現(xiàn)接口實現(xiàn)多態(tài)進行解耦
//右側通過IOC/DI思想解決

#### Bean的聲明

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

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

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

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

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

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

默認掃描范圍為引導類所在包以及其子包


#### Bean注入

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

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

由SpringBoot框架提供

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

由java提供

總結 

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

相關文章

  • Javaweb中使用Servlet編寫簡單的接口案例詳解

    Javaweb中使用Servlet編寫簡單的接口案例詳解

    文章介紹了如何使用Servlet編寫一個簡單的接口來校驗用戶提交的密碼長度是否在6到12位之間,代碼分為后端部分和前端部分,給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-02-02
  • Java實現(xiàn)將Object轉成List的五種方法

    Java實現(xiàn)將Object轉成List的五種方法

    在Java中,將一個Object轉換為List是一個常見的需求,尤其是在處理集合操作和數(shù)據(jù)轉換時,本文將詳細討論如何實現(xiàn)這一轉換,并提供一些代碼示例,需要的朋友可以參考下
    2025-03-03
  • Java?Io?File文件操作基礎教程

    Java?Io?File文件操作基礎教程

    這篇文章主要介紹了Java?Io?File文件操作,在這里需要注意File只能訪問文件以及文件系統(tǒng)的元數(shù)據(jù)。如果你想讀寫文件內容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile,需要的朋友可以參考下
    2022-05-05
  • MyBatis?ofType和javaType的區(qū)別說明

    MyBatis?ofType和javaType的區(qū)別說明

    這篇文章主要介紹了MyBatis?ofType和javaType的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • mybatis?resultMap之collection聚集兩種實現(xiàn)方式

    mybatis?resultMap之collection聚集兩種實現(xiàn)方式

    本文主要介紹了mybatis?resultMap之collection聚集兩種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-09-09
  • Java代碼編譯和反編譯的那些事兒

    Java代碼編譯和反編譯的那些事兒

    這篇文章主要給大家介紹了關于Java代碼編譯和反編譯的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • Log4j關閉Spring和Hibernate日志打印方式

    Log4j關閉Spring和Hibernate日志打印方式

    這篇文章主要介紹了Log4j關閉Spring和Hibernate日志打印方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java阻塞隊列BlockingQueue詳解

    Java阻塞隊列BlockingQueue詳解

    這篇文章主要介紹了Java阻塞隊列BlockingQueue,文章通過隊列的類型展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 使用springmvc配置視圖解析器和重定向方式

    使用springmvc配置視圖解析器和重定向方式

    這篇文章主要介紹了使用springmvc配置視圖解析器和重定向方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot中配置Redis連接池的完整指南

    SpringBoot中配置Redis連接池的完整指南

    這篇文章主要為大家詳細介紹了SpringBoot中配置Redis連接池的完整指南,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04

最新評論