springboot-web基礎

21.web

spring MVC

基于瀏覽器的 B/S 結構應用十分流行。Spring Boot 非常適合 Web 應用開發。可以使用嵌入式 Tomcat、Jetty、 Undertow 或 Netty 創建一個自包含的 HTTP 服務器。一個 Spring Boot 的 Web 應用能夠自己獨立運行,不依賴需 要安裝的 Tomcat,Jetty 等。

Spring Boot 可以創建兩種類型的 Web 應用

  • 基于 Servlet 體系的 Spring Web MVC 應用

  • 使用 spring-boot-starter-webflux 模塊來構建響應式,非阻塞的 Web 應用程序

    Spring MVC 是“model view controller”的框架。專注 web 應用開發。我們快速的創建控制器(Controller),

接受來自瀏覽器或其他客戶端的請求。并將業務代碼的處理結果返回給請求方。

spring MVC 工作圖

image-20250419170228528

創建web應用

創建 Web 應用,Lession12-quick-web。 依賴選擇 spring-web 包含了 Spring MVC , Restful, Tomcat 這些功能。 再選擇 Thymeleaf(視圖技術,代替 jsp),Lombok 依賴。

項目結構

image-20250419170727157

image-20250419171103304

image-20250419171128414

image-20250419171350116

html視圖

image-20250419172118634

image-20250419172627475

  • 創建控制器
package com.yanyu.demo1.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;import java.time.LocalDateTime;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/19 17:21* @description:* @Controller:創建控制器對象,控制器能夠接收請求,響應結果給瀏覽器*  *              控制器也叫做處理器*/
@Controllerpublic class Hello {
//    導入import org.springframework.ui.Model;@GetMapping("/hello")public  String hello(Model model){
//        定義方法處理請求, 方法叫做控制器方法(處理器方法)//Model表示模型,存儲數據。 這個數據最后是放在request作用域。//HttpServletRequest放在的作用域中
//數據存放到模型model.addAttribute("title","第一個請求");//model.addAttribute("date", LocalDateTime.now());//獲取當前時間//  指定顯示到  hello 視圖,接下來創建  hello  視圖return "hello";}}
  • 創建視圖

image-20250419173246677

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>視圖技術</title>
</head>
<body>
<!--取出 Model  中 存放的  資源model.addAttribute("info","第一個web全球");"info"    該資源在  Model 叫什么       "第一個web全球"  : 資源model.addAttribute("date", LocalDate.now());-->
<!--   取出  Model  中 資源的格式--><div style="margin-left: 300px"><div th:text="${title}"></div><div th:text="${date}"></div></div>
</body>
</html>

image-20250419174341013

image-20250419174751124

tomcat 8 bin 目錄文件沖突

根據您提供的錯誤信息,問題的根本原因是嘗試在 64 位平臺上加載 32 位的 tcnative-1.dll 文件。這是一個典型的架構不匹配問題。以下是詳細的解決方法:

java.lang.UnsatisfiedLinkError: D:\dev\apache-tomcat-8.5.100\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platformat java.base/jdk.internal.loader.NativeLibraries.load(Native Method) ~[na:na]at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:384) ~[na:na]at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:228) ~[na:na]at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:170) ~[na:na]at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:311) ~[na:na]at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:283) ~[na:na]
  1. 確認系統架構
  • 檢查您的操作系統和 JVM 的架構。確保它們都是 64 位的。
    • 在 Windows 上,可以通過“系統屬性”查看系統架構。
    • 在命令行中運行 java -version,確認 JVM 是否為 64 位。
  1. 下載正確的 tcnative-1.dll
  • 訪問 Apache Tomcat Native Library 頁面,下載與您的系統架構(64 位)匹配的 tcnative-1.dll 文件。
  • 確保下載的版本與您的 Tomcat 版本兼容。
  1. 替換錯誤的 tcnative-1.dll
  • 找到錯誤的 tcnative-1.dll 文件位置(根據錯誤信息,它位于 D:\dev\apache-tomcat-8.5.100\bin\)。
  • 將下載的正確版本的 tcnative-1.dll 替換掉現有的文件。
  1. 檢查環境變量
  • 確保 PATH 環境變量中包含 Tomcat 的 bin 目錄。
    • 在 Windows 上,可以通過“系統屬性”中的“環境變量”進行檢查和修改。
  1. 驗證依賴關系
  • 使用工具(如 Dependency Walker)檢查新的 tcnative-1.dll 文件是否依賴于其他 32 位的 DLL 文件。
  • 如果存在依賴問題,確保所有依賴的 DLL 文件也替換為 64 位版本。
  1. 重啟 Tomcat
  • 替換文件后,重啟 Tomcat 以確保更改生效。
  1. 其他注意事項
  • 如果問題仍然存在,可以嘗試將 tcnative-1.dll 文件放置在系統的其他標準庫路徑中(如 %PATH%%JAVA_HOME%\bin),并確保這些路徑在 java.library.path 中。
  • 確保您的 JVM 和 Tomcat 都是 64 位版本,避免架構不匹配。

