SpringMVC_基本使用
一、JavaWEB
1.回顾 JavaWEB
1.1新建项目结构
-
新建 javaweb 项目目录结构
1.2导入依赖
-
依赖
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency>
1.3实现第一个 servlet
-
通过注解写 servlet 实现 HttpServlet
@WebServlet("/first") public class FirstServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("====进入了servlet===");req.setAttribute("username","sy");req.getRequestDispatcher("/test.jsp").forward(req,resp);} }
-
通过 web.xml 配置
<web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>first-servlet</servlet-name><servlet-class>cn.sycoder.FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>first-servlet</servlet-name><url-pattern>/test</url-pattern></servlet-mapping> </web-app>
-
开启 el 表达式支持
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@page isELIgnored="false" %> <html> <head><title>Title</title> </head> <body> ${username} </body> </html>
1.4思考问题
-
获取请求参数不方便
//获取请求参数 String username = req.getParameter("username"); String password = req.getParameter("password");
-
给出的解决方案
-
如果可以直接从方法入参传参是不是很方便,可以直接拿来用
protected void service(String username,String password)
-
-
-
设置响应视图或者设置响应的参数类型不方便
req.getRequestDispatcher("/test.jsp").forward(req,resp);
-
给出的解决方案
-
如果不需要设置响应类型
-
如果不需要设置请求转发,直接跳转更方便
req.getRequestDispatcher("/test.jsp").forward(req,resp); //return "test";
-
-
2.回顾MVC
- 概述:MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分
- MVC分别是什么
- M:Model:模型层,指工程中的JavaBean,作用是处理数据
- domain 对象,Student 对象
- 业务bean,Service,Mapper
- V:View:视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
- C:Controller:控制层,指工程中的servlet,作用是接收请求和响应浏览器
- M:Model:模型层,指工程中的JavaBean,作用是处理数据
3.SpringMVC
- 概述:SpringMVC是一种基于原生的 Servlet 实现MVC模型的轻量级Web框架,基于原生的Servlet,通过前端控制器DispatcherServlet,对请求和响应进行统一处理
- 特点:
- Spring 系列产品,可以与Spring无缝衔接
- 基于原生的Servlet,使用DispatcherServlet对Servlet进行封装,可以对请求或者响应做统一的处理
- 组件非常丰富,以后想用什么组件,直接配置使用就可以
二、SpringMVC快速入门
1.基于XML方式配置
1.1导入依赖
-
导入依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.17.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency>
1.2创建SpringMVC配置文件
-
配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置包扫描--><context:component-scan base-package="cn.sycoder.controller"/><bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置视图前缀--><property name="prefix" value="/WEB-INF/pages/"/> <!-- 配置视图后缀--><property name="suffix" value=".jsp"/></bean> </beans>
1.3配置DispatcherServlet
-
web.xml
<!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><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>spring-mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 初始化 spring-mvc 配置--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>spring-mvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping> </web-app>
1.4配置控制器
-
配置
@Controller public class XmlController {@RequestMapping("/test")public void test(){System.out.println("---------");} }
1.5配置视图解析器
-
视图解析器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置包扫描--><context:component-scan base-package="cn.sycoder.controller"/><bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置视图前缀--><property name="prefix" value="/WEB-INF/pages/"/> <!-- 配置视图后缀--><property name="suffix" value=".jsp"/></bean> </beans>
-
视图解析操作
-
配置控制器
@RequestMapping("/login")public String login(String username, String password) {if ("sy".equals(username) && "123456".equals(password))return "success";return "fail";}
-
配置视图
-
2.基于注解方式配置
2.1导入依赖
-
导入依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.17.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency>
2.2创建SpringMVC配置类
-
创建配置类
@Configuration @ComponentScan("cn.sycoder.controller") public class SpringMvcConfig { }
2.3通过配置类替换web.xml
-
替换操作
public class ServletConfig extends AbstractDispatcherServletInitializer {@Overrideprotected WebApplicationContext createServletApplicationContext() {//获取SpringMVC容器AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();context.register(SpringMvcConfig.class);// 同等与mvc配置类替换xml文件return context;}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;} }
2.4配置Controller
-
配置Controller
@Controller public class SpringMvcController {@RequestMapping("/get")public void getSpring(){System.out.println("========");} }
四、请求
1.@RequestMapping
-
作用:设置请求映射路径
-
SpringMVC 接收到指定请求时,在映射关系中找到对应的控制方法
名称 | @RequestMapping |
---|---|
位置 | 类或接口、或者方法上 |
作用 | 设置定义控制器方法的访问路径 |
属性 | String[] value() 设置访问路径的,RequestMethod[] method() 指定访问方法 |
1.1 @ResponseBody与@RequestMapping的使用
-
当需要返回json串的时候才需要使用
@ResponseBody
-
使用位置
@Controller @RequestMapping("/requestMappingController") public class RequestMappingController {@RequestMapping(headers ={"header=123"} ,value = {"/test"})// /requestMapping/test@ResponseBodypublic String test(){System.out.println("============");return "OK";} }
-
指定请求类型
- 延伸注解
- @GetMapping 发起get 请求
- @PostMapping 发起Post 请求
- @PutMapping 发起 put 请求
- @DeleteMapping 发起 delete 请求
@RequestMapping(value = "/test1",method = RequestMethod.POST)@ResponseBodypublic String test1(){System.out.println("============");return "OK";}
- 延伸注解
-
指定请求头(可以做权限拦截)(了解一下就行)
@RequestMapping(headers ={"header=123"} ,value = {"/test"})// /requestMapping/test@ResponseBodypublic String test(){System.out.println("============");return "OK";}
-
指定请求参数(没用)
@RequestMapping(params = {"username=123"},value = {"/test2"})// /requestMapping/test@ResponseBodypublic String test2(){System.out.println("============");return "OK";}
2.获取请求参数
2.1一般获取参数方式
-
获取方式
@Controller @RequestMapping("/requestParams") public class RequestParams {@RequestMapping("/test")@ResponseBodypublic String test(String username,String password){System.out.println("username:"+username+",password:"+password);return "ok";} }
2.2参数名称不对应
-
@RequestParam
名称 @RequestParam 位置 控制器方法中的形参上 属性 boolean required() 表示是否必填String value(),参数重命名名称 作用 绑定请求参数与处理器方法之间形参的关系 -
出现问题,获取不到参数值
-
解决方案
@Controller @RequestMapping("/requestParams") public class RequestParams {@RequestMapping("/test")@ResponseBodypublic String test(@RequestParam(value = "un",required = false) String username,@RequestParam(value = "password1",required = false) String password){System.out.println("username:"+username+",password:"+password);return "ok";} }
3.参数传递
3.1对象参数传递
-
传递方式
@RequestMapping("/user")@ResponseBodypublic String user(User user){System.out.println("username:"+user.getAccount()+",password:"+user.getPassword());return "ok";}
-
图示
3.2复合型对象参数传递
-
如果出现对象嵌套,直接通过属性名称.传参即可
public class User {private String account;private String password;private Address address; }
-
图示
3.3数组参数传递
-
传数组
@RequestMapping("/array")@ResponseBodypublic String array(String[] cities){System.out.println(Arrays.toString(cities));return "ok";}
-
传递参数
3.4集合参数传递
-
传集合
@RequestMapping("/list")@ResponseBodypublic String list(@RequestParam List<String> cities){System.out.println(cities);return "ok";}
-
传参图示
4.JSON 参数传递
- springMVC 默认支持的json处理不是使用fastjson,而是使用 jackson 处理的
4.1导入依赖
-
依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.5</version> </dependency>
4.2开启 SpringMVC 注解支持
-
开启支持
@Configuration @ComponentScan("cn.sycoder.controller") @EnableWebMvc public class SpringMvcConfig { }
-
@EnableWebMvc
名称 @EnableWebMvc 位置 SpringMVC 配置类上 作用 开启SpringMVC 的辅助功能支持 -
@RequestBody
名称 @RequestBody 位置 SpringMVC控制方法形参里面 作用 将请求中的请求体包含的数据传递给形参 属性 boolean required() 表示是否必填
4.2发送 json数据-@RequestBody
-
传送 json 用户数据到后台,只有加了@RequestBody这个注解,才可以通过json传递数据,并再前端需要设置contentType:application/json
@Controller @RequestMapping("/RequestBodyController") public class RequestBodyController {@PostMapping("/user/save")@ResponseBodypublic String saveUser(@RequestBody User user){System.out.println(user);return "OK";} }
-
图示
-
如果 json 参数有嵌套也是老样子传参即可
{ "account": " 123", "password": "123456", "address": { "city": "杭州" } }
-
接收图示
4.3传 json 数组到后台
-
传递json 数组
@PostMapping("/user/lists") @ResponseBody public String saveUser(@RequestBody List<String> lists){System.out.println(lists);return "OK"; }
-
图示
4.4传递对象集合json 数据
-
传递对象集合json数据
@PostMapping("/user/lists/user")@ResponseBodypublic String listUser(@RequestBody List<User> lists){System.out.println(lists);return "OK";}
-
传递图示
-
json 数据
[{"account":" 123","password":"123456","address":{"city":"杭州"}},{"account":" sy","password":"123456","address":{"city":"北京"}}]
5.@RequestParam 和 @RequestBody总结
- 区别
- @RequestBody 用于接收json 数据的[application/json]
- @RequestParam 用于接收 url 地址参数的 [application/x-www-form]
- 应用
- 后面的开发,都是前后端分离的,以 json 数据传输为主,所以 @RequestBody 使用更多
- 如果不是使用json传输,就用 @RequestParam
6.日期类型参数传递
- 2022-11-12
- 2022/11/12
6.1常规格式
-
控制器
@Controller @RequestMapping("/date") public class DateController {@RequestMapping("/test")@ResponseBodypublic String testDate(Date date){System.out.println(date);return "ok";} }
-
图示
6.2修改格式
-
出现错误
-
定制化格式操作
@Controller @RequestMapping("/date") public class DateController {@RequestMapping("/test")@ResponseBodypublic String testDate(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date){System.out.println(date);return "ok";} }
6.3@DateTimeFormat
名称 | @DateTimeFormat |
---|---|
作用 | 指定日期格式(yyyy-MM-dd) |
属性 | String pattern() 指定日期格式 |
使用位置 | SpringMVC 控制器方法形参前面,还可以使用到具体的对象属性上 |
6.4底层转换的原理
五、响应
1.注解配置的另一种方式
-
配置
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[0];}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};} }
2.设置响应页面
-
注解配置视图解析器
@Configuration @ComponentScan("cn.sycoder.controller") @EnableWebMvc public class SpringMvcConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver(){InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/pages/");resolver.setSuffix(".jsp");return resolver;} }
-
配置视图解析器之后跳转
@Controller public class TestController {@RequestMapping("/test")public String test(){return "ok.jsp";}//配置视图解析器之后的视图跳转@RequestMapping("/view")public String view(){return "view";} }
-
图示
3.响应文本类型
-
如果没有使用 @ResponseBody 会出现如下问题
@RequestMapping("/respbody") // @ResponseBodypublic String respbody(){return "ok";}
-
响应文本类型使用 @ResponseBody
@RequestMapping("/respbody")@ResponseBodypublic String respbody(){return "ok";}
4.响应JSON数据
-
使用 @ResponseBody + @EnableWebMvc 才能返回 json
-
SpringMVC 配置类
@Configuration @ComponentScan("cn.sycoder.controller") @EnableWebMvc public class SpringMvcConfig {@Beanpublic ViewResolver viewResolver(){InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/pages/");resolver.setSuffix(".jsp");return resolver;} }
4.1响应单个json对象
-
控制器方法使用 @ResponseBody
@RequestMapping("/userjson")@ResponseBodypublic User respUserJson(){User user = new User();user.setAddTime(new Date());user.setName("sy");user.setUsername("sy666");user.setId(1L);return user;}
4.2响应集合json对象
-
控制器方法
@RequestMapping("/listuserjson")@ResponseBodypublic List<User> respListUserJson(){List<User> list = new ArrayList<>();User user = new User();user.setAddTime(new Date());user.setName("sy");user.setUsername("sy666");user.setId(1L);list.add(user);User user1 = new User();user1.setAddTime(new Date());user1.setName("sy");user1.setUsername("sy666");user1.setId(1L);list.add(user1);return list;}
4.3@RestController
-
@RestController = @Controller + @ResponseBody
-
应用
@RestController public class MyRestController {@RequestMapping("/listuserjson")public List<User> respListUserJson(){List<User> list = new ArrayList<>();User user = new User();user.setAddTime(new Date());user.setName("sy");user.setUsername("sy666");user.setId(1L);list.add(user);User user1 = new User();user1.setAddTime(new Date());user1.setName("sy");user1.setUsername("sy666");user1.setId(1L);list.add(user1);return list;} }
4.4@ResponseBody 总结
名称 | @ResponseBody |
---|---|
作用 | 设置控制器的返回值作为响应体,如果返回的是对象类型,会转换成 json 对象传输 |
位置 | 可以使用到类上,或者控制器方法上 |
六、域对象共享
1.HttpServletRequest
-
具体应用,就是jsp中可以获取后端的数据,通过el表达式获取到数据
@RequestMapping("/ok")public String okServletRequest(HttpServletRequest request){request.setAttribute("ok","66666");return "ok";}
-
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@page isELIgnored="false" %> <html> <head><title>Title</title> </head> <body> ${ok} </body> </html>
2.ModelAndView
-
具体应用
@RequestMapping("/modelAndView")public ModelAndView modelAndView(){ModelAndView view = new ModelAndView();view.setViewName("ok");view.addObject("ok","==============");return view;}
-
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@page isELIgnored="false" %> <html> <head><title>Title</title> </head> <body> ${ok} </body> </html>
3.Map 向 Request 中共享数据
-
具体应用
@RequestMapping("/testMap") public String testMap(Map<String,Object> map){map.put("ok","-------------");return "ok"; }
-
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@page isELIgnored="false" %> <html> <head><title>Title</title> </head> <body> ${ok} </body> </html>
七、RESTFul 风格
1.REST简介
- REST概述:Representational State Transfer,表现层资源状态转移
2.传统访问资源和 REST 对照
操作 | 传统方式 | REST风格 |
---|---|---|
查询操作 | /student/getById?id=5 | student/5 get请求 |
保存操作 | /saveStudent | student post 请求 |
更新 | /updateStudent | student put 请求 |
删除 | /deleteById?id=5 | student/5 delete 请求 |
- REST 优点
- 隐藏资源访问行为,做到无法根据资源访问猜测是什么样的逻辑
- 书写也简单化
- 注意
- REST 风格只是一种约定方式,并不是规范
- 以后通过 REST 风格访问网络资源就叫 RESTFul
3.案例实现
3.1案例分析
3.2传统实现方式
-
实现
@Controller @RequestMapping("/item") public class ItemController {//增加@RequestMapping("/save")@ResponseBodypublic String save(@RequestBody Item item){System.out.println(item);return "save OK";}//删除@RequestMapping("/delete")@ResponseBodypublic String delete(Long id){System.out.println(id);return "delete OK";}//修改@RequestMapping("/update")@ResponseBodypublic String update(@RequestBody Item item){System.out.println(item);return "update OK";}//查询@RequestMapping("/getById")@ResponseBodypublic String getById(Long id){System.out.println(id);return "getById OK";} }
3.3RESTFul 实现方式
-
实现
@RestController public class ItemRestController {//增加@PostMapping("/item")public String save(@RequestBody Item item){System.out.println(item);return "rest save OK";}//删除@DeleteMapping("/item/{id}")public String delete(@PathVariable Long id){System.out.println(id);return "rest delete OK";}//修改@PutMapping("/item")public String update(@RequestBody Item item){System.out.println(item);return "rest update OK";}//查询@GetMapping("/item/{id}")public String getById(@PathVariable Long id){System.out.println(id);return "rest getById OK";} }
4.静态资源的处理
4.1拷贝静态资源到项目webapp 下面
-
但是出现如下问题
-
原因:SpringMVC 拦截了静态资源,根据 /pages/item.html 去找对于的 controller 方法执行,匹配我们配置的 / 的getServletMappings,找不到所以 404
4.2解决方案
-
配置静态资源放行就可以了
-
配置如下
@Configuration public class StaticSupport extends WebMvcConfigurationSupport {@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {//当访问 /pages/ 资源的时候,设置放行registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");registry.addResourceHandler("/js/**").addResourceLocations("/js/");registry.addResourceHandler("/css/**").addResourceLocations("/css/");registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");} }
-
注意,需要将静态支持交给 springmvc 管理
@Configuration @ComponentScan("cn.sycoder") @EnableWebMvc public class SpringMvcConfig { }
相关文章:

SpringMVC_基本使用
一、JavaWEB 1.回顾 JavaWEB 1.1新建项目结构 新建 javaweb 项目目录结构 1.2导入依赖 依赖 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>…...

大屏开发,浏览器的可视区域和设备的分辨率
在线屏幕检测 - 显示器检测 - 显示器坏点检测工具...

【微服务部署】06-日志集成
文章目录 1. EFK日志三件套集成1.1 核心组件1.2 部署 2. Exceptionless日志系统2.1 Exceptionless核心特性2.2 Exceptionless部署文件2.3 K8s中使用Exceptionless 1. EFK日志三件套集成 1.1 核心组件 Elasticsearch(存储)Fluentd(收集器&am…...
【Python】python使用docxtpl生成word模板
python使用docxtpl生成word模板 python-docxtpl包简单使用和实战,Python处理word,docx文件。 最近需要处理一些爬虫得到的数据来进行一些自动化报告的操作,因为需要生成的是word的报告,所以估选用docxtpl库来直接生成模板 docxt…...

C++学习笔记总结练习:多态与虚函数
1 多态 多态分类 静态多态,是只在编译期间确定的多态。静态多态在编译期间,根据函数参数的个数和类型推断出调用的函数。静态多态有两种实现的方式 重载。(函数重载)模板。 动态多态,是运行时多态。通过虚函数机制实…...
linux 批量更改指定后辍文件的可执行权限
要在Linux上批量更改指定后缀文件的可执行权限,您可以使用find命令来查找这些文件,然后使用chmod命令来更改它们的权限。以下是一些步骤: 1. 打开终端。 2. 使用 find 命令查找要更改权限的文件,例如,如果您想要更…...

数据结构(Java实现)-Map和Set
搜索树 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也…...
C++进程、线程、内存管理
目录 进程和线程区别 进程和线程切换的区别 系统调用流程 系统调用是否会引起线程切换 为什么需要使用虚拟内存 进程和线程区别 本质区别: 进程是资源分配的基本单元。 线程是操作系统调度的基本单元。 地址空间: 进程具有独立的虚拟地址空间。 线程…...

打车系统网约车系统开发支持APP公众号H5小程序版本源码
一、操作流程 二、业务模式 三、用户端 用户注册登录:未注册的手机号将自动创建账号 通过好友的邀请链接进行注册,将会绑定上下级关系 也可以注册的时候输入好友的邀请码,也可以绑定关系 用户充值: 用户下单支付时,可以…...
HTTP/1.1协议的状态码
2023年8月30日,周三下午 HTTP/1.1协议定义了一组状态码,用于表示请求的处理结果。 每个状态码都有特定的含义,它们以三位数字的形式出现在响应的状态行中。 下面是一些常见的HTTP/1.1协议的状态码及其含义: 1xx(信息…...

SpringCloud(十)——ElasticSearch简单了解(一)初识ElasticSearch和RestClient
文章目录 1. 初始ElasticSearch1.1 ElasticSearch介绍1.2 安装并运行ElasticSearch1.3 运行kibana1.4 安装IK分词器 2. 操作索引库和文档2.1 mapping属性2.2 创建索引库2.3 对索引库的查、删、改2.4 操作文档 3. RestClient3.1 初始化RestClient3.2 操作索引库3.3 操作文档 1. …...
CAD文字显示?问号解决
背景 从别人哪儿发过来的CAD文件,打开后发现有些文字显示为? 问题排查 通过点击文字特性得知 该文字的样式是 SF和仿宋通过命令行执行st 得知,两种样式关联的字体都是仿宋GB_2312,但当前操作系统无此字体,故显示为&…...
Calico切换网络模式无效
Calico切换网络模式无效 Calico由原先的BGP模式切换为IP IP模式发现未生效,使用的模式还是BGP模式,Calico卸载后查询Etcd发现存在很多Calico数据 [rootk8s-master-1 ~]# etcdctl get / --prefix --keys-only | grep calico /calico/ipam/v2/assignment…...

数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成
数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成 目录 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成。 生成对抗…...

iOS - 资源按需加载 - ODR
一、瘦身技术大图 二、On-Demand Resources 简介 将其保存管理在苹果的服务器,按需使用资源、优化包体积,实现更小的应用程序。ODR 的好处: 应用体积更小,下载更快,提升初次启动速度资源会在后台下载操作系统将会在磁…...

arduino仿真 SimulIDE1.0仿真器
SimulIDE 是一个开源的电子电路模拟器,支持模拟各种电子元器件的行为,可以帮助电子工程师和爱好者进行电路设计和测试。以下是 SimulIDE 的安装和使用说明: 安装 SimulIDE SimulIDE 可以在 Windows、Linux 和 Mac OS X 等操作系统上安装。您…...
vue实现导出excel的多种方式
在Vue中实现导出Excel有多种方式,可以通过前端实现,也可以通过前后端配合实现。下面将详细介绍几种常用的实现方式。 1. 前端实现方式: 使用xlsx库:使用xlsx库可以在前端将数据导出为Excel文件。首先需要安装xlsx库,…...

redis实战-实现优惠券秒杀解决超卖问题
全局唯一ID 唯一ID的必要性 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显,容易被用户根据id的间隔来猜测…...

C语言:截断+整型提升+算数转换练习
详情关于整型提升、算数转换与截断见文章: 《C语言:整型提升》 《C语言:算数转换》 一、代码一 int main() { char a -1; signed char b -1; unsigned char c -1; printf("%d %d %d", a, b, c); return 0; } 求…...

Java后端开发面试题——多线程
创建线程的方式有哪些? 继承Thread类 public class MyThread extends Thread {Overridepublic void run() {System.out.println("MyThread...run...");}public static void main(String[] args) {// 创建MyThread对象MyThread t1 new MyThread() ;MyTh…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...