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…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
