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

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章:三层架构和MVC

  1. 三层架构:
    1. 开发服务器端,一般基于两种形式,一种 C/S 架构程序,一种 B/S 架构程序
    2. 使用 Java 语言基本上都是开发 B/S 架构的程序,B/S 架构又分成了三层架构
    3. 三层架构:
      1. 表现层:WEB 层,用来和客户端进行数据交互的。表现层一般会采用 MVC的设计模型
      2. 业务层:处理公司具体的业务逻辑
      3. 持久层:用来操作数据库
  2. MVC 模型:
    1. MVC 全名是 Model View Controller 模型事务控制器,每个部分各司其职
    2. Model:数据模型,JavaBean 的类,用来进行数据封装
    3. View:指 JSP、HTML 用来展示数据给用户
    4. Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等

第二章:SpringMVC 的入门案例

  1. SpringMVC 的概述:
    1. SpringMVC 是一种基于 Java 实现的 MVC 设计模型的请求驱动类型的轻量级 WEB 框架
    2. SpringMVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 WEB 应用程序的全功能 MVC 模块
    3. 使用 Spring 可插入的 MVC 框架,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring 的 SpringMVC 框架或集成其它 MVC 开发框架,如 Struts1(现在一般不用),Struts2 等。
  2. SpringMVC 的入门程序:
    1.  创建 WEB 工程,引入 maven 依赖:
       <!-- 版本锁定 --><properties><spring.version>5.0.2.RELEASE</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency>
      ​<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency>
      ​<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency>
      ​<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
      ​<dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies>
    2. 编写 index.jsp 页面:
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head><title>入门程序</title>
      </head>
      <body><%-- 超链接 --%><h3>入门案例</h3><a href="hello">入门程序</a>
      </body>
      </html>
    3. 编写 suc.jsp 页面,路径为:/WEB-INF/pages/suc.jsp
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head><title>成功</title></head>
      <body><h3>成功跳转</h3></body>
      </html>
    4. 编写 Controller 类和方法:
      @Controller
      public class HelloController {@RequestMapping("/hello")public String sayHello(){System.out.println("入门方法已执行");return "suc";}}
    5. 在 web.xml 配置文件中核心控制器(DisPatcherServlet):
      <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><!--配置解决中文乱码问题的过滤器--><!-- 过滤器的位置应放在最前面 --><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><!--该位置和 dispatcherServlet 的配置有区别,这里多加了一个 * --></filter-mapping><!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载springmvc.xml配置文件,配置的是Spring配置--><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></web-app>
    6. 编写 Springmvc.xml 的配置文件:
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置spring 创建容器时要扫描的包 --><context:component-scan base-package="com.qcby.mybatis"></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!-- 配置 Spring 开启注解 mvc 的支持 --><mvc:annotation-driven></mvc:annotation-driven></beans>
    7. 启动服务进行测试
  3. 入门案例的执行过程分析:
    1. 当启动 Tomcat 服务器的时候,因为配置了 load-on-startup 标签,所以会创建 DispatcherServlet 对象,就会加载 springmvc.xml 配置文件
    2. 开启了注解扫描,那么 HelloController 对象就会被创建
    3. 从 index.jsp 发送请求,请求会先达到 DispatcherServlet 核心控制器,根据配置 @RequestMapping 注解找到的具体方法
    4. 根据执行的方法的返回值,再根据配置的解析器,去指定的目录下查找指定名称的 JSP 文件
    5. Tomcat 服务器渲染页面,做出响应
  4. 组件分析:
    1. 前端控制器:DispatcherServlet
    2. 处理器映射器:HandlerMapping
    3. 处理器:Handler
    4. 处理器适配器:HandlerAdapter
    5. 视图解析器:View Resolver
    6. 视图:View
  5. @RequestMapping 注解:
    1. 作用:
      1. 是建立请求 URL 和处理方法之间的对应关系
      2. 该注解可以作用在方法
    2. 属性值:
      1. path:指定请求路径的 url
      2. value:value 属性和 path 属性是一样的
      3. method:指定该方法的请求方式
      4. params:指定限制请求参数的条件
        @Controller
        public class HelloController {@RequestMapping("/hello")public String sayHello(){System.out.println("入门方法已执行");return "suc";}@RequestMapping(path = "/save",method = {RequestMethod.GET},params = "username")public String save(){System.out.println("保存角色");return "suc";}}

