Spring MVC數據綁定和響應——簡單數據綁定(三)POJO綁定

一、POJO數據綁定的使用場景

????????在使用簡單數據類型綁定時,可以很容易的根據具體需求來定義方法中的形參類型和個數,然而在實際應用中,客戶端請求可能會傳遞多個不同類型的參數數據,如果還使用簡單數據類型進行綁定,那么就需要手動編寫多個不同類型的參數,這種操作顯然比較繁瑣。為解決這個問題,可以使用POJO類型進行數據綁定。

二、POJO數據綁定的概念

????????POJO類型的數據綁定就是將所有關聯的請求參數封裝在一個POJO中,然后在方法中直接使用該POJO作為形參來完成數據綁定。

????????下面通過用戶注冊案例演示POJO的數據綁定,該案例要求表單提交的數據綁定在處理器User類型的形參中,案例具體實現步驟如下所示。

1、創建一個User類用于封裝用戶信息。

public class User {private String username;        //用戶名private String password;        //用戶密碼public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

2、在UserController.java類中,定義registerUser( )方法用于接收用戶注冊信息。

// 接收表單用戶信息
@RequestMapping("/registerUser")
public void registerUser(User user) {String username = user.getUsername();String password = user.getPassword(); 	System.out.println("username="+username+",password="+password);
}

3、創建register.jsp文件,在register.jsp中編寫用戶注冊表單。?

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注冊</title></head>
<body><form action="${pageContext.request.contextPath}/registerUser" method="post">用戶名:<input type="text" name="username" /><br />密&nbsp;&nbsp;&nbsp;碼:<input type="password" name="password" /><br />
<input type="submit" value="注冊"/></form></body>	
</html>

三、POJO綁定時參數名稱問題

????????在POJO類型數據綁定時,客戶端請求的參數名稱(本例中指form表單內各元素name的屬性值)必須與要綁定的POJO類中的屬性名稱保持一致。這樣客戶端發送請求時,請求數據才會自動綁定到處理器形參POJO對象中,否則處理器參數接收的值為null。

4、啟動chapter12項目,在瀏覽器中訪問register.jsp頁面,訪問地址為http://localhost:8080/chapter12/register.jsp。

5、在register.jsp所示頁面的表單中,分別填寫注冊的用戶名為“enjoy”,密碼為“123”,然后單擊“注冊”按鈕即可完成注冊數據的提交。當單擊“注冊”按鈕后,控制臺打印信息如圖所示。?

username=enjoy,password=123

????????從圖中可以看出,程序成功打印出了用戶名和密碼。這表明registerUser()方法獲取到了客戶端請求中的參數username和參數password的值,并將username和password的值分別賦給了getUserNameAndId( )方法中user形參的username屬性和password屬性,實現了POJO數據綁定。

(四)解決請求參數中的中文亂碼問題

????????1、在客戶端請求中,難免會有中文信息傳遞,例如,在register.jsp中的用戶名輸入框中輸入用戶名“享受請求時,雖然registerUser( )方法可以獲取到user的屬性值,但是在控制臺中打印的信息卻出現了亂碼,控制臺打印亂碼信息

????????2、為了防止客戶端傳入的中文數據出現亂碼,可以使用Spring提供的編碼過濾器來統一編碼。要使用編碼過濾器,只需要在web.xml中添加如下代碼

<filter>	<filter-name>CharacterEncodingFilter</filter-name>	
<filter-class> org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter>
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>	</filter-mapping>

????????上述代碼中,在<filter>元素中,首先使用<fillter-class>元素配置了編碼過濾器類org.springframework.web.filter.CharacterEncodingFilter,然后使用<init-param>元素設置統一的編碼為UTF-8。最后配置<filter-mapping>元素,攔截前端頁面中的所有請求,并交由名稱為CharacterEncodingFilter的編碼過濾器類進行處理,將所有的請求信息內容以UTF-8的編碼格式進行解析

????????3、配置完成后,再次在注冊頁面中輸入中文用戶名“黑馬以及密碼“123”,此時控制臺正確打印中文信息,如圖所示

username=享受,password=123

????????從圖中所示的打印信息可以看出,服務器端正確獲取中文數據,這說明編碼過濾器配置成功。

????????以上可以解決post請求亂碼問題,對于get請求中文參數出現亂碼,可以在使用參數之前重新編碼,如String username = new String(user.getUsername().getBytes(“ISO8859-1”),“UTF-8”);,其中ISO8859-1Tomcat默認編碼,需要將Tomcat編碼后的內容再按UTF-8編碼

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

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

相關文章

adb shell執行定時2小時命令

在Android設備上使用adb shell來執行一個定時2小時后運行的命令并不直接支持&#xff0c;因為adb shell是即時執行shell命令的工具&#xff0c;不支持內置的定時任務功能。但是&#xff0c;你可以通過幾種方法來實現類似的功能&#xff1a; 方法一&#xff1a;使用sleep命令 …

dbeaver數據庫鏈接工具

1、下載dbeaver 一個綠色版一個安裝版&#xff0c;官網開源版 2、安裝 3、可以導入之前navicat的鏈接 導入 選擇navicat 反編譯密碼的&#xff1a;https://tool.lu/coderunner navicat 版本15的密碼解密&#xff1a;https://www.iatodo.com/navicatpw

css動畫自定義動畫間隔時間

function playAnimation(element) {var animationName rubberBand;var duration 2000; // 動畫持續時間&#xff0c;單位為毫秒element.style.animation ${animationName} 1s ease;element.addEventListener(animationend, function() {// 動畫結束后重置樣式&#xff0c;以…

服務運營 | MS文章精選:線上點單,當真免排隊?餐飲零售與醫療場景中的全渠道運營

編者按&#xff1a; 小A走進了一家奶茶店&#xff0c;準備向店員點單&#xff0c;但卻在屏幕上看到還有98杯奶茶待制作&#xff08;因為線上訂單突然暴增&#xff09;。因此&#xff0c;小A不滿地嘟囔著離開了奶茶店。這個例子展示了線上渠道可能會對線下渠道造成一些負面影響…

使用AES,前端加密,后端解密,spring工具類了

學習python的時候&#xff0c;看到很多會對參數進行加密&#xff0c;于是好奇心驅使下&#xff0c;讓我去了解了下AES加密如何在java中實現。 首先 npm install crypto-js 然后在你的方法中&#xff0c;給你們前端源碼看看&#xff0c;因為我用的ruoyi框架做的實驗&#xff…

四川音盛佳云電子商務有限公司抖音電商的先行者

在當今數字時代&#xff0c;電商行業風起云涌&#xff0c;各大平臺競相爭奪市場份額。而在這其中&#xff0c;四川音盛佳云電子商務有限公司以其獨特的抖音電商服務模式&#xff0c;悄然崛起&#xff0c;成為了行業中的一股不可忽視的力量。今天&#xff0c;就讓我們一起走進音…

【GD32F303紅楓派使用手冊】第二十六節 EXMC-液晶驅動實驗

26.1 實驗內容 通過本實驗主要學習以下內容&#xff1a; LCD顯示原理 EXMC NOR/SRAM模式時序和8080并口時序 LCD顯示控制 26.2 實驗原理 使用MCU的EXMC外設實現8080并口時序&#xff0c;和TFT-LCD控制器進行通信&#xff0c;控制LCD顯示圖片、字符、色塊等。 26.2.1 TFT…

圖像超分辨率重建

一、什么是圖像超分辨 圖像超分辨是一種技術&#xff0c;旨在通過硬件或軟件的方法提高原有圖像的分辨率。這一過程涉及從一系列低分辨率的圖像中獲取一幅高分辨率的圖像&#xff0c;實現了時間分辨率向空間分辨率的轉換。超分辨率重建的核心思想是利用多幀圖像序列的時間帶寬來…

計算機畢業設計Thinkphp/Laravel學生考勤管理系統zyoqy

管理員登錄學生考勤管理系統后&#xff0c;可以對首頁、個人中心、公告信息管理、年級管理、專業管理、班級管理、學生管理、教師管理、課程信息管理、學生選課管理、課程簽到管理、請假申請管理、銷假申請管理等功能進行相應操作&#xff0c;如圖5-2所示。學生登錄進入學生考勤…

金蝶云蒼穹考試題目大全

前言 受不了某些地方看個答案還要收費&#xff0c;總結多份試卷 題目有重復&#xff0c;關鍵字檢索即可 試卷一 金蝶云蒼穹考試題目大全 單選題 開發知識錯題反饋1.0分 1.關于編碼規則的適用范圍說法錯誤的是 A.單據沒有設置主業務組織的情況下&#xff0c;則校驗用戶當前登…

【Spine學習16】之 人物面部綁定

1、創建頭部骨骼 一根頭骨 以頭骨為父結點創建一個面部控制器face-holder 2、創建頭發和face面部控制結點的變換約束 左右頭發的約束指向為face結點 3、設定后發的變換約束&#xff0c;約束指向為face結點&#xff0c;反方向移動 設置參數為-100 同理&#xff0c;耳朵也依…

C# 中的 App.manifest 文件:優化應用程序配置與權限管理

前言 在開發 C# 應用程序時&#xff0c;可能會忽略一個重要的文件——App.manifest。這個文件看似不起眼&#xff0c;卻在應用程序的運行和用戶體驗上扮演著關鍵角色。了解和正確配置 App.manifest 文件&#xff0c;不僅可以確保應用程序在不同操作系統上的兼容性&#xff0c;…

解決uniapp,textarea拉起頁面被頂起和鍵盤被輸入框遮擋的問題。

1&#xff1a;Android、ios 同時解決&#xff1b; 2&#xff1a;我們在開發的時候會發現textarea或者input拉起鍵盤的時候整個頁面被頂起了&#xff0c;header也被頂沒了&#xff1b;官方給了:adjustPositionfalse屬性&#xff0c;設置完之后頁面就不會被頂起&#xff0c;但是…

談談SQL優化

SQL優化是數據庫性能優化中的關鍵環節&#xff0c;旨在提高查詢執行的效率和響應速度。下面是一些常見的SQL優化技巧和策略&#xff0c;涵蓋索引、查詢設計、表結構設計等方面&#xff1a; 1. 索引優化 創建索引&#xff1a;為常用查詢的過濾條件&#xff08;WHERE 子句&…

了解json

一.什么是json 1.什么是json是一種輕量級的數據交互&#xff0c;可以按照指定的json格式去組織和封裝數據 2.json本質上是一個帶有特定格式的字符串 二.json主要功能&#xff1a;json就是一種在各個編程語言中流通的數據格式&#xff0c;負責不同語言中的數據傳遞和交互&…

【Python時序預測系列】基于CNN+Bi-LSTM實現單變量時間序列預測(案例+源碼)

這是我的第309篇原創文章。 一、引言 基于CNN&#xff08;卷積神經網絡&#xff09;和Bi-LSTM&#xff08;雙向長短期記憶網絡&#xff09;的單變量時間序列預測是一種結合空間特征提取和時間依賴建模的方法。以下是一個基于Python和TensorFlow/Keras實現的示例&#xff0c;展…

C++ 高頻面試題

C 初級面試題及其詳細解答 1. 解釋 C 中的基本數據類型。 解答&#xff1a; C 提供了幾種基本數據類型&#xff0c;包括&#xff1a; int&#xff1a;整型&#xff0c;用于存儲整數。float 和 double&#xff1a;浮點型&#xff0c;用于存儲小數。char&#xff1a;字符型&am…

Android 強制使用移動網絡訪問接口

Android 強制使用移動網絡訪問接口_安卓連接wifi強制使用移動數據-CSDN博客 Android應用層實現恢復出廠設置功能_android7 intent 打開恢復出廠設置-CSDN博客

YOLOv8改進 | 主干網絡| 可變形卷積網絡C2f_DCN【CVPR2017】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本專欄所有程序均經過測試&#xff0c;可成功執行&#x1f4a1;&#x1f4a1;&#x1f4a1; 專欄目錄&#xff1a;《YOLOv8改進有效漲點》專欄介紹 & 專欄目錄 | 目前已有40篇內容&#xff0c;內含各種Head檢測頭、損失函數Loss、B…

java SQL server 多實例的情況

而對于java&#xff0c;對付多個數據庫實例就有些要注意的了&#xff1a; 首先&#xff0c;同樣連接字符串上加上“\實例名”&#xff1a; jdbc:sqlserver://127.0.0.1\\mssqlserver2008;DatabaseNameLPT; 此處應去掉端口1433。因為連接數據庫自命名實例的url中沒有端口號1433…