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

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,作用是接收请求和响应浏览器

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=5student/5 get请求
保存操作/saveStudentstudent post 请求
更新/updateStudentstudent put 请求
删除/deleteById?id=5student/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&#xff08;存储&#xff09;Fluentd&#xff08;收集器&am…...

【Python】python使用docxtpl生成word模板

python使用docxtpl生成word模板 python-docxtpl包简单使用和实战&#xff0c;Python处理word&#xff0c;docx文件。 最近需要处理一些爬虫得到的数据来进行一些自动化报告的操作&#xff0c;因为需要生成的是word的报告&#xff0c;所以估选用docxtpl库来直接生成模板 docxt…...

C++学习笔记总结练习:多态与虚函数

1 多态 多态分类 静态多态&#xff0c;是只在编译期间确定的多态。静态多态在编译期间&#xff0c;根据函数参数的个数和类型推断出调用的函数。静态多态有两种实现的方式 重载。&#xff08;函数重载&#xff09;模板。 动态多态&#xff0c;是运行时多态。通过虚函数机制实…...

linux 批量更改指定后辍文件的可执行权限

要在Linux上批量更改指定后缀文件的可执行权限&#xff0c;您可以使用find命令来查找这些文件&#xff0c;然后使用chmod命令来更改它们的权限。以下是一些步骤&#xff1a; 1. 打开终端。 2. 使用 find 命令查找要更改权限的文件&#xff0c;例如&#xff0c;如果您想要更…...

数据结构(Java实现)-Map和Set

搜索树 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的左右子树也…...

C++进程、线程、内存管理

目录 进程和线程区别 进程和线程切换的区别 系统调用流程 系统调用是否会引起线程切换 为什么需要使用虚拟内存 进程和线程区别 本质区别&#xff1a; 进程是资源分配的基本单元。 线程是操作系统调度的基本单元。 地址空间&#xff1a; 进程具有独立的虚拟地址空间。 线程…...

打车系统网约车系统开发支持APP公众号H5小程序版本源码

一、操作流程 二、业务模式 三、用户端 用户注册登录&#xff1a;未注册的手机号将自动创建账号 通过好友的邀请链接进行注册&#xff0c;将会绑定上下级关系 也可以注册的时候输入好友的邀请码&#xff0c;也可以绑定关系 用户充值&#xff1a; 用户下单支付时&#xff0c;可以…...

HTTP/1.1协议的状态码

2023年8月30日&#xff0c;周三下午 HTTP/1.1协议定义了一组状态码&#xff0c;用于表示请求的处理结果。 每个状态码都有特定的含义&#xff0c;它们以三位数字的形式出现在响应的状态行中。 下面是一些常见的HTTP/1.1协议的状态码及其含义&#xff1a; 1xx&#xff08;信息…...

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文件&#xff0c;打开后发现有些文字显示为&#xff1f; 问题排查 通过点击文字特性得知 该文字的样式是 SF和仿宋通过命令行执行st 得知&#xff0c;两种样式关联的字体都是仿宋GB_2312&#xff0c;但当前操作系统无此字体&#xff0c;故显示为&…...

Calico切换网络模式无效

Calico切换网络模式无效 Calico由原先的BGP模式切换为IP IP模式发现未生效&#xff0c;使用的模式还是BGP模式&#xff0c;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 简介 将其保存管理在苹果的服务器&#xff0c;按需使用资源、优化包体积&#xff0c;实现更小的应用程序。ODR 的好处&#xff1a; 应用体积更小&#xff0c;下载更快&#xff0c;提升初次启动速度资源会在后台下载操作系统将会在磁…...

arduino仿真 SimulIDE1.0仿真器

SimulIDE 是一个开源的电子电路模拟器&#xff0c;支持模拟各种电子元器件的行为&#xff0c;可以帮助电子工程师和爱好者进行电路设计和测试。以下是 SimulIDE 的安装和使用说明&#xff1a; 安装 SimulIDE SimulIDE 可以在 Windows、Linux 和 Mac OS X 等操作系统上安装。您…...

vue实现导出excel的多种方式