第三章:请求参数的绑定

  1. 绑定机制:
    1. 表单提交的数据都是 K-V 格式的: username=haha&password=123
    2. SpringMVC 的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
    3. 要求:提交表单的 name 和参数的名称是相同的
  2. 支持的数据类型:
    1. 基本数据类型和字符串类型
    2. 实体类型(JavaBean)
    3. 集合数据类型(List、map集合等)
  3. 基本数据类型和字符串类型:
    1. 提交表单的 name 和参数的名称是相同的
    2. 区分大小
  4. 实体类型(JavaBean):
    1. 提交表单的 name 和 JavaBean 中的属性名称需要一致
    2. 如果一个 JavaBean 类中包含其它的引用类型,那么表单的 name 属性需要编写成:对象.属性
      1. 例如:address.name
  5. 给集合属性数据封装:
    1. JSP 页面编写方式:list[0].属性值
  6. 案例:
    1. JSP 代码:
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head><title>请求参数绑定</title>
      </head>
      <body><h3>请求参数绑定入门</h3><form action="/user/save1" method="post">名称:<input type="text" name="username"/><br/>年龄:<input type="text" name="age"/><br/><input type="submit" value="提交"/></form><h3>请求参数绑定-实体类</h3><form action="/user/save2" method="post">姓名:<input type="text" name="username"/><br/>年龄:<input type="text" name="age"/><br/>金额:<input type="text" name="address.money"/><br/><input type="submit" value="提交"></form><h3>请求参数绑定-集合</h3><form action="/user/save3" method="post">姓名:<input type="text" name="username"/><br/>年龄:<input type="text" name="age"/><br/>金额:<input type="text" name="address.money"/><br/>集合:<input type="text" name="list[0].money"/><br/>集合:<input type="text" name="list[1].money"/><br/><input type="submit" value="提交"></form>
      </body>
      </html>
    2. JavaBean代码:
      package com.qcby.mybatis.pojo;import java.io.Serializable;
      import java.util.List;public class User implements Serializable {private String username;private Integer age;//引用对象private Address address;//list 集合private List<Address> list;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public List<Address> getList() {return list;}public void setList(List<Address> list) {this.list = list;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", age=" + age +", address=" + address +", list=" + list +'}';}
      }//Address 实体类
      import java.io.Serializable;public class Address implements Serializable {private Double money;public Double getMoney() {return money;}public void setMoney(Double money) {this.money = money;}@Overridepublic String toString() {return "Address{" +"money=" + money +'}';}
      }
    3. controller代码:
      @Controller
      @RequestMapping(("/user"))
      public class UserController {@RequestMapping(value = "/save1")public String save1(String username,Integer age){System.out.println("姓名:" + username);System.out.println("年龄:" + age);return "suc";}@RequestMapping("/save2")public String save2(User user){System.out.println("user对象:" + user);return "suc";}@RequestMapping("/save3")public String save3(User user){System.out.println("user对象:" + user);return "suc";}
      }
    4. 在请求参数中文乱码的解决:
           <!-- 配置过滤器,解决中文乱码的问题 --><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>
  7. 自定义类型转换器:
    1. 第一种方式使用 DataTimeFormat 注解的方式:
      import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
      import java.util.Date;
      import java.util.List;public class User implements Serializable {private String username;private Integer age;//生日//2000-11-11 格式的日期不能进行转化了,开发时使用是比较多且比较简单@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;//引用对象private Address address;//list 集合private List<Address> list;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public List<Address> getList() {return list;}public void setList(List<Address> list) {this.list = list;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", age=" + age +", birthday=" + birthday +", address=" + address +", list=" + list +'}';}
      }
    2. 第二种方式:自定义类型转换器。如果想自定义数据类型转换,可以实现 Converter 的接口
      1. 自定义类型转换器:
        import org.springframework.core.convert.converter.Converter;import java.text.ParseException;
        import java.text.SimpleDateFormat;
        import java.util.Date;
        import java.util.SimpleTimeZone;public class StringToDate implements Converter<String, Date> {@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);}}
        }
      2. 注册自定义类型转换器,在 spirngmvc.xml 配置文件中编写配置
        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置spring 创建容器时要扫描的包 --><context:component-scan base-package="com.qcby.mybatis"></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!-- 配置日期类型转换器,类型转换器的组件,把日期类型转换注入到组件对象中 --><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><bean class="com.qcby.mybatis.pojo.StringToDate"/></set></property></bean><!--让映射器、适配器和处理器生效(默认不配置也是可以的)--><mvc:annotation-driven conversion-service="conversionService"/>
        </beans>
  8. 在控制器中使用原生的 ServletAPI 对象:
    1. 只需要在控制器的方法参数定义 HttpServletRequest 和 HttpServletResponse 对象
      @RequestMapping("/save4")
      public String save4(HttpServletRequest request, HttpServletResponse response){System.out.println(request);//获取到 HttpSession 对象HttpSession session = request.getSession();System.out.println(session);System.out.println(response);return "suc";
      }

