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

Java Spring MVC -01

SpringMVC 是一种基于  的实现 MVC 设计模式的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 中。

First:SpringMVC-01-SpringMVC 概述

SpringMVC 是 Spring 框架的一个模块,用于构建 Web 应用程序。它遵循 MVC (Model-View-Controller) 架构模式,将请求处理、业务逻辑和视图展示分离,使代码结构清晰,易于维护和测试。

SpringMVC 的主要特点:

-轻量级,非侵入式

-强大的请求映射机制

-支持多种视图技术

-强大的异常处理机制

-支持文件上传

-国际化和本地化支持

-支持 RESTful 风格的 URL

SpringMVC-02-SpringMVC 入门案例

下面是一个简单的 SpringMVC 入门案例,展示了如何创建一个基本的 Web 应用。

1. 添加 Maven 依赖

这些依赖是构建 SpringMVC 应用的基础:

xml:

<dependencies>

    <!-- Spring MVC核心库 -->

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-webmvc</artifactId>

        <version>5.3.18</version>

    </dependency>

    

    <!-- Servlet API (由容器提供,无需打包) -->

    <dependency>

        <groupId>x.servlet</groupId>

        <artifactId>x.servlet-api</artifactId>

        <version>4.0.1</version>

        <scope>provided</scope>

    </dependency>

    

    <!-- JSP支持 (用于视图渲染) -->

    <dependency>

        <groupId>x.servlet.jsp</groupId>

        <artifactId>x.servlet.jsp-api</artifactId>

        <version>2.3.3</version>

        <scope>provided</scope>

</dependency>

</dependencies>

关键依赖说明:

spring-webmvc:SpringMVC 框架的核心库

x.servlet-api:Servlet 容器接口

x.servlet.jsp-api:JSP 页面支持

2. Servlet 初始化类(AppInitializer)

这个类替代了传统的 web.xml 配置,用于注册 DispatcherServlet

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override

    protected Class<?>[] getRootConfigClasses() {

        return null; // 根应用上下文配置(通常包含服务层和数据访问层)

    }

    @Override

    protected Class<?>[] getServletConfigClasses() {

        return new Class<?>[] { WebConfig.class }; // Web层配置

    }

    @Override

    protected String[] getServletMappings() {

        return new String[] { "/" }; // 映射所有请求到DispatcherServlet

}

}

核心作用:

自动注册 Spring MVC 的前端控制器DispatcherServlet

指定配置类位置

映射请求路径

3. Spring 配置类(WebConfig)

配置 SpringMVC 的核心组件:

@Configuration

@EnableWebMvc // 启用Spring MVC注解支持

@ComponentScan(basePackages = "com.example.controller") // 扫描控制器

public class WebConfig {

    @Bean

    public ViewResolver viewResolver() {

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();

        resolver.setPrefix("/WEB-INF/views/"); // JSP文件位置

        resolver.setSuffix(".jsp"); // 文件后缀

        return resolver;

}

}

关键配置项:

@EnableWebMvc:启用 Spring MVC 注解驱动

ComponentScan:扫描@Controller注解的类

ViewResolver:配置视图解析器,将逻辑视图名映射到物理 JSP 文件

4. 控制器(HelloController)

处理 HTTP 请求并返回视图:

@Controller

@RequestMapping("/hello")

public class HelloController {

    @RequestMapping(method = RequestMethod.GET)

    public String sayHello(Model model) {

        model.addAttribute("message", "Hello Spring MVC!");

        return "hello"; // 逻辑视图名

}

}

核心注解:

@Controller:声明这是一个 Spring MVC 控制器

@RequestMapping:映射请求路径和 HTTP 方法

Model:用于传递数据到视图

5. JSP 视图(hello.jsp)

渲染最终响应页面:

jsp

<!DOCTYPE html>

<html>

<head>

    <title>Hello Spring MVC</title>

</head>

<body>

    <h1>${message}</h1> <!-- 接收控制器传递的数据 -->

</body>

</html>

关键技术点:

EL 表达式 (${message}):用于获取模型数据

视图位置:/WEB-INF/views/hello.jsp(由 ViewResolver 配置决定)

入门案例工作流程解析

当访问http://localhost:8080/hello时:

请求到达DispatcherServlet(由 AppInitializer 注册)

DispatcherServlet 通过 HandlerMapping 找到对应的HelloController

执行sayHello()方法,将数据存入 Model

返回逻辑视图名 "hello"

ViewResolver 将 "hello" 解析为 / WEB-INF/views/hello.jsp

JSP 页面渲染并返回响应

SpringMVC-03 - 入门案例工作流程解析

SpringMVC 的工作流程可以概括为以下几个步骤:

客户端发送请求到 DispatcherServlet

DispatcherServlet 接收请求并查询 HandlerMapping 找到处理该请求的 Controller

DispatcherServlet 调用 HandlerAdapter 来执行 Controller

Controller 处理请求并返回一个 ModelAndView 对象给 HandlerAdapter

HandlerAdapter 将 ModelAndView 返回给 DispatcherServlet

DispatcherServlet 查询 ViewResolver 找到与 ModelAndView 中逻辑视图名对应的实际视图

DispatcherServlet 将模型数据传递给视图

视图渲染结果返回给客户端

SpringMVC-04-bean 加载控

在 SpringMVC 中,有两种类型的 ApplicationContext:

root 上下文 (Root ApplicationContext):包含应用的业务逻辑、数据访问等 Bean

Servlet 上下文 (Servlet ApplicationContext):包含控制器、视图解析器等 Web 相关 Bean

可以通过配置来控制哪些 Bean 被加载到哪个上下文:

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override

    protected Class<?>[] getRootConfigClasses() {

        return new Class<?>[] { RootConfig.class };

    }

    @Override

    protected Class<?>[] getServletConfigClasses() {

        return new Class<?>[] { WebConfig.class };

    }

    @Override

    protected String[] getServletMappings() {

        return new String[] { "/" };

}

}

@Configuration

@ComponentScan(basePackages = "com.example.service, com.example.repository")

public class RootConfig {

// 根上下文配置

}

@Configuration

@EnableWebMvc

@ComponentScan(basePackages = "com.example.controller")

public class WebConfig {

// Servlet上下文配置

}

SpringMVC-05-PostMan 工具介绍

Postman 是一个用于测试 API 的工具,它可以发送各种 HTTP 请求 (GET、POST、PUT、DELETE 等),设置请求头、请求参数、请求体等,并查看响应结果。

使用 Postman 测试 SpringMVC API 的步骤:

打开 Postman,创建一个新的请求

选择请求方法 (GET、POST 等)

输入请求 URL

设置请求头 (如 Content-Type)

设置请求参数或请求体

点击发送按钮查看响应结果

SpringMVC-06 - 设置请求映射路径

在 SpringMVC 中,可以使用 @RequestMapping 注解来设置请求映射路径。该注解可以应用于类和方法上。

@Controller

@RequestMapping("/products")

public class ProductController {

    // 处理GET请求 /products

    @RequestMapping(method = RequestMethod.GET)

    public String listProducts(Model model) {

        // 获取产品列表

        return "products/list";

    }

    // 处理GET请求 /products/{id}

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)

//@GetMappeing (value = "{id}")

    public String getProduct(@PathVariable("id") Long id, Model model) {

        // 获取单个产品

        return "products/detail";

    }

    // 处理POST请求 /products

    @RequestMapping(method = RequestMethod.POST)

    public String addProduct(@ModelAttribute Product product) {

        // 添加产品

        return "redirect:/products";

}

}

SpringMVC-07-get 请求与 post 请求发送普通参数

一、GET 请求参数处理

1. 请求结构与参数传递

GET 请求将参数附加在 URL 的查询字符串中,格式为?参数名1=值1&参数名2=值2。例如:

http://localhost:8080/search?keyword=手机

浏览器发送的完整 HTTP 请求示例:

http:

GET /search?keyword=%E6%89%8B%E6%9C%BA HTTP/1.1

Host: localhost:8080User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

Accept: text/html,application/xhtml+xml,application/xml

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

Connection: keep-alive

2. @RequestParam 注解详解

@Controller

@RequestMapping("/search")

public class SearchController {

    // 基础用法

    @GetMapping