通過以上步驟,您應該能夠解決 java.lang.UnsatisfiedLinkError 錯誤并成功運行 Tomcat。

JSON視圖

自己寫JSON

上面的例子以 Html 文件作為視圖,可以編寫復雜的交互的頁面,CSS 美化數據。除了帶有頁面的數據,還 有一種只需要數據的視圖。比如手機應用 app,app 的數據來自服務器應用處理結果。app 內的數據顯示和服務器 無關,只需要數據就可以了。主流方式是服務器返回 json 格式數據給手機 app 應用。

我們可以通過原始的 HttpServletResponse 應該數據給請求方。 借助 Spring MVC 能夠無感知的處理 json。

image-20250419180653240

  • 控制器
package com.yanyu.demo1.controller;import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import java.io.IOException;
import java.io.PrintWriter;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/19 18:07* @description:*/
@Controller
public class JSONController {@RequestMapping("/json")//  暫時先拋出響應異常public void responseTest(HttpServletResponse response) throws IOException {
//       準備  json  格式數據/** {* user:"",* age:"";* }** */String json = "{\"user\":\"yanyu\",\"age\":20}";
//        設置在瀏覽器的響應類型response.setContentType("application/json;charset=utf-8");
//        響應對象PrintWriter out = response.getWriter();out.print(json);
//        刷新管道out.flush();
//        關閉流out.close();}}

image-20250419181638928

利用jackson轉為json

SpringMVC支持控制器方法返回對象, 由框架將對象使用jackson轉為json,并輸出

User–Jackson工具庫的ObjectMapper對象,—user轉為json格式字符串–HttpServletResponse輸出

接受請求的注解

@GetMapping:接收get請求 , 簡化的@RequestMapping(method=RequestMethod.GET)

@PostMapping 接收post請求

@PutMapping: 接收put請求

@DeleteMapping:接收delete請求