相关文章:

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…...

结合帧级边界检测和深度伪造检测,定位部分伪造音频攻击中的篡改区域

Integrating frame-level boundary detection and deepfake detection for locating manipulated regions in partially spoofed audio forgery 摘要&#xff1a; 部分伪造音频是一种深度伪造的变体&#xff0c;它通过引入伪造或外部来源的善意音频片段来操纵音频语句&#xf…...

人工智能之深度学习_[2]-PyTorch入门

文章目录 PyTorch1.PyTorch简介1.1 什么是PyTorch1.2 PyTorch特点1.3 PyTorch发展历史 2 张量创建2.1 什么是张量2.2 基本创建方式2.3 线性和随机张量2.4 0、1、指定值张量2.5 指定元素类型张量 3 张量类型转换3.1 张量转换为NumPy数组3.2 NumPy数组转换为张量3.3 提取标量张量…...

vue2与vue3的区别

目录 1. 性能 2. 组合式 API 3. 生命周期钩子 4. 片段&#xff08;Fragments&#xff09; 5. 递归组件 6. 自定义渲染器 7. 全局 API 8. 组件内部的 this 9. 模板语法 10. 兼容性 总结 Vue 2 和 Vue 3 是 Vue.js 框架的两个主要版本&#xff0c;它们在多个方面有所不…...

八股学习 Mysql

八股学习 Mysql 常见面试问题优化其他 定位慢查询方案一&#xff1a;开源工具方案二&#xff1a;MySQL自带慢日志 SQL执行计划示例场景名词解释 索引概念底层数据结构聚簇索引、二级索引&#xff08;非聚簇索引&#xff09;覆盖索引覆盖索引应用场景创建原则索引失效 SQL优化表…...

主从复制

简述mysql 主从复制原理及其工作过程&#xff0c;配置一主两从并验证。 主从原理&#xff1a;MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二…...

服务器数据恢复—Zfs文件系统数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台zfs文件系统的服务器&#xff0c;管理员误操作删除了服务器上的数据。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有硬盘做好标记后取出&#xff0c;硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘…...

Linux安装docker,安装配置xrdp远程桌面

Linux安装docker&#xff0c;安装配置xrdp远程桌面。 1、卸载旧版本docker 卸载旧版本docker命令 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine现在就是没有旧版本的d…...

Windows11电脑总是一闪一闪的,黑一下亮一些怎么解决

Windows11电脑总是一闪一闪的&#xff0c;黑一下亮一些怎么解决 1. 打开设备管理器2. 点击显示适配器3. 更新下方两个选项的驱动3.1 更新驱动Inter(R) UHD Graphixs3.2 更新驱动NVIDIA GeForce RTX 4060 Laptop GPU 4. 其他文章快来试试吧&#x1f970; 1. 打开设备管理器 在电…...

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控)的性能。现有的视频修复方法虽然取得了一些进展,但通常只能针对特定的退…...

使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发

开发一个完整的工作流系统使用 Blazor 和 Elsa Workflows 作为引擎&#xff0c;可以实现一个功能强大的工作流管理和设计系统。下面将提供详细的步骤和代码实现&#xff0c;展示如何在 Blazor 中开发一个基于 Elsa Workflows 的工作流系统。 项目概述 我们的工作流系统将包含以…...

调试Hadoop源代码

个人博客地址&#xff1a;调试Hadoop源代码 | 一张假钞的真实世界 Hadoop版本 Hadoop 2.7.3 调试模式下启动Hadoop NameNode 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中设置NameNode启动的JVM参数&#xff0c;如下&#xff1a; export HADOOP_NAMENODE_OPTS"-Xdeb…...

