SpringMVC 案例

在這里插入圖片描述

文章目錄

  • 前言
  • 1. 計算器
    • 1.1 準備前端代碼
    • 1.2 測試前端代碼
    • 1.3 完成后端代碼
    • 1.4 驗證程序
  • 2. 留言板
    • 2.1 前端代碼準備
    • 2.2 測試前端代碼
    • 2.3 完成前后端交互代碼
    • 2.4 完成后端代碼
    • 2.5 案例測試
    • 2.6 完善前后端交互
    • 2.7 完善后端代碼
    • 2.8 完整功能測試
  • lombok
  • 簡單的方式添加Lombok工具
  • 3. 圖書管理系統
    • 3.1 前端代碼準備
    • 2.2 前端代碼測試
    • 2.3 登錄功能前后端交互
    • 2.4 后端登錄功能實現
    • 2.5 登錄功能測試
    • 2.6 圖書列表前后端交互
    • 2.7 獲取圖書列表后端代碼
    • 2.8 獲取圖書列表展示

前言

前面我們學習了 Spring MVC 的基礎知識,那么這篇文章我將結合前面所學的 Spring MVC 知識為大家分享計算器、留言墻、圖書管理系統的部分功能實現。

1. 計算器

這個計算器案例比較簡單,也就是簡單的用戶輸入兩個數字,我們后端給返回一個這兩個數的和就行了。

1.1 準備前端代碼

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="calc/sum" method="post"><h1>計算器</h1>數字1:<input name="num1" type="text"><br>數字2:<input name="num2" type="text"><br><input type="submit" value=" 點擊相加 "></form>
</body></html>

1.2 測試前端代碼

在這里插入圖片描述

1.3 完成后端代碼

package com.example.springdemo20231207;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/calc")
@RestController
public class CalcController {@RequestMapping("/sum")public String sum(Integer num1, Integer num2) {Integer ret = num1 + num2;return "兩數相加的結果為" + ret;}
}

1.4 驗證程序

在這里插入圖片描述
在這里插入圖片描述

2. 留言板

這里的留言板跟我們前面用 servlet 寫的表白墻是類似的,只不過我們這里是用 Spring 來實現的。

