【后端開發】Spring MVC-計算器、用戶登錄、留言板

文章目錄

  • 前后端分離設計
    • 接口設計思路
    • 項目問題解決思路
  • 計算器
    • 需求分析
    • 接口定義
    • 前端頁面代碼
    • 服務器代碼
  • 用戶登錄
    • 需求分析
    • 接口定義
      • 用戶登錄校驗接口
      • 查詢登錄用戶接口
    • 前端頁面代碼
      • 用戶登錄校驗
      • 查詢登錄用戶
    • 服務器代碼
    • 前后端交互
  • 留言版
    • 需求分析
    • 接口定義
    • 獲取全部留言
    • 發布留言
    • 前端頁面代碼
    • 服務器代碼

前后端分離設計

前后端分析需要設計接口,接口通常由服務端定義,服務端定義之后,客戶端(前端) 進行review,雙方并行開發。

接口定義之后,不輕易改變,如果需要改變,必須要通知到每一個調用方,同步修改接口文檔接口定義,以接口文檔來呈現。
如果修改的比較少,或者之前的文檔沒有體現到這點,不想修改文檔時,可以通過聊天工具去說一下。

接口設計思路

  • 接收什么(看后端完成這個功能需要什么)
  • 返回什么(1.后端能提供什么,2,前端頁面展示需要什么)

項目問題解決思路

  • 先測試后端接口,通過postman測試后端接口沒有問題,暫時排除后端問題
  • 看日志,可以借助Debug
  • 如果覺得代碼沒問題,優先考慮緩存問題,前端緩存 ctrl+F5 強制刷新,或者清除瀏覽器緩存后端緩存(maven->clean)

計算器

需求分析

加法計算器功能,對兩個整數進?相加,需要客戶端提供參與計算的兩個數,服務端返回這兩個整數計算的結果

接口定義

  • 請求路徑:/calc/sum
  • 請求方式:GET/POST
  • 接口描述:計算兩個整數相加
  • 返回:sum
  • 參數:num1、num2
參數名類型是否必須備注
num1Integer參與計算的第?個數
num2Integer參與計算的第二個數

前端頁面代碼

     <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>

在這里插入圖片描述

服務器代碼

@RequestMapping("/calc")
@RestController
public class CalcController {@RequestMapping("/sum")public String sum(Integer num1, Integer num2) {return String.valueOf(num1 + num2);}
}

用戶登錄

需求分析

用戶輸?賬號和密碼,后端進?校驗密碼是否正確

  1. 如果不正確,前端進行用戶告知
  2. 如果正確,跳轉到首頁,首頁顯示當前登錄用戶
  3. 后續再訪問首頁,可以獲取到登錄用戶信息

對于后端開發?員,不涉及前端頁面的展示,只需要提供兩個功能

  1. 登錄頁面:通過賬號和密碼,校驗輸?的賬號密碼是否正確,并告知前端
  2. 首頁:告知前端當前登錄用戶,如果當前已有用戶登錄,返回登錄的賬號,如果沒有,返回空

接口定義

用戶登錄校驗接口

  • 請求路徑:/user/login
  • 請求方式:GET/POST
  • 接口描述:校驗賬號密碼是否正確
  • 返回:
    true //賬號密碼驗證成功
    false//賬號密碼驗證失敗
  • 參數:username、password
參數名類型是否必須備注
usernameString校驗的賬號
passwordString校驗的密碼

查詢登錄用戶接口

  • 請求路徑:/user/indexs
  • 請求方式:GET/POST
  • 接口描述:查詢當前登錄的用戶
  • 返回:
    當前登錄的用戶–username
  • 參數:無

前端頁面代碼