    public String search(@RequestParam("keyword") String keyword, Model model) {

        // 处理搜索逻辑

        List<Product> results = productService.search(keyword);

        model.addAttribute("results", results);

        return "search/results";

    }

    // 可选参数与默认值

    @GetMapping("/advanced")

    public String advancedSearch(

        @RequestParam(value = "keyword", required = false) String keyword,  // 可选参数

        @RequestParam(value = "category", defaultValue = "all") String category,  // 默认值

        @RequestParam(value = "page", defaultValue = "1") int page,

        @RequestParam(value = "size", defaultValue = "10") int size

    ) {

        // 处理高级搜索

        return "search/advanced";

    }

    // 绑定多个同名参数到List

    @GetMapping("/filter")

    public String filterProducts(@RequestParam("category") List<String> categories) {

        // URL: /filter?category=手机&category=电脑

        return "products/filter";

    }}

3. 前端表单示例(GET 请求)

html

预览

<form action="/search" method="get">

    <input type="text" name="keyword" placeholder="搜索关键词">

    <select name="category">

        <option value="all">全部</option>

        <option value="phone">手机</option>

        <option value="computer">电脑</option>

    </select>

<button type="submit">搜索</button>

</form>

二、POST 请求参数处理

1. 请求结构与参数传递

POST 请求将参数封装在请求体中,需要指定Content-Type头。常见的Content-Type有:

application/x-www-form-urlencoded(默认)

multipart/form-data(文件上传)

application/json(JSON 数据)

浏览器发送的完整 HTTP 请求示例:

http:

POST /user/register HTTP/1.1Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

Content-Type: application/x-www-form-urlencoded

Content-Length: 40

username=test&password=123456&email=test%40example.com

2. @RequestParam 处理简单参数

@Controller

@RequestMapping("/user")

public class UserController {

    @PostMapping("/login")

    public String login(

        @RequestParam("username") String username,

        @RequestParam("password") String password,

        Model model

    ) {

        User user = userService.validateUser(username, password);

        if (user != null) {

            return "redirect:/home";

        } else {

            model.addAttribute("error", "用户名或密码错误");

            return "login";

        }

}

}

3. @ModelAttribute 处理对象参数

// User类public class User {

    private String username;

    private String password;

    private String email;

    private Integer age;

// getters/setters

}

@Controller

@RequestMapping("/user")

public class UserController {

    @PostMapping("/register")

    public String register(@ModelAttribute User user) {//表单->User对象

        // 自动将表单参数绑定到User对象

        userService.register(user);

        return "redirect:/user/login";

}

}

4. 前端表单示例(POST 请求)

html

<form action="/user/register" method="post">

    用户名: <input type="text" name="username"><br>

    密码: <input type="password" name="password"><br>

    邮箱: <input type="email" name="email"><br>

    年龄: <input type="number" name="age"><br>

<input type="submit" value="注册">

</form>

SpringMVC-08-5 种类型参数传递

SpringMVC 支持多种方式的参数传递:

路径变量 (Path Variable)

@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)

public String getUser(@PathVariable("id") Long id, Model model) {

// 处理逻辑

}

请求参数 (Request Parameter)

@RequestMapping(value = "/search", method = RequestMethod.GET)

public String search(@RequestParam("keyword") String keyword, Model model) {

// 处理逻辑

}

请求头 (Request Header)

@RequestMapping(value = "/download", method = RequestMethod.GET)

public ResponseEntity<byte[]> download(@RequestHeader("User-Agent") String userAgent) {

// 处理逻辑

}

Cookie 值

@RequestMapping(value = "/profile", method = RequestMethod.GET)

