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

SpringMVC框架详解与实践指南

文章目录

  • 一、三层架构与MVC模型
    • 1. 三层架构
    • 2. MVC模型
  • 二、SpringMVC入门案例
    • 1. 环境搭建
    • 2. 核心配置
    • 3. 编写Controller
  • 三、执行流程与组件分析
  • 四、RequestMapping注解
  • 五、请求参数绑定
    • 1. 基本类型与对象绑定
    • 2. 嵌套对象与集合绑定
  • 六、中文乱码解决方案(前端传到后端)
    • 1. String转字节流(不推荐)
    • 2. Servlet中配置编码
    • 3. 过滤器(Filter)统一处理
      • 方案一:Spring框架提供的过滤器(推荐)
      • 方案二:自定义过滤器(处理GET/POST)
  • 七、自定义类型转换器
    • 1.使用DateTimeFormat注解的方式
    • 2.自定义类型转换器
  • 八、SpringMVC常用注解详解
    • 1. @RequestParam注解
    • 2. @RequestBody注解
    • 3. @PathVariable注解与Restful风格URL
    • 4. @RequestHeader注解
    • 5. @CookieValue注解
  • 总结


一、三层架构与MVC模型

1. 三层架构

表现层(WEB层):负责与客户端交互,采用MVC设计模型。

业务层:处理具体业务逻辑。

持久层:操作数据库。

2. MVC模型

Model:数据模型(如JavaBean),用于封装数据。

View:视图层(如JSP/HTML),展示数据。

Controller:控制器,接收请求并处理逻辑。

二、SpringMVC入门案例

1. 环境搭建

Maven依赖配置:

<properties><spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- Servlet API --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
</dependencies>

2. 核心配置

web.xml:

<!-- 配置DispatcherServlet -->
<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.do</url-pattern>
</servlet-mapping>

springmvc.xml:

<!-- 扫描Controller包 -->
<context:component-scan base-package="cn.tx"/>
<!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/>
</bean>

3. 编写Controller

@Controller
public class HelloController {@RequestMapping("/hello.do")public String sayHello() {System.out.println("请求处理中...");return "suc"; // 跳转到 /WEB-INF/pages/suc.jsp}
}

三、执行流程与组件分析

  1. DispatcherServlet:前端控制器,接收请求。
  2. HandlerMapping:映射请求到具体方法。
  3. HandlerAdapter:调用处理器方法。
  4. ViewResolver:解析视图名称。
  5. View:渲染结果并响应。

四、RequestMapping注解

RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系。
RequestMapping注解可以作用在方法和类上。

作用在类上:第一级的访问目录
作用在方法上:第二级的访问目录
细节:路径可以不编写 / 表示应用的根目录开始

RequestMapping的属性

  • path 指定请求路径的url
  • value value属性和path属性是一样的(可隐藏)
  • method 指定该方法的请求方式
method主要应用
get查询
post增加
delete删除
put修改
  • params 指定限制请求参数的条件
    例:
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping(path = "/save.do",method = {RequestMethod.GET},params = "username")public String save(){System.out.println("保存角色...");return "suc";}}

五、请求参数绑定

1. 基本类型与对象绑定

JSP表单:

<form action="/user/save.do" method="post">姓名:<input type="text" name="username">年龄:<input type="text" name="age"><input type="submit" value="提交">
</form>

Controller接收:

@RequestMapping("/save.do")
public String saveUser(String username, Integer age) {System.out.println("用户名:" + username + ",年龄:" + age);return "suc";
}

2. 嵌套对象与集合绑定

JavaBean:

public class User {private String username;private Address address;    // 嵌套对象private List<Address> list; // List对象集合private List<Strig> list1; // List字符串集合private Map<String, String> map; // Map集合
}

JSP表单:

<!-- 嵌套对象 -->
<input type="text" name="address.city">
<!-- List集合 -->
<input type="text" name="list[0].city">
<input type="text" name="list[1].city">
<input type="text" name="list1[0]">
<input type="text" name="list1[1]">
<!-- Map集合 -->
<input type="text" name="map['key1']">
<input type="text" name="map['key2']">

Controller接收:

 @RequestMapping("/save1.do")public String save1(User user){System.out.println("user对象:"+user);return "suc";}

六、中文乱码解决方案(前端传到后端)

1. String转字节流(不推荐)

适用场景:GET请求参数乱码(不推荐,仅作临时方案)
实现原理:将接收到的参数从默认的ISO-8859-1编码转换为UTF-8

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");

缺点:需逐个参数处理,代码冗余,无法覆盖所有请求类型。

2. Servlet中配置编码

适用场景:POST请求的表单数据
实现原理:在Servlet的doPost方法中设置request和response编码。

// 在Servlet中配置
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");// 其他处理逻辑
}

配置位置:若使用SpringMVC,可在web.xml中全局配置:

<!-- 仅对POST有效 -->
<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

局限性:无法解决GET请求的乱码问题(GET参数通过URL传递)。

3. 过滤器(Filter)统一处理

方案一:Spring框架提供的过滤器(推荐)

适用场景:所有请求类型(需额外处理GET)
配置方法:在web.xml中添加以下配置:

<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!-- 指定字符集 --><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

作用范围:自动处理所有请求和响应的编码,但对GET请求需结合Tomcat配置。

方案二:自定义过滤器(处理GET/POST)

适用场景:需要兼容GET请求且无法修改Tomcat配置时
实现步骤:

编写过滤器类:

public class CustomEncodingFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 设置请求编码request.setCharacterEncoding("UTF-8");// 处理GET请求参数(Tomcat 8+默认UTF-8,低版本需手动解码)if (request instanceof HttpServletRequest) {HttpServletRequest req = (HttpServletRequest) request;if ("GET".equalsIgnoreCase(req.getMethod())) {Map<String, String[]> params = req.getParameterMap();for (Map.Entry<String, String[]> entry : params.entrySet()) {String[] values = entry.getValue();for (int i = 0; i < values.length; i++) {values[i] = new String(values[i].getBytes("ISO-8859-1"), "UTF-8");}}}}// 设置响应编码response.setCharacterEncoding("UTF-8");chain.doFilter(request, response);}
}

配置web.xml:

<filter><filter-name>customEncodingFilter</filter-name><filter-class>com.example.CustomEncodingFilter</filter-class>
</filter>
<filter-mapping><filter-name>customEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

优点:全面覆盖GET/POST请求,兼容性更强。

七、自定义类型转换器

1.使用DateTimeFormat注解的方式

JavaBean:

public class User {
@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;}

springmvc.xml:

<mvc:annotation-driven></mvc:annotation-driven>

JSP表单:

<<form action="/user/save2.do" method="post">生日:<input type="text" name="birthday" placeholder="yyyy-MM-dd"/><br/><input type="submit" value="提交" />
</form>

Controller接收:

@RequestMapping("/save2.do")public String save2(User user){System.out.println("user对象:"+user);return "suc";}

2.自定义类型转换器

StringToDate类:

package cn.tx.demo2.Date;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/**** 自定义类型转换器 把String转换成Date*/
public class StringToDate implements Converter<String,Date>{/*** 进行类型转换的方法* @param s     用户输入的内容* @return*/@Overridepublic Date convert(String s) {// 判断if(s == null){throw new RuntimeException("请输入内容");}// 进行转换SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {// 进行转换return sdf.parse(s);} catch (ParseException e) {throw new RuntimeException(e);}}}

springmvc.xml:

<!--配置日期类型转换器,类型转换器的组件,把日期类型转换注入到组件对象中--><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><bean class="cn.tx.demo2.Date.StringToDate" /></set></property></bean><!--让映射器、适配器和处理器生效(默认不配置也是可以的)--><mvc:annotation-driven conversion-service="conversionService"/>

八、SpringMVC常用注解详解

1. @RequestParam注解

@RequestParam注解主要用于将请求中的指定名称参数传递给控制器的形参进行赋值。它包含以下属性:

  • value:用于指定请求参数的名称;
  • required:表示请求参数是否为必须提供,默认值为true,若设为false,当请求中无对应参数时不会报错;
  • defaultValue:当请求中未传递该参数时,使用设置的默认值。
package cn.tx.demo3;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
@RequestMapping("/dept")
public class DeptController {@RequestMapping("/save1.do")public String save(@RequestParam(value = "username", required = false, defaultValue = "abc") String name) {System.out.println("姓名:" + name);return "suc";}
}

在上述代码中,@RequestParam注解将请求中的username参数赋值给name变量,若请求未携带username参数,name将使用默认值"abc"

2. @RequestBody注解

@RequestBody注解用于获取请求体的内容,需要注意的是,该注解不适用于GET请求。它只有一个required属性,用于表示请求体是否为必须存在,默认值为true

@RequestMapping("/save2.do")
public String save2(@RequestBody String body) {System.out.println("请求体内容:" + body);return "suc";
}

通过@RequestBody,可以方便地获取客户端在请求体中发送的数据,常用于处理JSON、XML等格式的请求数据。

3. @PathVariable注解与Restful风格URL

@PathVariable注解用于绑定URL中的占位符,使URL中的参数能够传递到控制器方法中。其value属性用于指定URL中占位符的名称。

Restful风格的URL具有结构清晰、符合标准、易于理解和扩展方便等优点,它可以根据不同的请求方式(如GETPOSTPUTDELETE等),在相同的请求路径下执行后台不同的方法。

package cn.tx.demo3;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@Controller
public class EmpController {@RequestMapping(path = "/emp", method = RequestMethod.POST)public String save() {System.out.println("保存员工...");return "suc";}@RequestMapping(path = "/emp", method = RequestMethod.GET)public String findAll() {System.out.println("查询员工...");return "suc";}@RequestMapping(path = "/emp/{id}", method = RequestMethod.GET)public String findById(@PathVariable(value = "id") Integer id) {System.out.println("通过id查询员工..." + id);return "suc";}
}

上述代码中,通过@PathVariable获取URL中的id参数,实现了根据不同的请求方式和参数执行相应业务逻辑。同时,为了更好地支持Restful风格URL,前端控制器的配置需将url-pattern设为/,以便更灵活地处理各类请求。

<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

4. @RequestHeader注解

@RequestHeader注解用于获取指定请求头的值,通过value属性指定请求头名称。

@RequestMapping("/save3.do")
public String save3(@RequestHeader(value = "Accept") String header) {System.out.println("Accept请求头的值:" + header);return "suc";
}

在实际开发中,该注解可用于获取诸如User - AgentReferer等请求头信息,便于进行请求来源判断、客户端类型识别等操作。

5. @CookieValue注解

@CookieValue注解用于获取指定Cookie名称的值,通过value属性指定Cookie的名称。

@RequestMapping("/save4.do")
public String save4(@CookieValue(value = "JSESSIONID") String cookie) {System.out.println("值:" + cookie);return "suc";
}

利用该注解,可以方便地获取客户端发送的Cookie信息,常用于用户会话管理、身份验证等场景 。


总结

SpringMVC通过清晰的组件分工简化了Web开发,结合参数绑定和视图解析器,能高效处理请求。中文乱码需根据场景选择方案,推荐使用过滤器。对于复杂数据(如Map),只需确保前端参数命名规范即可自动绑定。

相关文章:

SpringMVC框架详解与实践指南

文章目录 一、三层架构与MVC模型1. 三层架构2. MVC模型 二、SpringMVC入门案例1. 环境搭建2. 核心配置3. 编写Controller 三、执行流程与组件分析四、RequestMapping注解五、请求参数绑定1. 基本类型与对象绑定2. 嵌套对象与集合绑定 六、中文乱码解决方案(前端传到后端)1. Str…...

C语言 ——— 函数

目录 函数是什么 库函数 学习使用 strcpy 库函数 自定义函数 写一个函数能找出两个整数中的最大值 写一个函数交换两个整型变量的内容 牛刀小试 写一个函数判断一个整数是否是素数 写一个函数判断某一年是否是闰年 写一个函数&#xff0c;实现一个整型有序数组的二分…...

洛谷 P9007 [入门赛 #9] 最澄澈的空与海 (Hard Version)

这道题可不入门。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 给定 n n n&#xff0c;求有多少组 ( x , y , z ) (x,y,z) (x,y,z) 满足&#xff1a; x − y z n ! x-\dfrac{y}{z}n! x−zy​n! x − y z n ! n \dfrac{x-y…...

Java基础学完,继续深耕(0505)Linux 常用命令

昨天休息了一天&#xff0c;没有写csdn 昨天和今天把Linux大概学了一下。总结一下常用命令&#xff0c;总结的不全。 Linux目录结构 / 是所有目录的顶点 目录结构像一颗倒挂的树 注意&#xff1a;/itheima 是绝对路径&#xff0c;是指根目录 / 下的itheima目录 itheima…...

详解 FFMPEG 交叉编译 `FLAGS` 和 `INCLUDES` 的作用

FLAGS 和 INCLUDES这两行是 Android NDK 编译时的编译器选项&#xff0c;用于控制代码生成、优化、调试、安全性和头文件搜索路径。下面逐项详解&#xff1a; 1. FLAGS 详解&#xff08;编译器选项&#xff09; FLAGS 定义了传递给 C/C 编译器&#xff08;如 clang 或 gcc&…...

DGI数据治理框架的最佳实践

以下是针对DGI数据治理框架的最佳实践推荐&#xff0c;结合其核心理念与实际应用场景&#xff0c;帮助组织高效落地数据治理&#xff0c;释放数据价值。 一、组织架构与角色分工 最佳实践1&#xff1a;建立清晰的数据治理委员会 • 实践要点&#xff1a; • 由高层领导&#…...

C++类与对象深度解析:从基础到应用

目录&#xff1a; 1. 类的基本概念与定义1.1 类的定义与访问限定符1.2 实例化与对象内存布局1.3 this指针 2.类的默认成员函数2.1 构造函数与析构函数详解构造函数析构函数 2.2 拷贝构造函数2.3 赋值运算符重载运算符重载 3. 初始化列表4.类型转换5. 静态成员6.友元和内部类6.1…...

JGQ611Ⅱ数据采集电除雾器实验装置

JGQ611Ⅱ数据采集电除雾器实验装置 一.实验目的 1.掌握电除雾器的结构特征与工作原理。 2.测定风压、风速、电压、电流板间距等因素对酸雾去除效率的影响。 3.测定电除雾器的工作效率。 二.技术指标 1.电场电压&#xff1a;0&#xff5e;20KV&#xff08;可调&#xff09;。 2.…...

如何判断cgroup的版本?

在 Linux 系统中&#xff0c;判断当前使用的 cgroup 版本&#xff08;v1 还是 v2&#xff09;可以通过以下几种方法&#xff1a; 方法一&#xff1a;查看挂载点&#xff08;最直接&#xff09; mount | grep cgroup输出分析 cgroups v1&#xff1a;存在多个以 cgroup 开头的…...

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统 文章目录 基于 Spark 和 Hadoop 的空气质量数据分析与预测系统引言项目目标技术栈数据来源系统核心功能1. 用户认证与管理2. 数据总览3. 空气质量分析4. 词云图5. AQI 预测 项目结构预览关键代码分享1. Flask 主文件&#x…...

qt csv文件写操作

实例1&#xff1a; QStringList header; header << "1" << "2"; QStringList footer; footer << "Here is a footer"; QStringList strList; strList << "one" << "two" <&l…...

Java 反射

反射 反射的概述 获取class对象的三种方式 代码实现 package myreflect1;public class MyReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException {//1.第一种方式//全类名&#xff1a;包名类名//最为常用Class clazz1 Class.forName("…...

Spring-使用Java的方式配置Spring

目录 前言 一、使用Java配置Spring 前言 使用纯Java的配置方式&#xff0c;在SpringBoot中随处可见&#xff0c;是必须要学习的 一、使用Java配置Spring 配置Spring有多种方式&#xff0c;我们现在要完全不使用Spring的xml配置了&#xff0c;全权交给Java来做&#xff01; J…...

cudaMalloc函数说明

cudaMalloc函数说明 cudaError_t cudaMalloc(void** devPtr, size_t size);参数说明 devPtr (输出参数): 类型为 void**&#xff0c;即指向指针的指针。函数执行成功后&#xff0c;*devPtr 将被赋值为 GPU 内存的起始地址。例如&#xff1a;若分配一个 float 数组&#xff0c;需…...

路由协议(静态路由、RIP、OSPF、BGP)

目录 静态路由 RIP OSP BGP 总结 静态路由 定义&#xff1a;由网络管理员手动配置的路由。它不会自动更新&#xff0c;除非管理员手动修改。 特点&#xff1a; 简单&#xff1a;配置简单&#xff0c;适合小型网络。安全&#xff1a;不会与其他路由器交换路由信息&#x…...

基于 HTML5 的贪吃蛇小游戏实现

一、引言 在 Web 开发的世界中&#xff0c;利用 HTML、CSS 和 JavaScript 构建有趣的互动游戏是一项充满乐趣和挑战的任务。本文将详细介绍一个基于 HTML5 的贪吃蛇小游戏的实现过程&#xff0c;通过对代码的解析&#xff0c;带你了解如何打造一个经典的贪吃蛇游戏&#xff0c…...

学习Linux的第二天

如何在Linux环境下做开发 Linux的一些基操 Tips&#xff1a;平常最表层的是命令行模式&#xff0c;最多见这个默认叫做命令行模式 Vi操作是什么意思呢 就是在提示符输入vi a.c 是可以创建一个a.c这个文件并进入这个输入模式 按i可以输入代码 要退出的时候按esc 再按:(冒号…...

rollout 是什么:机器学习(强化学习)领域

rollout 是什么:机器学习(强化学习)领域 指从特定初始状态开始,按照某个策略或模型进行一系列动作和状态转移,直到达到终止状态或预定时间步数 。比如: 迷宫任务:强化学习代理在迷宫中,从起始点出发,按某策略(如随机选方向走)进行移动,直到找到出口或达到最大移动…...

MATLAB人工大猩猩部队GTO优化CNN-LSTM多变量时间序列预测

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 数据准备 2 CNN-LSTM模型搭建 3 GTO超参数优化 3.1 GTO函数极值寻优 3.2 GTO优化CNN-LSTM超参数 3.3 主程序 4 结语 0 引言…...

android-ndk开发(3): 连接设备到开发机

android-ndk开发(3): 连接设备到开发机 2025/05/05 1. 术语解释 用来写代码的电脑&#xff0c; 我叫做开发机。 我打心底认为 Windows, Linux, macOS 都是 PC&#xff0c; 但是有些人不这么认为&#xff0c; 那就还是叫开发机。 android 手机能运行 app&#xff08;众所周知…...

谷歌最新推出的Gemini 2.5 Flash人工智能模型因其安全性能相较前代产品出现下滑

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Kubernetes排错(七)-节点排错

1、节点 Crash 与 Vmcore 分析 kdump 介绍​ 目前大多 Linux 发新版都会默认开启 kdump 服务&#xff0c;以方便在内核崩溃的时候, 可以通过 kdump 服务提供的 kexec 机制快速的启用保留在内存中的第二个内核来收集并转储内核崩溃的日志信息(vmcore 等文件), 这种机制需要服务…...

《架构安全原则》解锁架构安全新密码

The Open Group最新发布的《架构安全原则》标准中文版为企业架构、技术架构、解决方案架构以及安全架构领域的专业人员提供了一套系统化、可落地的安全设计准则。这一权威文件旨在帮助组织在数字化转型的复杂环境中构建既安全又敏捷的架构体系&#xff0c;其内容与TOGAF标准、N…...

生物化学笔记:神经生物学概论10 运动节律的控制 运动时脑内活动 运动系统疾病及其治疗(帕金森、亨廷顿)

运动节律的控制 运动时脑内活动 运动系统疾病及其治疗 口服多巴胺无法穿越“血脑屏障”&#xff0c;进不到脑子里去&#xff0c;其前体(原材料)能进入血脑屏障。一直吃药&#xff0c;机体会偷懒。另一方面&#xff0c;会影响脑子其他部分。 损毁也只能暂时解决&#xff0c;黑质…...

DDR在PCB布局布线时的注意事项及设计要点

一、布局注意事项 控制器与DDR颗粒的布局 靠近原则&#xff1a;控制器与DDR颗粒应尽量靠近&#xff0c;缩短时钟&#xff08;CLK&#xff09;、地址/控制线&#xff08;CA&#xff09;、数据线&#xff08;DQ/DQS&#xff09;的走线长度&#xff0c;减少信号延迟差异。 分组隔…...

Paramiko源码深入解析

Paramiko是一个基于Python的SSHv2协议实现库&#xff0c;支持远程命令执行、文件传输&#xff08;SFTP&#xff09;和安全隧道功能。以下是对其源码的深入解析&#xff0c;涵盖核心模块、关键流程及实现细节。 1. 核心模块与结构 Paramiko的源码结构围绕SSH协议的各个层次设计…...

音频感知动画新纪元:Sonic让你的作品更生动

前言 在现代肖像动画领域,如何精准地控制画面中的焦点,确保声音和画面完美契合,已成为了一个十分值得探索的话题。于是,Sonic 方法应运而生,这种创新的音频感知技术,旨在让肖像动画中的焦点能够与音频内容同步,从而提升整体的沉浸感和表现力。在ComfyUI 中实现这一功能…...

uniapp开发06-视频组件video的使用注意事项

uniapp开发-视频组件video的使用注意事项&#xff01;实际项目开发中&#xff0c;经常会遇到视频播放的业务需求。下面简单讲解一下&#xff0c;uniapp官方提供的视频播放组件video的常见参数和实际效果。 1&#xff1a;先看代码&#xff1a; <!--视频组件的使用展示-->…...

英伟达语音识别模型论文速读:Fast Conformer

Fast Conformer&#xff1a;一种具有线性可扩展注意力的高效语音识别模型 一、引言 Conformer 模型因其结合了深度可分离卷积层和自注意力层的优势&#xff0c;在语音处理任务中取得了出色的性能表现。然而&#xff0c;Conformer 模型存在计算和内存消耗大的问题&#xff0c;…...

利用jQuery 实现多选标签下拉框,提升表单交互体验

在 Web 开发中&#xff0c;表单设计常常需要支持用户选择多个选项的场景。传统的多选框或下拉菜单在处理大量选项时&#xff0c;可能会影响界面美观和操作便捷性。这时&#xff0c;多选标签下拉框就成为了一种优雅的解决方案。本文将详细介绍如何通过 HTML、CSS 和 jQuery 实现…...

基于 HTML 和 CSS 实现的 3D 翻转卡片效果

一、引言 在网页设计中&#xff0c;为了增加用户的交互体验和视觉吸引力&#xff0c;常常会运用一些独特的效果。本文将详细介绍一个基于 HTML 和 CSS 实现的 3D 翻转卡片效果&#xff0c;通过对代码的剖析&#xff0c;让你了解如何创建一个具有立体感的卡片&#xff0c;在鼠标…...

【阿里云大模型高级工程师ACP学习笔记】2.9 大模型应用生产实践 (下篇)

特别说明:由于这一章节是2025年3月官方重点更新的部分,新增内容非常多,因此我不得不整理成上、下两篇,方便大家参考。 学习目标 备考阿里云大模型高级工程师ACP认证的这部分内容,旨在深入理解大模型应用在安全合规方面的要求,掌握模型部署相关要点,提升实际操作和应对复…...

MVC、MVP、MVVM三大架构区别

1、MVC架构 M&#xff08;Model&#xff09;&#xff1a;主要处理数据的存储、获取、解析。 V&#xff08;View&#xff09;&#xff1a;即Fragement、Activity、View等XML文件 C&#xff08;Controller&#xff09;&#xff1a;主要功能为控制View层数据的显示&#xff0c;…...

期末代码Python

以下是 学生信息管理系统 的简化版代码示例&#xff08;控制台版本&#xff0c;使用文件存储数据&#xff09;&#xff0c;包含核心功能&#xff1a; 1. 定义学生类 class Student: def __init__(self, sid, name, score): self.sid sid # 学号 self.name name # 姓名 self.s…...

ecat总线6000段定义

1ecat总线 不适合新手学习&#xff0c;我复习用的。 can和ecat是一家的&#xff0c;就跟C和C的关系。 参考CIA402定义 2 PDOr⬇️ 主站发送到终端伺服。 有4组&#xff0c;0x1600 3 PDOt⬆️ 伺服驱动器发送到主站。 我记得有4组&#xff0c;但这款伺服只有2组。 4 速度模…...

数据管理能力成熟度评估模型(DCMM)全面解析:标准深度剖析与实践创新

文章目录 一、DCMM模型的战略价值与理论基础1.1 DCMM的本质与战略定位1.2 DCMM的理论基础与创新点 二、DCMM模型的系统解构与逻辑分析2.1 八大能力域的有机关联与系统架构2.2 五级成熟度模型的内在逻辑与演进规律 三、DCMM八大能力域的深度解析与实践创新3.1 数据战略&#xff…...

Python精进系列:random.uniform 函数的用法详解

目录 &#x1f50d; 一、引言&#x1f4cc; 二、函数定义与参数说明✅ 函数定义⚙️ 参数说明 &#x1f9ea; 三、使用示例1️⃣ 生成单个随机数2️⃣ 生成多个随机数3️⃣ 生成二维坐标 &#x1f3af; 四、应用场景&#x1f9ea; 模拟实验&#x1f4ca; 数据采样&#x1f3ae;…...

观察者模式(Observer Pattern)

&#x1f9e0; 观察者模式&#xff08;Observer Pattern&#xff09; 观察者模式是一种行为型设计模式。它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。通常用于事件驱动的编程场景中。 &am…...

【论文阅读】Joint Deep Modeling of Users and Items Using Reviews for Recommendation

Joint Deep Modeling of Users and Items Using Reviews for Recommendation 题目翻译&#xff1a;利用评论对用户和项目进行联合深度建模进行推荐 原文地址&#xff1a;点这里 关键词&#xff1a; DeepCoNN、推荐系统、卷积神经网络、评论建模、协同建模、评分预测、联合建模…...

webpack 的工作流程

Webpack 的工作流程可以分为以下几个核心步骤&#xff0c;我将结合代码示例详细说明每个阶段的工作原理&#xff1a; 1. 初始化配置 Webpack 首先会读取配置文件&#xff08;默认 webpack.config.js&#xff09;&#xff0c;合并命令行参数和默认配置。 // webpack.config.js…...

Linux 常用指令详解

Linux 操作系统中有大量强大的命令行工具&#xff0c;下面我将分类介绍一些最常用的指令及其用法。 ## 文件与目录操作 ### 1. ls - 列出目录内容 ls [选项] [目录名] 常用选项&#xff1a; - -l&#xff1a;长格式显示&#xff08;详细信息&#xff09; - -a&#xff1a;显…...

DXFViewer进行中 : ->封装OpenGL -> 解析DXF直线

DXFViewer进行中,目标造一个dxf看图工具。. 目标1&#xff1a;封装OpenGL,实现正交相机及平移缩放功能 Application.h #pragma once #include <string> #include <glad/glad.h> #include <GLFW/glfw3.h> #include "../Core/TimeStamp.h" #includ…...

多序列比对软件MAFFT介绍

MAFFT(Multiple Alignment using Fast Fourier Transform)是一款广泛使用且高效的多序列比对软件,由日本京都大学的Katoh Kazutaka等人开发,最早发布于2002年,并持续迭代优化至今。 它支持从几十条到上万条核酸或蛋白质序列的快速比对,同时在准确率和计算效率之间提供灵…...

基于 HTML5 Canvas 实现图片旋转与下载功能

一、引言 在 Web 开发中&#xff0c;经常会遇到需要对图片进行处理并提供下载功能的需求。本文将深入剖析一段基于 HTML5 Canvas 的代码&#xff0c;该代码实现了图片的旋转&#xff08;90 度和 180 度&#xff09;以及旋转后图片的下载功能。通过对代码的解读&#xff0c;我们…...

学习路线(机器人系统)

机器人软件/系统学习路线&#xff08;从初级到专家&#xff09; 初级阶段&#xff08;6-12个月&#xff09;基础数学编程基础机器人基础概念推荐资源 中级阶段&#xff08;1-2年&#xff09;机器人运动学机器人动力学控制系统感知系统推荐资源 高级阶段&#xff08;2-3年&#…...

基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的网络安全防火墙技术方案‌(国产化替代J1900的全栈技术解析)

‌基于EFISH-SCB-RK3576/SAIL-RK3576的网络安全防火墙技术方案‌ &#xff08;国产化替代J1900的全栈技术解析&#xff09; ‌一、硬件架构设计‌ ‌流量处理核心模块‌ ‌多核异构架构‌&#xff1a; ‌四核Cortex-A72&#xff08;2.3GHz&#xff09;‌&#xff1a;处理深度…...

基于 jQuery 实现复选框全选与选中项查询功能

在 Web 开发中&#xff0c;复选框是常见的交互元素&#xff0c;尤其是在涉及批量操作、数据筛选等场景时&#xff0c;全选功能和选中项查询功能显得尤为重要。本文将介绍如何使用 HTML、CSS 和 jQuery 实现一个具备全选、反选以及选中项查询功能的复选框组&#xff0c;帮助开发…...

Python中的JSON库,详细介绍与代码示例

目录 1. 前言 2. json 库基本概念 3. json 的适应场景 4. json 库的基本用法 4.1 导 json入 模块 4.2 将 Python 对象转换为 JSON 字符串 4.3 将 JSON 字符串转换为 Python 对象 4.4 将 Python 对象写入 JSON 文件 4.5 从 JSON 文件读取数据 4.6 json 的其他方法 5.…...

tensorflow 调试

tensorflow 调试 tf.config.experimental_run_functions_eagerly(True) 是 TensorFlow 中的一个配置函数&#xff0c;它的作用是&#xff1a; 让 tf.function 装饰的函数以 Eager 模式&#xff08;即时执行&#xff09;运行&#xff0c;而不是被编译成图&#xff08;Graph&…...

iptables的基本选项及概念

目录 1.按保护范围划分&#xff1a; 2.iptables 的基础概念 4个规则表&#xff1a; 5个规则链&#xff1a; 3.iptables的基础选项 4.实验 1.按保护范围划分&#xff1a; 主机防火墙&#xff1a;服务范围为当前一台主机 input output 网络防火墙&#xff1a;服务范围为防…...