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.mzph.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.…