public String profile(@CookieValue("JSESSIONID") String sessionId, Model model) {

    // 处理逻辑}

请求体 (用于 POST/PUT 请求)

@RequestMapping(value = "/users", method = RequestMethod.POST)

public ResponseEntity<User> createUser(@RequestBody User user) {

// 处理逻辑

}

SpringMVC-09-json 数据传递参数

在 RESTful API 中,通常使用 JSON 格式传递数据。可以使用 @RequestBody 和 @ResponseBody 注解来处理 JSON 数据。

首先需要添加 Jackson 依赖:

xml

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

<version>2.13.3</version>

</dependency>

控制器示例:

@RestController

@RequestMapping("/api/users")

public class UserRestController {

    @PostMapping

    public User createUser(@RequestBody User user) {//JSON->对象

        // 创建用户

        return userService.save(user);

    }

    @GetMapping("/{id}")

    public User getUser(@PathVariable Long id) {

        // 获取用户

        return userService.findById(id);

}

}

SpringMVC-10 - 日期型参数传递

SpringMVC 默认情况下可能无法正确解析日期参数,需要进行额外配置。

使用 @DateTimeFormat 注解:

@RequestMapping(value = "/events", method = RequestMethod.GET)

public String getEvents(@RequestParam("date")

@DateTimeFormat(pattern = "yyyy-MM-dd") //格式

LocalDate date, Model model) {

// 处理逻辑

}

全局日期格式化配置:

@Configuration

public class WebConfig implements WebMvcConfigurer {

    @Override

    public void addFormatters(FormatterRegistry registry) {

        DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();

        registrar.setDateFormatter(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        registrar.registerFormatters(registry);

}

}

相关文章:

Java Spring MVC -01

SpringMVC 是一种基于 的实现 MVC 设计模式的请求驱动类型的轻量级 Web 框架&#xff0c;属于 Spring FrameWork 的后续产品&#xff0c;已经融合在 Spring Web Flow 中。 First:SpringMVC-01-SpringMVC 概述 SpringMVC 是 Spring 框架的一个模块&#xff0c;用于构建 Web 应…...

遨游5G-A防爆手机:赋能工业通信更快、更安全

在工业数字化转型与5G-A商用进程加速的双重驱动下&#xff0c;中国防爆手机市场正迎来历史性发展机遇。作为“危、急、特”场景通信解决方案服务商&#xff0c;遨游通讯深刻洞察到&#xff1a;当5G-A网络以超高速率、海量连接和毫秒级时延重塑行业生态时&#xff0c;防爆手机这…...

MySQL 8.0 OCP 1Z0-908 51-60题

Q51.Examine this parameter setting: audit_logFORCE_LOG_PERMAENT What effect does this have on auditing? A)It will force the load of the audit plugin even in case of errors at server start.//插件在之前就必须加载完成&#xff0c;只有当插件之前通过 INSTALL PL…...

javax.servlet.Filter 介绍-笔记

1.javax.servlet.Filter 简介 javax.servlet.Filter 是 Java Servlet API 中的一个核心接口&#xff0c;用于在请求到达目标资源&#xff08;如 Servlet 或 JSP&#xff09;之前或响应返回给客户端之前执行预处理或后处理操作。它常用于实现与业务逻辑无关的通用功能&#xff…...

【2025年前端高频场景题系列】使用同一个链接,如何实现PC打开是web应用、手机打是-个H5 应用?

面试情境与问题引入 哈喽大家伙,我是布鲁伊。在前端开发面试中,面试官经常会抛出一些看似简单却能考察多方面能力的问题。"如何实现同一个链接在PC端和移动端展示不同应用?"就是这样一个典型问题。为什么面试官喜欢问这个问题?因为它能同时考察候选人的设备适配…...

GPT 经验

GPT 经验篇 一、gpt源码past_key_value是干啥的&#xff1f;二、gpt onebyone 每一层怎么输入输出&#xff1f;三、bert和gpt有什么区别四、文本生成的几大预训练任务&#xff1f;五、讲讲T5和Bart的区别&#xff0c;讲讲bart的DAE任务&#xff1f;六、讲讲Bart和Bert的区别&am…...

uniapp|实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,拍照保存至相册,多端兼容(APP/微信小程序)

基于uniapp以及微信小程序实现移动端人脸识别相似度对比,实现摄像头、相册权限获取、相机模块交互、第三方识别集成等功能,附完整代码。 目录 核心功能实现流程摄像头与相册权限申请权限拒绝后的引导策略摄像头调用拍照事件处理人脸识别集成图片预处理(Base64编码/压缩)调用…...

蓝桥杯13届国B 出差

题目描述 A、B、C、D四个人中要派两个人出差&#xff0c;按下述三个条件有几种安排方案&#xff0c;如何安排。 (1) 若A去&#xff0c;则C和D中要去一人。 (2) B和C不能都去。 (3) C去则D要留下。 输入描述 本题无输入。 输出描述 按字典序输出所有符合要求的安排方案&…...

论软件设计模式及其应用

三、正文 摘要 2023年 3 月&#xff0c;我所在的公司承接了某油企智慧加油站平台的建设工作。该项目旨在帮助加油站提升运营效率、降低运营成本和提高销售额。我在该项目中担任系统架构设计师&#xff0c;负责整个系统的架构设计工作。本文以该项目为例&#xff0c;详细论述了…...

实现 STM32 PWM 输出:原理、配置与应用详解

实现 STM32 PWM 输出&#xff1a;原理、配置与应用详解 在嵌入式开发领域&#xff0c;STM32 微控制器凭借其强大的功能和丰富的外设资源&#xff0c;被广泛应用。PWM&#xff08;脉冲宽度调制&#xff09;作为 STM32 的重要功能之一&#xff0c;对于电机调速、LED 调光、信号合…...

优艾智合机器人助力半导体智造,领跑国产化替代浪潮

在全球半导体产业加速自动化转型的背景下&#xff0c;传统物流已成为制约智能化升级的关键瓶颈。作为中国移动机器人行业的领军企业&#xff0c;优艾智合&#xff08;YOUIBOT&#xff09;自2017年起就敏锐洞察到"半导体设备国产化"的紧迫需求&#xff0c;依托在工业移…...

Pytorch张量和损失函数

文章目录 张量张量类型张量例子使用概率分布创建张量正态分布创建张量 (torch.normal)正态分布创建张量示例标准正态分布创建张量标准正态分布创建张量示例均匀分布创建张量均匀分布创建张量示例 激活函数常见激活函数 损失函数(Pytorch API)L1范数损失函数均方误差损失函数交叉…...

【RabbitMQ】工作队列和发布/订阅模式的具体实现

文章目录 建立连接工作队列模式实现创建队列和交换机生产者代码消费者代码运行程序启动消费者启动生产者 发布/订阅模式实现创建队列和交换机生产者代码创建交换机声明两个队列绑定队列和交换机发送消息完整代码 消费者代码完整代码 运行程序启动生产者启动消费者 建立连接 我…...

loki grafana 页面查看 loki 日志偶发 too many outstanding requests

问题描述 grafana 页面查看 loki 日志偶然出现 too many outstanding requests loki pod 日志报错 levelerror ts2025-05-13T06:15:52.509738812Z callerscheduler_processor.go:158 org_idfake traceID1570d49e6d15b25c msg"error notifying scheduler about finished …...

Python之with语句

文章目录 Python中的with语句详解一、基本语法二、工作原理三、文件操作中的with语句1. 基本用法2. 同时打开多个文件 四、with语句的优势五、自定义上下文管理器1. 基于类的实现2. 使用contextlib模块 六、常见应用场景七、注意事项 Python中的with语句详解 with语句是Python…...

tomcat搭建内网论坛

准备工作&#xff1a; 准备jdk-8u291-linux-x64.tar.gz压缩包与apache-tomcat-9.0.16.tar.gz压缩包。 jdk安装&#xff1a; tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/ cd /usr/local/ ln -s jdk1.8.0_291/ jdk vim /etc/profile.d/jdk.sh cat /etc/profile.d/jdk.s…...

基于开源AI大模型AI智能名片S2B2C商城小程序的零售结算技术创新研究——以京东AI与香港冯氏零售集团智能结算台为例

摘要&#xff1a;本文以京东AI与香港冯氏零售集团共同打造的人工智能结算台为切入点&#xff0c;结合开源AI大模型、AI智能名片及S2B2C商城小程序的技术特性&#xff0c;深入探讨其在零售结算领域的创新应用。研究发现&#xff0c;开源AI大模型为智能结算提供了强大的图像识别与…...

supabase 怎么新建项目?

在 Supabase 中新建项目主要通过官方网站的仪表盘 (Dashboard) 来完成。以下是详细步骤&#xff1a; 通过 Supabase 仪表盘新建项目&#xff1a; 注册/登录 Supabase 账户&#xff1a; 访问 Supabase 官网&#xff1a;https://supabase.com/如果你还没有账户&#xff0c;点击 …...

框架篇八股(自用)

框架篇 Spring框架中的bean不是线程安全的 Scope&#xff08;&#xff09; singleton单例 prototype多例 一个类中有可修改的成员变量需要考虑线程安全 bean没有可变状态&#xff08;service类&#xff0c;DAO类&#xff09; 某种程度单例bean是线程安全的 AOP面向切面编程…...

Flask Docker Demo 项目指南

首先&#xff0c;创建一个新的项目目录并创建必要的文件&#xff1a; mkdir flask-docker-demo cd flask-docker-demo创建一个简单的Flask应用 (app.py)&#xff1a; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, Docker World…...

蓝卓AI智能体平台

在数字化浪潮席卷全球的今天&#xff0c;制造业企业正面临前所未有的挑战&#xff1a;如何将海量数据转化为精准决策&#xff1f;如何让传统生产流程具备“自进化”的智能&#xff1f;如何打破数字化与智能化之间的鸿沟&#xff1f;蓝卓数字科技凭借对工业场景的深刻理解&#…...

typedef unsigned short uint16_t; typedef unsigned int uint32_t;

你提到的这两行是 C/C 中的类型别名定义&#xff1a; typedef unsigned short uint16_t; typedef unsigned int uint32_t;它们的目的是让代码更具可读性和可移植性&#xff0c;尤其在处理精确位数的整数时非常有用。 ✅ 含义解释 typedef unsigned short uint16_t;…...

黑马k8s(五)

1.Namespace 2.Pod run nginx&#xff1a;nginx是pod控制器的名称&#xff0c;不是pod的名称 查看pod更高的参数&#xff1a; 启动一个不存在的镜像&#xff1a;pod 查看 dev下面的pod&#xff0c;第二个pod处于容器创建的状态 查看pod的详情描述&#xff1a; 通过pod的ip&…...

进程间通信分类

前提&#xff1a; 进程具有独立性&#xff0c;要通信就是要让它们&#xff1a;看到同一份资源&#xff08;某种形式的内存空间&#xff0c;操作系统提供&#xff09; 本地通信&#xff1a;同一台主机&#xff0c;OS&#xff0c;用系统调用通信。标准&#xff1a;systemV。 S…...

uniapp-商城-56-后台 新增商品(弹窗属性继续分析)

1、概述 前面我们讲了布局和相应商品属性的页面布局。属性是一个弹窗&#xff0c;它是一个cell的组件的实现属性。点击该cell就会调用uni-popup 进行弹窗。基本的页面布局如下&#xff1a; 属性显示其实是个一嵌套的数据显示。 2 页面显示商品属性 点击添加属性 2.1 代码如…...

奇怪的公式

奇怪的公式 背景导入 在剑桥大学&#xff0c;瞥了一眼下面这个公式&#xff0c;我眩晕了&#xff0c;庆幸自己没学数学专业。 1 2 3 4 ⋯ − 1 12 1234\dots -\frac{1}{12} 1234⋯−121​ 一天&#xff0c;剑桥大学教授哥德弗雷哈代收到一封来自印度的信。写信人叫拉马…...

web 自动化之 PO 设计模式详解

文章目录 一、什么是 POM二、如何基于 POM 进行自动化框架架构&#xff1f;1、base 层封装2、pageobjects 层封装3、TestCases 层封装 三、元素和方法分离&数据分离1、哪些部分可以进行分离2、示例代码 四、总结 一、什么是 POM POM page object model 页面对象模型 WEB 自…...

golang 定时器

写法一&#xff1a; package mainimport ("fmt""sync""time" )type DemoTicker struct {ch <-chan time.Timestop chan struct{}sg *sync.WaitGroup }func main() {count, stopCount : 0, 5demo : DemoTicker{ch: time.Tick(time.Seco…...

ETL 数据集成平台与数据仓库的关系及 ETL 工具推荐

数字化时代企业每天都会产生海量的数据&#xff0c;这些数据分散在不同的系统、数据库和应用中。为了能够有效地利用这些数据&#xff0c;进行数据分析、商业智能决策等&#xff0c;ETL数据集成平台和数据仓库成为了企业数据管理架构中的关键组成部分。本文将深入探讨ETL数据集…...

java架构设计

1.可维护性 封装性&#xff0c;例如将缓存redis封装到一个service&#xff0c;别的地方用到&#xff0c;只需要传参调用就行。如果有一天换国产缓存&#xff0c;只需要修改service&#xff0c;而不需要修改多出引用地方 * 可维护性&#xff1a;后期功能迭代&#xff0c;不可避…...

UDP--DDR--SFP,FPGA实现之指令监测模块实现

指令监测模块实现介绍 如下图所示&#xff0c;为指令监测模块的运行框图 将指令设置为8bytes数据&#xff0c;故需要一个64位寄存器进行缓存&#xff0c;在进行数据缓存时&#xff0c;数据不可以输出至下一级模块&#xff0c;故对数据和有效指示信号也应该进行相应延迟&#…...

Houdini安装SideFX Labs工具架

开源免费的 https://github.com/sideeffects/SideFXLabs/releases 下载后解压 放到文档里 新建一个packages文件夹 把SideFXLabs.json 复制到packages文件夹 删除一些没用的平台 修改相关路径即可 然后就能在houdini里搜到 autouv 节点 不然没装是没有这个节点的 参考教程 …...

uniapp+vue3+uview来开发我们的项目

前言&#xff1a; 就像我们vue的web的框架element、iview等一样&#xff0c;我们的uni-app开发也有适合的他的框架&#xff0c;除了他本身的扩展组件以外&#xff0c;第三方好用的就是就是uview了。 实现效果&#xff1a; 官网信息&#xff1a; vue2版本&#xff1a;uview-ui …...

MySQL 5.7在CentOS 7.9系统下的安装(上)——以rpm包的形式下载mysql

这里我们主要以CentOS 7.9为例进行介绍&#xff0c;会顺带讲讲Ubuntu的操作方式。 目录 一、检查自己的机器上是否安装有MySQL&#xff1a; &#xff08;1&#xff09;第一步&#xff1a;检查系统中是否有正在运行的MySQL服务&#xff1a; &#xff08;2&#xff09; 检查当…...

【图像处理基石】什么是油画感?

在图像处理中&#xff0c;“油画感”通常指图像呈现出类似油画的块状纹理、笔触痕迹或色彩过渡不自然的现象&#xff0c;表现为细节模糊、边缘不锐利、颜色断层或人工纹理明显。这种问题常见于照片处理、视频帧截图或压缩后的图像&#xff0c;本质是画质受损的一种表现。以下是…...

深度学习之优化器【从梯度下降到自适应学习率算法】(pytorch版)

文章目录 优化器&#xff08;Optimizer&#xff09;二 基础优化器1. 梯度下降&#xff08;Gradient Descent, GD&#xff09;2. 随机梯度下降&#xff08;Stochastic Gradient Descent, SGD&#xff09; 三 动量优化算法标准动量优化&#xff08;Momentum&#xff09;自适应学习…...

React+Webpack 脚手架、前端组件库搭建

链接: 自己写的开发文档&#xff0c;希望大家多多批评...

基于 Python 和 OpenAI 接口规范的本地多轮对话

在自然语言处理的应用中&#xff0c;多轮对话系统是一种极具实用性的功能&#xff0c;无论是聊天机器人、客服系统还是智能助手&#xff0c;都离不开对上下文的持续理解和响应。随着 Ollama 等轻量级模型服务的流行&#xff0c;我们也可以在本地轻松部署语言模型&#xff0c;并…...

binlog日志以及MySQL的数据同步

binlog binlog是什么 记录所有数据库表结构&#xff0c;表数据的修改&#xff0c;但是不会记录Select和Show这类操作 binlog有几种记录模式 三种记录模式 statement: 基于SQL语句的复制 row: 基于行的复制&#xff0c;记录每行数据的变更&#xff08;保证了数据的一致性&a…...

串口模块详细讲解

目录 1.串口介绍 2。STC-ISP串口功能介绍 3.接口及引脚定义 4.串口知识点 4.1 硬件电路 4.2 电平标准 4.3 相关术语 4.4 常见通信接口比较 4.5 51单片机的UART 4.6 串口参数及时序图 4.7 串口模式图 4.8 串口和中断系统 4.9 串口相关寄存器 5.串口向电脑发送信息…...

Flannel UDP 模式的优缺点

UDP 模式的特点、优缺点 优点 高兼容性&#xff1a;通过用户态 UDP 封装&#xff0c;无需内核支持 VXLAN 或其他高级网络功能&#xff0c;适用于旧版 Linux 内核或非标准环境。部署灵活&#xff1a;无需特殊内核模块或硬件支持&#xff0c;易于在异构环境中部署。简单实现&am…...

前端——布局方式

普通流&#xff08;标准流&#xff09; 所谓的标准流: 就是标签按照规定好默认方式排列. 1. 块级元素会独占一行&#xff0c;从上向下顺序排列。 常用元素&#xff1a;div、hr、p、h1~h6、ul、ol、dl、form、table 2. 行内元素会按照顺序&#xff0c;从左到右顺序排列&am…...

山东大学软件学院计算机图形学2025期末考题回忆版

任课教师&#xff1a;周元峰老师 考试时间&#xff1a;2025年5月13日 这次考试比之前的往年题多了写和读OpenGL代码的题目&#xff0c;其它和能找到的往年题&#xff08;19、21、24&#xff09;的差别不大。写完回忆题又发现自已错了好几个原题。。。。。。。。。。。。。。。…...

数控滑台:革新传统加工方式的利器

数控技术作为当今制造业中的重要发展方向&#xff0c;已深入到了各个领域&#xff0c;其中数控滑台作为数控加工领域的一个重要组成部分&#xff0c;对于提高加工效率、精度和质量具有重要意义。本文将重点探讨数控滑台的原理、优势以及在工业制造领域的应用。 一、数控滑台的…...

【WIN】笔记本电脑忘记密码解决办法/笔记本电脑重装系统笔记/bitlocker忘记密码的解决办法

通过安全模式下的CMD命令找回 具体的步骤就是&#xff1a; 首先通过笔记本的对应的一个进入安全模式的一个方式 进入安全模式之后&#xff0c;一直点着这个诊断&#xff0c;然后高级选项进去就可以看到了。 但是这种方法应该是属于安全漏洞&#xff0c;所以只适合老版本。如果是…...

手机相册的 “智能分类” 功能

我们以手机相册的 “智能分类” 功能&#xff08;识别图片中的物体类型&#xff09;为例&#xff0c;演示如何使用 TensorFlow Lite 框架将端侧模型部署到 Android 设备上。该场景通用且覆盖端侧部署的核心步骤&#xff1a;模型准备→环境配置→代码集成→硬件加速→业务调用。…...

配置Hadoop集群-上传文件

&#xff08;一&#xff09;上传小文件 上传文件的时候&#xff0c;我们传一个大一点的&#xff08;>128M&#xff09;&#xff0c;再传一个小一点的。对于大一点的文件&#xff0c;我们要去看看它是否会按128M为单位去拆分这个大文件&#xff0c;而拆分成大文件之后&#x…...

SpringBoot整合MQTT实战:基于EMQX实现双向设备通信(附源码)

简言&#xff1a; 在万物互联的时代&#xff0c;MQTT协议凭借其轻量级、高效率的特性&#xff0c;已成为物联网通信的事实标准。本教程将带领您在Ubuntu系统上搭建EMQX 5.9.0消息服务器&#xff0c;并使用Spring Boot快速实现两个客户端的高效通信。通过本指南&#xff0c;您将…...

windows c++ (9) 程序内注册服务并修改登录账户

实现方式全以批处理文件实现&#xff0c;直接在进程内调用即可 1、注册服务 注册服务manage.bat内容如下 echo off setlocalset ServiceExeYouProcess.exe set ServiceNameYouProcess set BASE%~dp0:: 检查命令行参数 if "%~1""" (echo Usage: manage_p…...

按键精灵ios脚本新增元素功能助力辅助工具开发(三)

元素节点功能&#xff08;iOSElement&#xff09;​ 在按键精灵 iOS 新版 APP v2.2.0 中&#xff0c;新增了元素节点功能 iOSElement&#xff0c;该功能包含共 15 个函数。这一功能的出现&#xff0c;为开发者在处理 iOS 应用界面元素时提供了更为精准和高效的方式。通过这些函…...