mkv转码mp4(ffmpeg工具)

基于windows&#xff0c;Linux也可以用&#xff0c;都是命令行 下载路径&#xff08;https://github.com/BtbN/FFmpeg-Builds/releases&#xff09; 下载安装包&#xff1a;ffmpeg-n6.1-latest-win64-lgpl-6.1.zip&#xff0c;&#xff08;根据自己的平台选择下载&#xff09;并…...

前端项目搭建和基础配置

这个模块主要是介绍从零开始搭建项目的一些操作&#xff0c;包含一些前端常用的配置&#xff0c;这里只是一部分&#xff0c;会在后续的文章中逐步进行补充和完善 一、创建项目 在项目路径下使用以下命令生成前后端项目 npm create vite输入项目名称&#xff0c;框架选择Vue…...

计算机网络 (49)网络安全问题概述

前言 计算机网络安全问题是一个复杂且多维的领域&#xff0c;它涉及到网络系统的硬件、软件以及数据的安全保护&#xff0c;确保这些元素不因偶然的或恶意的原因而遭到破坏、更改或泄露。 一、计算机网络安全的定义 计算机网络安全是指利用网络管理控制和技术措施&#xff0c;保…...

【Qt】02-信号与槽函数

发生的原因与事件 前言一、什么是信号与槽&#xff08;Signals and Slots&#xff09;&#xff1f;1.1 信号&#xff08;Signals&#xff09;1.2 槽&#xff08;Slots&#xff09;1.3 连接方式 二、调用基本的信号与槽函数2.1 代码分析connect()的用法 2.2 结果展示 三、自定义…...

CVPR 2024 机器学习方向总汇(多任务、联邦学习、迁移学习和对抗等)

1、Machine Learning(机器学习)多任务、联邦学习、迁移学习和对抗等 Molecular Data Programming: Towards Molecule Pseudo-labeling with Systematic Weak Supervision &#x1f44d;摘要Improving Physics-Augmented Continuum Neural Radiance Field-Based Geometry-Agnos…...

spring中bean的循环依赖细节描述

首先&#xff0c;循环依赖不是一件好事&#xff0c;设计上几乎不会这么设计。但是总有时候要碰到一起奇怪的循环依赖。 spring bean循环依赖之所以能实现&#xff0c;也是有条件的&#xff0c;构造函数的依赖显然不行。而bean生命周期的实例化和属性设置是分阶段的&#xff0c…...

LeetCode - #187 Swift 实现重复的DNA序列

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

【gin】gin中使用protbuf消息传输go案例

在 Gin 中使用 Protobuf 进行高效消息传输 Protobuf&#xff08;Protocol Buffers&#xff09;是一种高效的二进制序列化协议&#xff0c;广泛用于高性能场景的数据传输。相比 JSON&#xff0c;Protobuf 具有更小的体积和更快的解析速度&#xff0c;非常适合服务间通信或前后端…...

Vue.js 动态设置表格最大高度的实现

概述 在现代 Web 开发中&#xff0c;响应式设计至关重要&#xff0c;尤其是在处理复杂的布局和数据表格时。表格通常会受到多种因素的影响&#xff0c;如分页、合计行或动态内容&#xff0c;这可能导致表格高度的变化。本文将介绍一个基于 Vue.js 的方法 setMaxHeight&#xf…...

Springboot 注解缓存使用教程

Spring Boot Cache 注解使用教程 Spring Boot 提供了强大的缓存抽象,开发者可以通过注解快速实现缓存功能,从而提高系统性能。本教程将全面介绍 Spring Boot 提供的缓存相关注解及其作用,并结合示例讲解实际应用。 1. 常用缓存注解概览 Spring Boot 缓存提供以下核心注解…...

TCP协议与TCP SYN Flood攻击

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网络安全从菜鸟到飞鸟的逆袭 目录 一&#xff0c; TCP握手二&#xf…...

Cloud Foundry,K8S,Mesos Marathon弹性扩缩容特性对比

一、Cloud Foundry 使用Scaling an Application Using App Autoscaler插件&#xff0c;基于资源使用情况触发简单扩缩容 CPU、内存、Http带宽、延时等 监控这些资源的使用情况决定扩缩容策略&#xff1a;实例是增加还是减少 Instance Limits 限制实例数量范围&#xff0c;定义…...

