当前位置: 首页 > 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

相关文章:

  • MySQL备份与恢复
  • ngx_http_limit_conn_module精准连接控制
  • 【MySQL】牛客网sql语句简单例题,sql入门
  • 嵌入式培训之数据结构学习(一)数据结构的基础概念、线性表
  • day18-数据结构引言
  • 基于CNN-BiLSTM-Attention的回归预测模型!
  • 异步FIFO的学习
  • 2025-5-12 底部埋伏记录
  • vue vxe-print 打印设置边距、页头页尾高度样式
  • 自适应蒙特卡洛定位-AMCL
  • 分析红黑树工程实用的特点
  • 数据知识产权质押融资风险控制
  • 降低60.6%碰撞率!复旦大学地平线CorDriver:首次引入「走廊」增强端到端自动驾驶安全性
  • feign.RequestInterceptor 简介-笔记
  • 为什么 mac os .bashrc 没有自动加载?
  • 【c++】异常详解
  • 2.1 微积分基本想法
  • Linux操作系统安全加固
  • Maven私服搭建与登录全攻略
  • Qt进阶开发:QTcpServer的的详解
  • 商务部召开外贸企业圆桌会:全力为外贸企业纾困解难,提供更多支持
  • 民生谣言误导认知,多方联动守护清朗——中国互联网联合辟谣平台2025年4月辟谣榜综述
  • 多元史料下的“西狩”叙事——《“庚子西狩”中外资料六种》解题
  • 今起公开发售,宁德时代将于5月20日在港股上市
  • 法治日报:炮制师生日常剧本,校园怎么成了短视频流量秀场?
  • 技术派|巴基斯坦导弹:让印度保持克制的“定海神针”?