在Vue中实现导出Excel有多种方式&#xff0c;可以通过前端实现&#xff0c;也可以通过前后端配合实现。下面将详细介绍几种常用的实现方式。 1. 前端实现方式&#xff1a; 使用xlsx库&#xff1a;使用xlsx库可以在前端将数据导出为Excel文件。首先需要安装xlsx库&#xff0c;…...

redis实战-实现优惠券秒杀解决超卖问题

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

C语言:截断+整型提升+算数转换练习

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

Java后端开发面试题——多线程

创建线程的方式有哪些&#xff1f; 继承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…...

Redis 学习笔记

文章目录 一、简介二、下载三、安装四、启动和关闭五、配置文件六、常用指令七、安全加固 版权声明&#xff1a;本文为CSDN博主「杨群」的原创文章&#xff0c;遵循 CC 4.0 BY-SA版权协议&#xff0c;于2023年9月3日首发于CSDN&#xff0c;转载请附上原文出处链接及本声明。 原…...

华为云新生代开发者招募

开发者您好&#xff0c;我们是华为2012UCD的研究团队 为了解年轻开发者的开发现状和趋势 正在邀请各位先锋开发者&#xff0c;与我们进行2小时的线上交流&#xff08;江浙沪附近可线下交流&#xff09; 聊聊您日常开发工作中的产品使用需求 成功参与访谈者将获得至少300元京…...

DockerFile简明教程

需求 由于在测试环境中使用了docker官网的centos 镜像&#xff0c;但是该镜像里面默认没有安装ssh服务&#xff0c;在做测试时又需要开启ssh。所以上网也查了查资料。下面详细的纪录下。在centos 容器内安装ssh后&#xff0c;转成新的镜像用于后期测试使用。 镜像定制 第一种…...

Cygwin是什么?是Windows还是Linux?

原文作者&#xff1a;gentle_zhou 原文链接&#xff1a;https://bbs.huaweicloud.com/blogs/408674 最近在和客户交流的时候&#xff0c;一直以为客户的研发环境就是windows 7&#xff0c;直到和对面的研发团队交流的时候&#xff0c;得到的反馈是在windows 7系统上安装了Cygw…...

成集云 | 多维表格自动化管理jira Server项目 | 解决方案

源系统成集云目标系统 方案介绍 基于成集云集成平台&#xff0c;在多维表格中的需求任务信息自动创建、更新同步至 Jira Server 的指定项目中&#xff0c;实现多维表格中一表管理 Jira Server 中的项目进度。 维格表是一种新一代的团队数据协作和项目管理工具&…...

数据结构(Java实现)-排序

排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff…...

C++------vector【STL】

文章目录 vector的介绍及使用vector的介绍vector的使用 vector的模拟实现 vector的介绍及使用 vector的介绍 1、vector是表示可变大小数组的序列容器。 2、就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数…...

Matlab(变量与文本读取)

目录 1.变量&#xff08;数据&#xff09;类型转换 1.1 字符 1.2 字符串 1.3 逻辑操作与赋值 2.Struct结构体数组 2.1函数的详细介绍&#xff1a; 2.1.1 cell2struct 2.1.1.1 垂直维度转换 2.1.1.2 水平维度转换 2.1.1.3 部分进行转换 2.1.2 rmfield 2.1.3 fieldnames(查…...

WebGPU学习(8)---使用RenderBundle

RenderBundle是什么 通常情况下&#xff0c;WebGPU每次绘制时都需要向RenderPassEncoder注册渲染命令。处理此绘图命令比 WebGL 内部执行的类似处理更快。但是&#xff0c;如果可以省略此命令注册过程&#xff0c;则可以能够更快地绘制。RenderBundle 就是实现这一点的。 Ren…...

【前端】常用功能合集

目录 js跳转到新标签打开PDF文件js每十个字符换行 es6用表达式或变量名作为对象的属性名 vuev-for插值、:style、:class父组件加载完后再加载子组件keep-alive缓存跨域请求第三方接口跨域请求之callback&#xff08;不建议&#xff09;读取本地文件浏览器播放提示音audio jquer…...