python轻量级框架-flask

简述 Flask 是 Python 生态圈中一个基于 Python 的Web 框架。其轻量、模块化和易于扩展的特点导致其被广泛使用&#xff0c;适合快速开发 Web 应用以及构建小型到中型项目。它提供了开发 Web 应用最基础的工具和组件。之所以称为微框架&#xff0c;是因为它与一些大型 Web 框架…...

Git实用指南:忽略文件、命令别名、版本控制、撤销修改与标签管理

目录 1.忽略特殊文件 1.1.那如何配置我们需要忽略的文件的呢&#xff1f; 1.2.如何检验效果&#xff1f; 2.给命令配置别名 3.基本操作之版本回退 3.1.使用场景&#xff1a; 3.2.使用方法&#xff1a; 4.撤销修改 情况一&#xff1a;对于工作区的代码&#xff0c;还没…...

神经网络常见面试题

梯度消失和梯度爆炸 1. 梯度消失&#xff08;Vanishing Gradient&#xff09; 定义&#xff1a; 梯度消失是指在反向传播过程中&#xff0c;梯度逐渐变得非常小&#xff0c;导致前面几层的权重更新非常缓慢&#xff0c;甚至几乎不更新&#xff0c;从而影响网络的学习过程。特…...

数据结构漫游记:动态实现栈(stack)

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…...

PyTorch使用教程- Tensor包

### PyTorch使用教程- Tensor包 PyTorch是一个流行的深度学习框架&#xff0c;它提供了一个易于使用的API来创建和操作张量&#xff08;Tensors&#xff09;。张量是一个多维数组&#xff0c;类似于NumPy中的ndarray&#xff0c;但它是基于GPU的&#xff0c;支持自动求导。本文…...

在 Vue 3 项目中集成和使用 vue3-video-play

前言 随着视频内容的普及&#xff0c;视频播放功能在现代 Web 应用中变得越来越重要。如果你正在开发一个 Vue 3 项目&#xff0c;并且需要快速集成视频播放功能&#xff0c;vue3-video-play 是一个轻量级且易于使用的 Vue 3 组件。本文将介绍如何在 Vue 3 项目中使用 vue3-vi…...

02_登录窗口

新建场景 重命名为GameRoot 双击GameRoot进入新场景 同样摄像机清除格式 删除平行光并关闭渲染灯光的天空盒 新建空节点重命名为GameRoot GameRoot为游戏的根节点 在整个游戏中都不会被删除 在游戏的根节点下创建UI的根节点Canvas 创建一个空节点 作为UI根节点下的 登录场景UI…...

基于 JFinal 的国产微服务框架

Jboot 是一个基于 JFinal、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的国产框架。 其特点是&#xff1a; 1、基于 JFinal 完整的 MVC ORM 支持。2、支持多数据源、分库分表和分布式事务。3、支持 Dubbo RPC 的完整功能&#xff0c;有超过 1亿 用户产品正在使用…...

ASP.NET Core - 配置系统之配置提供程序

ASP.NET Core - 配置系统之配置提供程序 3. 配置提供程序3.1 文件配置提供程序3.1.1 JSON配置提供程序3.1.2 XML配置提供程序3.1.3 INI配置提供程序 3.2 环境变量配置提供程序3.3 命令行配置提供程序3.4 内存配置提供程序3.5 配置加载顺序 3.6 默认配置来源 3. 配置提供程序 前…...

Axios 封装:处理重复调用与内容覆盖问题

问题描述&背景 下拉选择框&#xff0c;支持搜索&#xff0c;搜索时携带参数调用接口并更新下拉选项下拉选择连续进行多次搜索&#xff0c;先请求但响应时间长的返回值会覆盖后请求但响应时间短的举例&#xff1a; 搜索后先清空选项&#xff0c;再输入内容进行搜索。清空后…...

MySQL程序之:使用DNS SRV记录连接到服务器

在域名系统&#xff08;DNS&#xff09;中&#xff0c;SRV记录&#xff08;服务位置记录&#xff09;是一种资源记录&#xff0c;它使客户端能够指定指示服务、协议和领域的名称。DNS查找该名称会返回一个回复&#xff0c;其中包含该领域中提供所需服务的多个可用服务器的名称。…...

Swift Parameter-free Attention Network模型详解及代码复现