2.1 前端代碼準備

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>留言板</title><style>.container {width: 350px;height: 300px;margin: 0 auto;/* border: 1px black solid; */text-align: center;}.grey {color: grey;}.container .row {width: 350px;height: 40px;display: flex;justify-content: space-between;align-items: center;}.container .row input {width: 260px;height: 30px;}#submit {width: 350px;height: 40px;background-color: orange;color: white;border: none;margin: 10px;border-radius: 5px;font-size: 20px;}</style>
</head><body><div class="container"><h1>留言板</h1><p class="grey">輸入后點擊提交, 會將信息顯示下方空白處</p><div class="row"><span>誰:</span> <input type="text" name="" id="from"></div><div class="row"><span>對誰:</span> <input type="text" name="" id="to"></div><div class="row"><span>說什么:</span> <input type="text" name="" id="say"></div><input type="button" value="提交" id="submit" onclick="submit()"><!-- <div>A 對 B 說: hello</div> --></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>function submit(){//1. 獲取留言的內容var from = $('#from').val();var to = $('#to').val();var say = $('#say').val();if (from== '' || to == '' || say == '') {return;}//2. 構造節點var divE = "<div>"+from +"對" + to + "說:" + say+"</div>";//3. 把節點添加到頁面上    $(".container").append(divE);//4. 清空輸入框的值$('#from').val("");$('#to').val("");$('#say').val("");}</script>
</body></html>

2.2 測試前端代碼

在這里插入圖片描述

2.3 完成前后端交互代碼

	function submit(){//1. 獲取留言的內容var from = $('#from').val();var to = $('#to').val();var say = $('#say').val();if (from== '' || to == '' || say == '') {return;}$.ajax({type: "post",url: "/message/publish",data: {"from": from,"to": to,"say": say},success: function (result) {if (result) {//2. 構造節點var divE = "<div>"+from +"對" + to + "說:" + say+"</div>";//3. 把節點添加到頁面上$(".container").append(divE);//4. 清空輸入框的值$('#from').val("");$('#to').val("");$('#say').val("");}else {alert("留言錯誤");}}});

2.4 完成后端代碼

MessageInfo 類用來管理瀏覽信息,這里 @Data 注釋稍后為大家解釋。

package com.example.springdemo20231207;import lombok.Data;@Data
public class MessageInfo {private String from;private String to;private String say;
}
package com.example.springdemo20231207;import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;@RequestMapping("/message")
@RestController
public class MessageWallController {private List<MessageInfo> messageInfos = new ArrayList<>();@RequestMapping("/publish")public boolean publish(MessageInfo messageInfo) {if (!StringUtils.hasLength(messageInfo.getFrom()) || !StringUtils.hasLength(messageInfo.getTo()) || !StringUtils.hasLength(messageInfo.getSay())) {return false;}messageInfos.add(messageInfo);return true;}
}

這樣就實現了留言信息的存儲,這里為什么不使用數據庫來存儲呢?這是因為傳統的數據庫操作比較麻煩,等到后面學習了數據庫相關的框架了之后,會為大家介紹。

2.5 案例測試

在這里插入圖片描述
在這里插入圖片描述

到這里其實還沒有實現全部的功能,我們還差一個功能,就是當我們剛進來這個留言板頁面的時候,需要將之前存儲的留言信息給加載進來,所以就是剛進來這個頁面的時候就需要向我們的服務器發送一個請求來獲取信息。

2.6 完善前后端交互

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>$.ajax({type: "get",url: "/message/getList",success: function(messageInfos) {for (var messageInfo of messageInfos) {var divE = "<div>"+messageInfo.from +"對" + messageInfo.to + "說:" + messageInfo.say+"</div>";$(".container").append(divE);}}});function submit(){//1. 獲取留言的內容var from = $('#from').val();var to = $('#to').val();var say = $('#say').val();if (from== '' || to == '' || say == '') {return;}$.ajax({type: "post",url: "/message/publish",data: {"from": from,"to": to,"say": say},success: function (result) {if (result) {//2. 構造節點var divE = "<div>"+from +"對" + to + "說:" + say+"</div>";//3. 把節點添加到頁面上$(".container").append(divE);//4. 清空輸入框的值$('#from').val("");$('#to').val("");$('#say').val("");}else {alert("留言錯誤");}}});}</script>

2.7 完善后端代碼

	@RequestMapping("/getList")public List<MessageInfo> getList() {return messageInfos;}

2.8 完整功能測試

因為更改后端代碼之后需要重啟我們的項目才會生效,而因為我們的 MessageInfo 信息是存儲在 List 也就是內存當中的,所以當我們重啟程序之后,List 中的數據就會被釋放,所以為了測試新加入的功能,我們需要重新加入測試數據。

在這里插入圖片描述
在這里插入圖片描述

提交之后,我們重新進入這個頁面。

在這里插入圖片描述
重新進入這個頁面之后,他會自動將之前保存的信息給顯示出來。

lombok

前面我們的 @Data 注解的作用其實就相當于給 private 權限的屬性設置 get 和 set 方法。

Lombok是一個Java庫,它可以幫助開發人員消除Java的冗長,尤其是對于簡單的Java對象(POJO)。它通過注釋實現這一目的。例如,通過在開發環境中實現Lombok,開發人員可以節省構建諸如hashCode()和equals()這樣的方法以及以往用來分類各種accessor和mutator的大量時間。Lombok常用的注解有:

  1. @Getter:快速構建Getter方法。
  2. @Setter:快速構建Setter方法。
  3. @ToString:快速將當前對象轉換成字符串類型,便于log。
  4. @EqualsAndHashCode:快速進行相等判斷。
  5. @NonNull:判斷變量(對象)是否為空。
  6. @Data:整合了Getter、Setter、ToString、EqualsAndHashCode、RequiredArgsConstructor注解。

那么如何使用 Lombok 呢,首先就需要引入這個工具包的依賴,我們可以在 maven 倉庫引入,也可以在創建 Spring Boot 項目的時候勾選上 Lombok 選項即可。

在這里插入圖片描述
在這里插入圖片描述

Lombok 工具的更多用法。

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

簡單的方式添加Lombok工具

首先在插件中下載 Edit Starters。

在這里插入圖片描述

在 pom.xml 文件中右鍵,點擊 generate,選擇 Edit Starters。并且添加 Lombok。

在這里插入圖片描述
在這里插入圖片描述

3. 圖書管理系統

因為我們現在學的 Spring 知識無法實現一個完整的圖書管理系統,所以這篇文章只完成部分功能。

3.1 前端代碼準備

因為這個案例前端代碼比較多,所以大家可以去我的 gitee 上自行查找。https://gitee.com/lmh18696433881/this-is-my-java-ee-learning/commit/8d55ca2407429bfbb1979f0a8559fd638e05b10a

在這里插入圖片描述

2.2 前端代碼測試

在這里插入圖片描述

2.3 登錄功能前后端交互

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>function login() {$.ajax({type: "post",url: "/user/login",data: {userName: $("#userName").val(),password: $("#password").val()},success: function (result) {if (result==true) {location.href = "book_list.html";}else {alert("您輸入的用戶名或者密碼錯誤");}}});}
</script>

2.4 后端登錄功能實現

package com.example.springbook.Controller;import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("/login")public boolean login(String userName, String password, HttpSession session) {//這是為了判斷userName和password不為空且長度大于0if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {return false;}if ("zhangsan".equals(userName) && "123".equals(password)) {session.setAttribute("userName", userName);return true;}return false;}
}

2.5 登錄功能測試

在這里插入圖片描述
在這里插入圖片描述

登錄完成之后,就會展示出有哪些圖書。

2.6 圖書列表前后端交互

		getBookList();function getBookList() {$.ajax({type: "get",url: "/book/getList",success: function (books) {var finalHtml = "";for (var book of books) {//拼接htmlfinalHtml +='<tr>';finalHtml +='<td><input type="checkbox" name="selectBook" value="'+book.id+'" id="selectBook" class="book-select"></td>';finalHtml +='<td>'+book.id+'</td>';finalHtml +='<td>'+book.bookName+'</td>';finalHtml +='<td>'+book.author+'</td>';finalHtml +='<td>'+book.count+'</td>';finalHtml +='<td>'+book.price+'</td>';finalHtml +='<td>'+book.publish+'</td>';finalHtml +='<td>'+book.stateCN+'</td>';finalHtml +='<td>';finalHtml +='<div class="op">';finalHtml +='<a href="book_update.html?bookId='+book.id+'">修改</a>';finalHtml +='<a href="javascript:void(0)" onclick="deleteBook('+book.id+')">刪除</a>';finalHtml +='</div>';finalHtml +='</td>';finalHtml +='</tr>';}$("tbody").html(finalHtml);}});}

2.7 獲取圖書列表后端代碼

首先需要一個 BookInfo 類來存儲書的信息。

package com.example.springdemo20231207;import lombok.Data;import java.math.BigDecimal;@Data
public class BookInfo {private Integer id;private String bookName;private String author;private Integer count;private BigDecimal price;private String publish;private Integer state; //1可借閱 2不可借閱private String stateCN;
}

創造一些假的圖書數據BookDao。

package com.example.springdemo20231207;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class BookDao {public List<BookInfo> mockBookData() {List<BookInfo> bookInfos = new ArrayList<>();for (int i = 0; i < 15; i++) {BookInfo bookInfo = new BookInfo();bookInfo.setId(i);bookInfo.setBookName("圖書"+i);bookInfo.setAuthor("作者"+i);bookInfo.setCount(i*15 + 3);bookInfo.setPrice(new BigDecimal(new Random().nextInt(100)));bookInfo.setPublish("出版社"+i);bookInfo.setState(i%5==0?2:1);bookInfos.add(bookInfo);}return bookInfos;}
}

圖書列表操作的業務邏輯 BookService。

package com.example.springdemo20231207;import java.util.List;public class BookService {public List<BookInfo> getBookInfoList() {BookDao bookDao = new BookDao();List<BookInfo> bookInfos = bookDao.mockBookData();for (BookInfo bookInfo : bookInfos) {if (bookInfo.getState() == 1) {bookInfo.setStateCN("可借閱");}else {bookInfo.setStateCN("不可借閱");}}return bookInfos;}
}

圖書類的控制器。

package com.example.springdemo20231207;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RequestMapping("/book")
@RestController
public class BookController {@RequestMapping("/getList")public List<BookInfo> getList() {BookService bookService = new BookService();return bookService.getBookInfoList();}
}

2.8 獲取圖書列表展示

在這里插入圖片描述

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

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

相關文章

vue3使用mitt用于組件之間傳值

vue3已經沒有提供配套的事件總線bus&#xff0c;需要使用第三方庫mitt來完成vue2中bus完成的事情 1.安裝 npm install mitt2.引用 bus.js import mitt from mitt; const bus mitt(); export default bus;3.在需要使用的vue文件中導入bus import bus from ./mitt4.使用mitt…

HarmonyOS學習 第1節 DevEco Studio配置

俗話說的好&#xff0c;工欲善其事,必先利其器。我們先下載官方的開發工具DevEco Studio. 下載完成后&#xff0c;進行安裝。 雙擊DevEco Studio&#xff0c;點擊Next按照指引完成安裝 重新啟動DevEco&#xff0c;點擊 Agree 進入環境配置&#xff0c;安裝Node.js和ohpm 點擊Ne…

MQTT 協議入門:輕松上手,快速掌握核心要點

文章目錄 什么是 MQTT&#xff1f;MQTT 的工作原理MQTT 客戶端MQTT Broker發布-訂閱模式主題QoS MQTT 的工作流程開始使用 MQTT&#xff1a;快速教程準備 MQTT Broker準備 MQTT 客戶端創建 MQTT 連接通過通配符訂閱主題發布 MQTT 消息MQTT 功能演示保留消息Clean Session遺囑消…

【WPF】使用ObservableCollection解決:累積計數x與實際計數x不相同

使用觀察模式和集合 錯誤代碼 public List<IPAddress> iPAddressDevices new List<IPAddress>();public List<IPAddress> IPAddressDevices { get > iPAddressDevices; set {iPAddressDevices value;RaisePropertyChanged(nameof(IPAddressDevices));…

spring IOC介紹

spring的Ioc真是個好東西啊&#xff0c;那它到底是什么東西呢&#xff0c;控制反轉&#xff0c;到底是怎么轉的呢&#xff1f; 假設啊你現在是一個導演&#xff0c;想排部戲&#xff0c;那是不是得需要演員和舞臺(spring中的bean)&#xff0c;如果按平常的編程思維就是new 一個…

vue-baidu-map實現在地圖上選擇范圍并解決相關問題

vue-baidu-map實現在地圖上選擇范圍并解決相關問題 實現地圖上選擇不規則范圍實現功能遇到的問題1、覆蓋物多邊形怎么才能蓋住覆蓋物點2、遇到其他問題 實現地圖上選擇不規則范圍 這個功能比較簡單&#xff0c;只需要使用vue-baidu-map插件的覆蓋物多邊形功能就行了。直接看文…

Win10專業版找不到安全中心選項的解決方法

在Win10電腦中&#xff0c;安全中心功能起到很大的作用。但是&#xff0c;有用戶在Win10專業版電腦上找不到安全中心選項&#xff0c;從而影響到自己的正常使用。下面小編分享解決Win10專業版系統沒有安全中心的簡單方法&#xff0c;解決后在Win10專業版就能成功找到安全中心了…

哈希表及其基礎(java詳解)

目錄 一、哈希表基礎 二、哈希函數的設計 哈希函數的設計原則 三、java中的hashCode 基本數據類型的hashCode使用 自定義類型的hashCode使用 需要注意 四、哈希沖突的處理 鏈地址法Seperate Chaining 五、實現屬于我們自己的哈希表 六、哈希表的動態空間處理和復雜…

通過項目管理軟件監管新員工入職流程的方法與策略

項目管理軟件是什么&#xff1f;項目管理軟件都能做什么&#xff1f;是不是只有項目團隊需要啊&#xff1f;NO&#xff01;項目管理軟件乍聽其名不免讓人覺得這不過是個項目領域的專用工具。 那什么是項目呢&#xff1f;項目是為創造獨特的產品、服務或成果而進行的體系化的工…

物聯網+AI智慧工地云平臺源碼(SaaS模式)

智慧工地云平臺充分運用數字化技術&#xff0c;聚焦施工現場崗位一線&#xff0c;依托物聯網、互聯網、AI等技術&#xff0c;圍繞施工現場管理的人、機、料、法、環五大維度&#xff0c;以及施工過程管理的進度、質量、安全三大體系為基礎應用&#xff0c;實現全面高效的工程管…

stm32中滴答定時器與普通定時器的區別

1、兩者在單片機中的位置不一樣 滴答定時器在內核上&#xff0c;普通定時器在外設上。 由于位置不同&#xff0c;滴答定時器的程序可以移植到所有相同內核的芯片上&#xff0c;但普通定時器的程序卻不可以。 2、兩者的中斷優先級不一樣 滴答定時器優先級高&#xff0c;普通定…

CTF刷題記錄

刷題 我的md5臟了KFC瘋狂星期四坤坤的csgo邀請simplePHPcurl 我的md5臟了 g0at無意間發現了被打亂的flag&#xff1a;I{i?8Sms??Cd_1?T51??F_1?} 但是好像缺了不少東西&#xff0c;flag的md5值已經通過py交易得到了&#xff1a;88875458bdd87af5dd2e3c750e534741 flag…

關于微信/支付寶等平臺驗簽/簽名sign生成算法

引言 我們在日常工作中經常會遇到對接微信平臺、支付寶平臺、或者自己對外開放一個api服務&#xff0c;那么這里經常會出現一個名字&#xff1a;sgin&#xff08;簽名&#xff09;。 舉個栗子 這是微信支付統一下單接口文檔&#xff0c;最簡單的理解就是&#xff0c;服務端為…

Unirest-Java:Java發起GET、POST、PUT、DELETE、文件上傳,文件下載工具類介紹

一、簡介 Unirest-Java是一個輕量級的HTTP客戶端庫&#xff0c;用于在Java應用程序中發送HTTP請求。 它提供了簡單易用的API&#xff0c;可以方便地處理GET、POST、PUT、DELETE等HTTP方法。 Unirest-Java支持異步和同步請求&#xff0c;可以輕松地與JSON、XML等數據格式進行…

最優化方法復習——線性規劃之對偶問題

一、線性規劃對偶問題定義 原問題&#xff1a; 對偶問題&#xff1a; &#xff08;1&#xff09;若一個模型為目標求 “極大”&#xff0c;約束為“小于等于” 的不等式&#xff0c;則它的對偶模型為目標求“極小”&#xff0c;約束是“大于等于”的不等式。即“Max&#xff0…

2024年甘肅省職業院校技能大賽信息安全管理與評估三階段理論樣題一

2024年甘肅省職業院校技能大賽高職學生組電子與信息大類信息安全管理與評估賽項樣題一 第六部分 理論技能與職業素養&#xff08;100 分&#xff09; 【注意事項】 1.該部分答題時長包含在第三階段競賽時長內&#xff0c;請在臨近競賽結束前提交。 2.參賽團隊可根據自身情況…

數據庫系統概論復習資料

數據庫系統概論考試需知 一、分值分布 1、判斷題&#xff08;10分&#xff09; 1分一個 2、填空題&#xff08;20分&#xff09; 2分一個 3、選擇題&#xff08;20分&#xff09; 2分一個 4、分析題&#xff08;30分&#xff09; 第一題10分&#xff0c;第二題…

如何設置echart圖表在vue頁面屏幕比例縮放自適應問題

問題&#xff1a;頁面的echart圖表在瀏覽器縮放屏幕比例時無法隨著屏幕的比例自動改變大小 解決方式&#xff1a; 可以通過監聽窗口的 resize 事件&#xff0c;并在事件回調函數中重新調整圖表的大小。 <template><div ref"chartContainer" style"w…

Enterprise Architect 12版本使用教程

Enterprise Architect 12版本使用教程 1.下載安裝Enterprise Architect 122.Enterprise Architect原始DDL模板配置及存在的問題1.DDL Column Definition原始模板&#xff08;沒有default值&#xff1a;可忽略&#xff09;2.DDL Data Type原始模板&#xff08;timestamp等時間字…

Apollo新版本Beta自動駕駛技術沙龍參會體驗有感—百度自動駕駛開源框架

在繁忙的都市生活中&#xff0c;我們時常對未來的科技發展充滿了好奇和期待。而近日&#xff0c;我有幸參加了一場引領科技潮流的線下技術沙龍&#xff0c;主題便是探索自動駕駛的魅力——一個讓我們身臨其境感受創新、了解技術巨擘的機會。 在12月2日我有幸參加了Apollo新版本…