  • 準備映射實體
package com.yanyu.demo1.vo;import lombok.Data;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/19 18:25* @description:json  映射實體*/
//使用Lombok  簡化  bean規范public class User {private String name;private Integer age;private String major;public User() {}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;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}
}
package com.yanyu.demo1.controller;import com.yanyu.demo1.vo.User;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/19 18:28* @description:*/
@Controller
public class JacksonController {//設置請求方式   調用  Jackson  工具庫@RequestMapping("/jackson")@ResponseBody
//    自動將  對象 轉為  jsonpublic User getJsonUser(){User user = new User();user.setAge(20);user.setName("yanyu666");user.setMajor("軟件技術");return user;}}

image-20250419184203669

image-20250419184216580

加 favicon圖標

我們自己的網站定制 logo。首先找一個在線工具創建 favicon.ico。比如

https://quanxin.org/favicon

圖片生成我們需要的內容。生成的 logo 文件名稱是 favicon.ico

step1:將生成的 favicon.ico 拷貝項目的 resources/ 或 resources/static/ 目錄。

step2:在你的視圖文件,加入對 favicon.ico 的引用。

在視圖的

<head>部分加入 <link rel="icon" href="../favicon.ico" type="image/x-icon"/>

image-20250419185306416

image-20250419185407314

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<!--    添加自己定制的圖標--><link rel="shortcut icon" href="../favicon_32x32.ico" type="image/x-icon"><title>視圖技術</title>
</head>
<body><div style="margin-left: 300px"><div th:text="${title}"></div><div th:text="${date}"></div></div>
</body>
</html>

image-20250419190023766

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

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

相關文章

重構Cursor無限電子郵箱注冊系統的技術實踐

引言 在當今數字化時代&#xff0c;電子郵箱已成為個人和企業網絡身份的基礎。作為開發者&#xff0c;我們往往會遇到需要設計注冊系統的場景&#xff0c;而如何構建一個既安全又用戶友好的郵箱注冊系統&#xff0c;是值得深入探討的話題。本文將圍繞Cursor郵箱系統的技術重構…

2025.05.10京東機考真題算法崗-第三題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 03. 忍者屋頂之旅 問題描述 LYA是一位身手敏捷的忍者,正在一個古老的村莊進行飛檐走壁的訓練。村莊有兩排房屋,每排從左到右排列著 n n

vscode不能跳轉到同一個工作區的其他文件夾

明白了&#xff0c;你說的“第二種情況”是指&#xff1a; 你先打開的是項目文件夾&#xff08;比如 MyProject&#xff09;&#xff0c;然后通過 VS Code 的“添加文件夾到工作區”功能&#xff0c;把 ThirdPartyLib 文件夾添加進來。 結果&#xff0c;項目代碼里 #include “…

FastAPI 和 MongoDB 實現請求頭參數處理的示例,并在 React 中進行渲染

FastAPI 和 MongoDB 后端 安裝必要的庫 安裝 FastAPI、Uvicorn、Motor&#xff08;用于 MongoDB 的異步驅動&#xff09;和 Pydantic&#xff08;用于數據驗證&#xff09;。 pip install fastapi uvicorn motor pydantic創建 FastAPI 應用 創建一個文件 main.py&#xff0c;并…

技術倫理雙軌認證如何重構AI工程師能力評估體系——基于AAIA框架的技術解析與行業實證研究

引言&#xff1a;AI工程師能力評估的范式轉型 2025年全球人工智能產業呈現出兩大特征&#xff1a;技術迭代加速與監管框架完善。據Gartner數據顯示&#xff0c;全球75%的企業在AI項目部署中遭遇技術倫理混合型難題&#xff0c;傳統單維度技術認證體系已無法滿足產業需求。本文…

03.Golang 切片(slice)源碼分析(二、append實現)

Golang 切片&#xff08;slice&#xff09;源碼分析&#xff08;二、append實現&#xff09; 前言&#xff1a; Golang 切片&#xff08;slice&#xff09;源碼分析&#xff08;一、定義與基礎操作實現&#xff09; 在前面的文章我們介紹了&#xff0c;切片的結構體與創建\擴容…

mysql常用方法

mysql常用方法 一、基本用法 -- MySQL創建唯一索引 CREATE UNIQUE INDEX 索引名 ON 表名(列名1,列名2,...); --也可以使用ALTER TABLE語句給現有表添加唯一索引&#xff08;UNIQUE&#xff09; ALTER TABLE 表名 ADD CONSTRAINT 索引名 UNIQUE KEY(列名1,列名2,...); alter t…

STM32F103C8T6板子使用說明

第一章 計算機體系結構(了解) 后續在板子上開發的時候&#xff0c;需要考慮是否有操作系統 方式一&#xff1a;有操作系統&#xff0c;通過c庫通過os api操作硬件方式二&#xff1a;無操作系統&#xff0c; 通過c庫通過固件庫操作硬件 第二章 STM32開發板概述 板子/開發板&…

PBR材質-Unity/Blender/UE

目錄 前言&#xff1a; 一、Unity&#xff1a; 二、Blender&#xff1a; 三、UE&#xff1a; 四、全家福&#xff1a; 五、后記&#xff1a; 前言&#xff1a; PBR流程作為表達物理效果的經典方式&#xff0c;很值得一學。紋理貼圖使用的是上一期的Textures | cgbookcas…

【生產實踐】Linux中/usr/bin、/usr/sbin與/usr/local的關系解析(2025年技術規范)

一、核心定位與功能劃分 /usr/bin&#xff1a;用戶級通用命令庫 ? 定位&#xff1a;存儲系統預裝的用戶級可執行文件&#xff0c;這些命令通常由Linux發行版官方軟件包管理器&#xff08;如APT、YUM&#xff09;安裝&#xff0c;屬于系統默認功能的一部分。 ? 示例命令&#…

智能網聯汽車 “中央計算” 博弈:RTOS 與跨域融合的算力分配挑戰

一、引言 隨著智能駕駛技術的飛速發展&#xff0c;汽車逐漸從傳統的交通工具演變為移動的智能終端。智能網聯汽車的核心競爭力日益體現在其強大的計算能力和高效的算力管理上。汽車電子電氣架構&#xff08;EEA&#xff09;正經歷從分布式架構向 “中央計算 區域控制” 架構的…

【PDF】使用Adobe Acrobat dc添加水印和加密

【PDF】使用Adobe Acrobat dc添加水印和加密 文章目錄 [TOC](文章目錄) 前言一、添加保護加密口令二、添加水印三、實驗四、參考文章總結 實驗工具&#xff1a; 1.Adobe Acrobat dc 前言 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、添加保護加…

python面試實戰經驗分享

2025/3/28第一面 杭州實在智能 見習python開發工程師 1、Python方法中參數默認值可以是列表或者字典嗎? 在Python中,函數參數的默認值可以是列表或字典,列表或者字典在初始化應在函數體內,如果不正確處理,可能會導致所有調用都共享同一個列表。 2、協程、線性和進程 進程…

MIST:一鍵解鎖 macOS 歷史版本,舊系統安裝不再難!

在 Mac 電腦的使用過程中&#xff0c;你是否遇到過這些困擾&#xff1f;為了運行一款經典設計軟件&#xff0c;新系統卻無法兼容&#xff1b;或是想給老舊 Mac 設備升級&#xff0c;卻找不到適配的系統版本。而 App Store 里&#xff0c;舊版 macOS 安裝包就像 “隱藏副本”&am…

win10 局域網內聊天

在 Windows 10 的局域網 中&#xff0c;如果你想實現 多個用戶之間的聊天功能&#xff0c;可以選擇以下幾種方案&#xff0c;取決于你需要的是&#xff1a; ? ? 命令行純文字聊天&#xff08;如 Linux talk&#xff09; ? ? 圖形界面聊天室 ? ? 局域網廣播消息 ? ? 多人…

Android CountDownTimer重寫

Android 倒計時器重寫&#xff0c;實現可重復使用&#xff0c;動態修改計時時間 CountDownTimerRew 是一個可重寫、動態修改計時時間的 Android 倒計時器類。它允許開發者設置倒計時總時長、間隔時間&#xff0c;并通過 onTick 和 onFinish 方法實現定時回調。該類支持動態修改…

dp自動化登陸之hCaptcha 驗證碼

hCaptcha 是一種常見的驗證碼服務&#xff0c;用于區分人類用戶和自動化程序。由于其基于圖像識別和行為分析&#xff0c;下面介紹如何使用自動化點擊驗證碼完成登陸。 思路&#xff1a;登陸目標網站觸發驗證碼&#xff0c;截圖并發給打碼平臺返回坐標&#xff0c;模擬人工點擊…

【工作記錄】crmeb后端項目打開、運行

1、下載代碼 1&#xff09;安裝git 不再詳述 2&#xff09;git拉代碼 項目地址如下&#xff0c;在vscode-分支中拉代碼 # 克隆項目 git clone https://gitee.com/ZhongBangKeJi/crmeb_java/ 截圖如下是已經成功拉下來 注意安裝對應版本 2、maven配置 安裝配置見&#x…

敏捷軟件開發與Scrum

目錄 一、敏捷軟件開發 敏捷開發原則 敏捷開發特點 二、Scrum (一)Scrum 基礎知識

Three.js模型材質調整與性能優化實戰

一、材質基礎調整 1.1 顏色與透明度控制 通過Material.color屬性可直接修改材質顏色&#xff1a; material.color new THREE.Color(0xff0000); // 紅色結合opacity屬性實現透明效果&#xff1a; material.opacity 0.5; // 50%透明度如需動態調整&#xff0c;可通過Color.…