当前位置: 首页 > news >正文

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.xdnf.cn/news/401905.html

相关文章:

  • 单片机学习Day08--相邻流水灯
  • 主流编程语言中ORM工具全解析
  • 对基于再生龙制作的Linux系统的硬盘进行扩容
  • 10. Spring AI PromptTemplate:从模板到高级技巧
  • Go 语言 slice(切片) 的使用
  • 智能停车场如何实现无缝通信?Canopen转 Profibus网关来解答
  • [高阶数据结构]二叉树经典面试题
  • 【秣厉科技】LabVIEW工具包——OpenCV 教程(21):CUDA 加速方案
  • 【生产实践】Linux中/usr/bin、/usr/sbin与/usr/local的关系解析(2025年技术规范)
  • 养生:拥抱健康生活的全方位指南
  • 多模态论文笔记——Coca
  • 基于Vue3.0的高德地图api教程005:实现绘制线并编辑功能
  • 一个例子看LLM的工具调用流程
  • js应用opencv
  • java每日精进 5.11【WebSocket】
  • Java后端文件类型检测(防伪造)
  • zuoyyyeee
  • 数据可视化:用一张图讲好一个故事
  • 安装Python和配置开发环境
  • 《 C++ 点滴漫谈: 三十七 》左值?右值?完美转发?C++ 引用的真相超乎你想象!
  • 创建三个网络,分别使用RIP、OSPF、静态,并每个网络10个电脑。使用DHCP分配IP
  • 第五十六篇 Java面向对象编程深度解析:构建高内聚低耦合的系统架构
  • Spring Boot中Redis序列化配置详解
  • 【美国将取消对能源之星支持 严重影响AI服务器】
  • 使用vite重构vue-cli的vue3项目
  • 基于粒子群算法的配电网重构
  • Kotlin与Qt跨平台框架深度解析:业务逻辑共享与多语言集成
  • MySQL-逻辑架构
  • python二手书交易管理系统
  • 如何调整yarn.nodemanager.vmem-pmem-ratio参数?