研究动机 在深度学习领域,超分辨率技术的发展面临着 模型复杂度与推理速度 之间的权衡。传统的基于注意力的超分辨率网络虽然能提高性能,但往往需要较大的感受野和参数化的注意力图,这可能导致推理速度下降。 为了解决这一问题,研究人员提出了Swift Parameter-free Atten…...

React进阶之react.js、jsx模板语法及babel编译

React React介绍React官网初识React学习MVCMVVM JSX外部的元素props和内部的状态statepropsstate 生命周期constructorgetDerivedStateFromPropsrendercomponentDidMount()shouldComponentUpdategetSnapshotBeforeUpdate(prevProps, prevState) 创建项目CRA&#xff1a;create-…...

渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法

目录 原理 XML语言解释 什么是xml语言&#xff1a; 以PHP举例xml外部实体注入 XML语言结构 面试题目 如何寻找xxe漏洞 XEE漏洞修复域防御 提高版本 代码修复 php java python 手动黑名单过滤(不推荐) 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 原理 XXE&…...

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21&#xff0c;如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新&#xff08;截止2024.9.13&#xff09;Oracle JDK操作记录 安装Gradle 下载Gradle&#xff0c;解压将其存放到资源java/env目录…...

openwrt下oaf插件编译安装,实现上网行为监控

文章目录 入门级APP青少年模式设备屏幕使用时间电脑浏览器使用时间限制Surpal 介绍安装使用进阶级专业级旁路由方案openwrt路由器固件编译OAF(Open App Filter)安装编译带有oaf的固件固件烧写设备上电启动应用特征库设置黑白名单及应用访问限制骨灰级ref守护孩子视力,用科技“…...

Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测

Top期刊算法&#xff01;RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测 目录 Top期刊算法&#xff01;RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于RIME-CNN-BiLSTM-Attention、CNN-BiLSTM-Attention、R…...

GPT-4o背后的语音技术

GPT-4o背后的语音技术 GPT-4o是一个any2any的多模态模型,能够接受文本、音频、图像、视频等多模态输入,也能够生成包含文本、语音、图像和视频等混合内容的多模态输出。本文主要谈语音多模态的实现,并分享一些对于语音研究未来发展的看法。 GPT-4o (“o” 代表 “omni”) …...

数据库存储上下标符号,sqlserver 2008r2,dm8

sqlserver 2008r2&#xff1a; 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…...

【25】Word:林涵-科普文章❗

目录 题目​ NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择&#xff1a;按住ctrl按键&#xff0c;不连续选择连续选择&#xff1a;按住shift按键&#xff0c;选择第一个&#xff0c;选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向&#xff1a;横向…...

全面解析计算机网络:从局域网基础到以太网交换机!!!

一、局域网的基本概念和体系结构 特点: 覆盖较小的地理范围较低的时延和误码率局域网内的各节点之间以“帧"为单位进行传输支持单播、广播、多播 单播(一对一发送帧)&#xff1a;如 A->B广播(一对全部发送帧)&#xff1a;如 A->BCDEFG多播(一对部分发送帧)&#xff…...

《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学

摘要 C 的 operator 关键字和操作符重载是语言的核心特性之一&#xff0c;使开发者能够扩展内置操作符以适应自定义类型&#xff0c;从而实现更高效、直观的代码表达。本文全面解析了 operator 关键字的基本概念、支持重载的操作符范围及其使用场景&#xff0c;详细介绍了操作…...

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…...

【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

GraphRAG: Auto Prompt Tuning 实践

GraphRAG 的 Auto Prompt Tuning 功能是一个强大的工具&#xff0c;用于优化知识图谱的生成过程。以下是对该功能的详细介绍和分析&#xff1a; 自动提示调优&#xff08;Auto Prompt Tuning&#xff09; 1. 概念 GraphRAG 的自动提示调优功能旨在为特定领域的知识图谱生成创…...

提示词的艺术----AI Prompt撰写指南(个人用)

提示词的艺术 写在前面 制定提示词就像是和朋友聊天一样&#xff0c;要求我们能够清楚地表达问题。通过这个过程&#xff0c;一方面要不断练习提高自己地表达能力&#xff0c;另一方面还要锻炼自己使用更准确精炼的语言提出问题的能力。 什么样的提示词有用&#xff1f; 有…...