用戶登錄校驗

  <h1>用戶登錄</h1>用戶名:<input name="userName" type="text" id="userName"><br>密碼:<input name="password" type="password" id="password"><br><input type="button" value="登錄" onclick="login()"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>function login() {$.ajax({url:"/user/login",type:"post",data:{username:$('#userName').val(),password:$('#password').val()},//http響應成功后,返回的結果success:function(result){if(result==true){//頁面跳轉location.href = "index.html";//location.assign("index.html");}else{alert("密碼錯誤");}}})}</script>

查詢登錄用戶

	登錄人: <span id="loginUser"></span><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$.ajax({url:"/user/index",type:"get",success:function(loginName){$("#loginUser").text(loginName);}});</script>

服務器代碼

@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("login")public boolean login(String username, String password, HttpSession session) {//參數校驗
//        if (username == null || username.length() == 0 || password == null || password.length() == 0) {
//            return false;
//        }//Spring提供的參數校驗的簡化版本if (!StringUtils.hasText(username) || !StringUtils.hasText(password)) {return false;}//判斷密碼是否正確//寫equlas()方法時,最好將常量放在前面if ("admin".equals(username) && "admin".equals(password)) {//設置session信息session.setAttribute("username", username);return true;}return false;}@RequestMapping("/index")public String getUsername(@SessionAttribute("username") String username) {return username;}
}

前后端交互

通過ajax中的參數實現前后的交互,部分位置中的前后端參數的名稱必須對應。
在這里插入圖片描述
包括設置的session,在尋找對應的username時,也必須保持一致。
在這里插入圖片描述

留言版

需求分析

  1. 輸入留言信息,點擊提交,后端把數據存儲起來。
  2. 頁面展示輸入的留言板的信息

后端需要提供兩個服務

  • 提交留言:用戶輸入留?信息之后,后端需要把留言信息保存起來。
  • 展示留言:頁面展示時,需要從后端獲取到所有的留?信息。

接口定義

獲取全部留言

全部留言信息,?List來表示,可以用JSON來描述這個List數據,這里簡化描述。

  • url:/message/getList
  • param:無
  • return:[{},{},{}]

發布留言

  • url:/message/publish
  • param:from, to, say
  • return:true/false

前端頁面代碼

<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>$.ajax({url: "/message/getList",type: "get",success: function (messageInfos) {console.log("成功獲取消息列表:", messageInfos);var finalHtml = "";for (var message of messageInfos) {finalHtml += '<div>' + message.from + ' 對 ' + message.to + ' 說: ' + message.say + '</div>';}$(".container").append(finalHtml)}});function submit() {//1. 獲取留言的內容var fromQian = $('#from').val();var toQian = $('#to').val();var sayQian = $('#say').val();if (fromQian == '' || toQian == '' || sayQian == '') {return;}//發送ajax請求,這里為了更好地看清楚前后端的交互過程$.ajax({url: "/message/publish",type: "post",data: {from: fromQian,to: toQian,say: sayQian},success: function (result) {if (result) {//2. 構造節點var divE = "<div>" + fromQian + "對" + toQian + "說:" + sayQian + "</div>";//3. 把節點添加到頁面上    $(".container").append(divE);//4. 清空輸入框的值$('#from').val("");$('#to').val("");$('#say').val("");}else{alert("輸入不合法")}}});}</script>
</body>

服務器代碼

@RequestMapping("message")
@RestController
public class MessageController {private List<MessageInfo> messageInfos = new ArrayList<>();@RequestMapping("publish")public Boolean publish(MessageInfo messageInfo) {//1.參數校驗if (!StringUtils.hasLength(messageInfo.getFrom()) || !StringUtils.hasLength(messageInfo.getTo()) || !StringUtils.hasLength(messageInfo.getSay())) {return false;}//2.存儲數據,暫時存在內存中messageInfos.add(messageInfo);return true;}/** 獲取留言信息 */@RequestMapping("getList")public List<MessageInfo> getList(){return messageInfos;}
}

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

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

相關文章

在Ubuntu-22.04.5中安裝ONLYOFFICE DocSpace(協作空間)【注意:安裝失敗,謹慎參考!】

1. 通過Docker安裝 預計需要下載10G的鏡像。 &#xff08;1&#xff09;下載docspace安裝腳本 curl -fsSL https://download.onlyoffice.com/docspace/docspace-install.sh -o docspace-install.sh &#xff08;2&#xff09;修改docker compose的別名為docker-compose ali…

2025年計算機領域重大技術突破與行業動態綜述

——前沿技術重塑未來&#xff0c;開發者如何把握機遇&#xff1f; 2025年第一季度&#xff0c;全球計算機領域迎來多項里程碑式進展&#xff0c;從量子計算到人工智能&#xff0c;從芯片設計到網絡安全&#xff0c;技術革新與產業融合持續加速。本文梳理近三個月內最具影響力…

一、LLM 大語言模型初窺:起源、概念與核心原理

一、初識大模型 1.1 人工智能演進與大模型興起:從A11.0到A12.0的變遷 AI 1.0時代&#xff08;2012-2022年&#xff09; 感知智能的突破&#xff1a;以卷積神經網絡&#xff08;CNN&#xff09;為核心&#xff0c;AI在圖像識別、語音處理等感知任務中超越人類水平。例如&#…

Redis 分布式鎖+秒殺異步優化

文章目錄 問題思路setnx實現鎖誤刪問題和解決方案Redis Lua腳本問題引出解決方案 setnx實現的問題Redission快速入門redission可重入鎖原理 秒殺優化(異步優化)異步秒殺思路秒殺資格判斷Redis消息隊列 問題 比如我們兩個機器都部署了我們項目&#xff0c;這里nginx使用輪詢的方…

機器學習中的距離度量與優化方法:從曼哈頓距離到梯度下降

目錄 前言一、曼哈頓距離(Manhattan Distance)&#xff1a;二、切比雪夫距離 (Chebyshev Distance)&#xff1a;三、 閔可夫斯基距離(Minkowski Distance)&#xff1a;小結四、余弦距離(Cosine Distance)五、杰卡德距離(Jaccard Distance)六、交叉驗證方法6.1 HoldOut Cross-v…

HTML 嵌入標簽對比:小眾(<embed>、<object>) 與 <iframe> 的優缺點及使用場景和方式

需求背景 在網頁開發中&#xff0c;嵌入外部資源預覽&#xff08;如視頻、PDF、地圖或其他網頁&#xff09;是常見的需求。HTML 提供了多種標簽來實現這一功能&#xff0c;其中 <embed>、<object> 和 <iframe> 是最常用的三種。本文將對比它們的優缺點&…

未來七軸機器人會占據主流?深度解析具身智能方向當前六軸機器人和七軸機器人的區別,七軸力控機器人發展會加快嗎?

六軸機器人和七軸機器人在設計、功能和應用場景上存在明顯區別。六軸機器人是工業機器人的傳統架構&#xff0c;而七軸機器人則在多自由度和靈活性方面進行了增強。 本文將在理解這兩者的區別以及為何六軸機器人仍然是市場主流&#xff0c;從多個方面進行深入解讀六軸和七軸區…

C++基礎精講-07

文章目錄 1. const對象2. 指向對象的指針3. 對象數組4. c中const常見用法總結4.1 修飾常量4.2 修飾指針4.3 修飾函數參數4.4 修飾函數返回值4.5 修飾成員函數4.6 const對象 5. 賦值運算符函數&#xff08;補充&#xff09;5.1 概念5.2 默認賦值運算符函數局限5.3 解決辦法 1. c…

軟件測試之接口測試用例設計

1.接口測試用例設計簡介 我們對系統的需求分析完成之后&#xff0c;即可設計對應的接口測試用例&#xff0c;然后用接口測試用例進行接口測試。接口測試用例的設計也需要用到黑盒測試方法&#xff0c;其與功能測試用例設計的方法類似&#xff0c;接口測試用例設計中還需要增加…

(2)VTK C++開發示例 --- 繪制多面錐體

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;VTK開發 &#x1f448; 1. 概述 VTK C開發示例程序&#xff1b; 使用C 和VTK繪制一個多面錐體。 環境說明系統ubuntu22.04、windows11cmake3.22、3.2…

公司內部自建知識共享的方式分類、詳細步驟及表格總結,分為開源(對外公開)和閉源(僅限內部),以及公共(全員可訪問)和內部(特定團隊/項目組)四個維度

以下是公司內部自建知識共享的方式分類、詳細步驟及表格總結&#xff0c;分為開源&#xff08;對外公開&#xff09;和閉源&#xff08;僅限內部&#xff09;&#xff0c;以及公共&#xff08;全員可訪問&#xff09;和內部&#xff08;特定團隊/項目組&#xff09;四個維度&am…

DeepSeek使用001:Word中配置DeepSeek AI的V3和R1模型

文章目錄 Word中配置DeepSeek大模型1、勾選開發工具2、信任中心設置3、添加DeepSeek-V3模型4、獲取API KEY5、添加DeepSeek-R1模型6、新建組7、測試使用 Word中配置DeepSeek大模型 1、勾選開發工具 打開【選項】 選擇【自定義功能區】 2、信任中心設置 打開【信任中心】&…

Spark-SQL核心編程語言

利用IDEA開發spark-SQL 創建spark-SQL測試代碼 自定義函數UDF 自定義聚合函數UDAF 強類型的 Dataset 和弱類型的 DataFrame 都提供了相關的聚合函數&#xff0c; 如 count()&#xff0c; countDistinct()&#xff0c;avg()&#xff0c;max()&#xff0c;min()。除此之外&…

從圖像“看出動作”

&#x1f4d8; 第一部分&#xff1a;運動估計&#xff08;Motion Estimation&#xff09; &#x1f9e0; 什么是運動估計&#xff1f; 簡單說&#xff1a; &#x1f449; 給你一段視頻&#xff0c;計算機要“看懂”里面什么東西動了、往哪動了、有多快。 比如&#xff1a; 一…

Spring Boot 使用 SMB 協議

2025/4/14 向全棧工程師邁進&#xff01; 一、詳述SMB協議 SMB&#xff08;Server Message Block&#xff09;協議是一個網絡文件共享協議&#xff0c;它使得計算機可以在網絡中共享文件、打印機以及其他資源。SMB 主要用于 Windows 操作系統&#xff0c;但也有其他平臺&#…

Spring編程式事務(本地事務)

使用 TransactionTemplate等類和 API 手動管理事務&#xff0c;控制事務的新建、提交、回滾等過程 方式一&#xff1a;使用 TransactionTemplate&#xff08;推薦方式&#xff09; Service public class OrderService {private final TransactionTemplate transactionTemplat…

itext7 html2pdf 將html文本轉為pdf

1、將html轉為pdf需求分析 經常會看到爬蟲有這樣的需求&#xff0c;將某一個網站上的數據&#xff0c;獲取到了以后&#xff0c;進行分析&#xff0c;然后將需要的數據進行存儲&#xff0c;也有將html轉為pdf進行存儲&#xff0c;作為原始存檔&#xff0c;當然這里看具體的需求…

企業級低代碼平臺的架構范式轉型研究

在快速迭代的數字時代&#xff0c;低代碼平臺如同一股清流&#xff0c;悄然成為開發者們的新寵。 它利用直觀易用的拖拽式界面和豐富的預制組件&#xff0c;將應用程序的開發過程簡化到了前所未有的程度。通過封裝復雜的編程邏輯和提供強大的集成能力&#xff0c;低代碼平臺讓…

C++ | STL之list詳解:雙向鏈表的靈活操作與高效實踐

引言 std::list 是C STL中基于雙向鏈表實現的順序容器&#xff0c;擅長高效插入和刪除操作&#xff0c;尤其適用于頻繁修改中間元素的場景。與std::vector不同&#xff0c;std::list的內存非連續&#xff0c;但提供了穩定的迭代器和靈活的元素管理。本文將全面解析std::list的…

AI運算服務器工控機特點與應用

AI運算服務器工控機是專門針對工業環境設計的計算設備&#xff0c;結合了傳統工控機&#xff08;工業控制計算機&#xff09;的可靠性與AI服務器的強大算力&#xff0c;廣泛應用于智能制造、邊緣計算、機器視覺、自動化控制等領域。以下是其核心特點、應用場景及選型建議&#…