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

Spring MVC | Spring MVC 的“核心类” 和 “注解”

目录:

  • Spring MVC 的“核心类” 和 “注解” :
    • 1.DispatcherServlet (前端控制器)
    • 2.@Controller 注解
    • 3.RequestMapping 注解
      • 3.1 @RequestMapping 注解的 “使用”
        • 标注在 “方法” 上
        • 标注在 “类” 上
      • 3.2 @RequestMapping 注解的 “属性”
    • 4.组合注解
      • 4.1 请求处理方法的 “参数类型” 和 “返回值类型”
        • 请求处理方法中的 “参数类型”
        • 请求处理方法的 “返回值类型”
          • 通过返回值“String类型”进行 “重定向”
          • 通过返回值“String类型”进行 “请求forward转发”
    • 5.ViewResolver(视图解析器)

Spring MVC 的“核心类” 和 “注解” :

  • Spring 2.5之前只能使用实现Controller接口的方式来开发一个控制器“SpringMVC的入门”例子的就是使用的此种方式。
  • Spring 2.5之后,新增加了基于注解的控制器以及其他一些 常用注解Spring2.5之后,可以通过注解操作Spring),这些注解的使用极大地减少了程序员开发工作

1.DispatcherServlet (前端控制器)

  • DispatcherServlet全名org.springframework.web.servlet.DispatcherServlet,它在程序中充当着 前端控制器 的角色。 在使用时,只需将其配置项目的web.xml 文件 中。(在web.xml中配置 “前端控制器”)

  • web.xml 中 配置 DispatcherServlet (前端控制器) 的配置代码如下 :

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--  在web.xml中配置“前端控制器” : DispatcherServlet --><!--  配置“前端过滤器” : DispatcherServlet --><!--  假如下面没有通过init-param元素来配置“springmvc配置的位置的话”,应用程序会自动在web-inf目录下找名字为 : SpringMvc-servlet.xml的文件来充当“springmvc配置文件” (此处的名字和 DispatcherServlet的名称(SpringMvc)有关系) --><servlet><servlet-name>SpringMvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--   初始化时加载SpringMVC的“配置文件” : springmvc-config.xml    --><!--  如果配置“前端控制器”时,没有用<init-param>元素配置“Springmvc配置文件的位置”,应用程序会到web-inf目录下找名字为: "servletName-servlet.xml" 的文件来充当 “springmvc配置文件”   --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-config.xml</param-value></init-param><!--    表示容器启动时立刻加载此Servlet    --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>SpringMvc</servlet-name><!--  会将所有的url进行拦截  --><url-pattern>/</url-pattern></servlet-mapping>
    </web-app>
    

    上述代码中,<load-on-startup>元素<init-param>元素都是可选的。如果 <load-on-startup>元素值为 1,则在应用程序启动时会立即加载该Servlet;如果 <load-on-startup>元素不存在,则应用程序会第一个Servlet请求时加载该Servlet。 如果 <init-param>元素存在并且通过其子元素配置了 Spring MVC配置文件 ( Springmvc-config.xml )的路径,则应用程序在启动时会加载配置路径下配置文件如果没有通过<init-param>元素配置,则应用程序会默认WEB-INF目录下寻找如下方式命名 ( servletName-servlet.xml )的配置文件

    //如果配置“前端控制器”时,没有用<init-param>元素配置“Springmvc配置文件的位置”,应用程序会到web-inf目录下找名字为: "servletName-servlet.xml" 的文件来充当 “springmvc配置文件”
    //其中servletName的"泛指",指的是在web.xml中的配置的DispatcherServlet的"名称",如上面中的DispatcherServlet的名字为: SpringMvc,则servletName则替换为SpringMvc
    //所以最后会在web-inf目录下找到"SpringMvc-servlet.xml"的文件来充当“springmvc配置文件”
    servletName-servlet.xml
    

    其中,servletName ( 是根据实际情况而定不是固定的名字 )指的是部署在web.xml 中的 DispatcherServlet名称,在上面 web.xm中配置代码中即为SpringMvc,而 -servlet.xml是配置文件名固定写法,所以应用程序会在 WEB-INF 下寻找 “SpringMvc-servlet.xml” (来充当“springmvc配置文件”)。

    注意点重点,重点,重点
    ( 如果在 web.xml中 配置“前端控制器”时,没有通过<init-param>元素 进行添加“Springmvc配置文件springmvc-config.xml ”的位置的话,应用程序会到web-inf目录下找名字为 :“servletName-servlet.xml” 的文件充当 “springmvc配置文件”。)

2.@Controller 注解

  • org.springframework.stereotype.Controller 注解类型 ( @Controller )用于指示 Spring 类实例是一个控制器,其注解形式@Controller。该 注解在使用不需要再实现Controller 接口 (通过将加 @Controller注解的方式来替代“实现controller接口”),只需要将 @Controller注解加入到控制器类上,然后通过Spring扫描机制找到标注了该注解的控制器即可

    /*** 控制器类可用实现“@Controller”接口来 替代implements Controller (两者都能实现相同的效果)*/
    /*** ① 此处使用@Controller注解的方式来替代 实现“controller接口”,此时要通过设置    	   *@RequestMapping()注解来映射URL*  ②使用注解后,要配置<context:component-scan>元素来进行“指定要扫描的包”,让注解生效*/
    public class FirstController2 implements Controller {//其中的方法要配合@RequestMapping注解一起使用}
    

    为了保证 Spring能够找到控制器类,还需要在SpringMVC的配置文件 ( springmvc-config.xml )中添加相应的 扫描配置信息 (用 <context:component-scan>元素 ,来指定需要扫描的包,来进行 “根包扫描”),( springmvc-config.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"><!--  配置“根包扫描”,指定需要扫描的包  --><context:component-scan base-package="com.myh.controller"/></beans>
    

    注意点1 ① 与 实现controller接口不同,使用 @Controller注解 的类中的方法通常使用 @RequestMapping注解映射URL,这样你可以更直观地映射请求到具体的方法。此外,@controller注解通常与 @Autowired等注解一起使用,以实现依赖注入,这使得控制器之间的解耦
    更为方便。
    ② 在使用@controller注解的类中,你可以使用 @ModelAttribute@RequestParam等注解来自动绑定请求参
    ,也可以使用 @ResponseBody注解来直接将方法返回值写入响应体,这使得处理请求和响应更为简洁

    注意点2
    使用注解方式时,程序的运行 需要依赖Spring的 AOP 包,因此需要向 lib目录中添加spring-aop-.jar否则程序运行时会报错

    spring-aop.jar

3.RequestMapping 注解

3.1 @RequestMapping 注解的 “使用”

  • Spring 通过 @Controller 注解找到相应的控制器 后,还需要知道控制器内部每一个请求是如何处理的,这就需要使用org.springframework.web.bind.annotation.RequestMapping注解类型。

  • RequestMapping注解类型用于 映射一个请求一个方法 ,其注解形式为 : @RequestMapping,可以使用该注解 标注在一个方法或一个类上

    ( 即通过 @Controller注解则用于 标记“控制器类”,@RequestMapping注解则用于 “映射一个方法或一个类”即前端发送的 “url请求” 通过 “@RequestMapping注解” 能找到对应的“方法”上,“类或方法”则对请求做出“响应。)

    前端url请求 --找到“控制器” —再根据自身携带“url请求信息”,对比“@RequestMapping中的url信息”,找到能做出“响应”方法。)

标注在 “方法” 上
  • 标注在一个方法 上时,方法将成为一个请求处理方法,它会在程序接收到对应URL请求时被调用 (即前端的url请求信息 和 该方法上的@RequestMapping( )注解的 url信息一致该方法就会被调用)。

    /*** 控制器类*/
    @Controller //比较该类为“控制器类”
    public class FirstController  {/*** 为“前端的url请求” 和 该“方法”中的“/firstController” 设立URL映射关系 :* 只要是 /firstController 的前端url请求 就会请求到该方法上, 执行该方法,并作出响应。*/@RequestMapping(value = "/firstController") public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {...return mav;}
    }
    

    使用 @RequestMapping注解 后,上述代码中的 handleRequest( )方法就可以通过地址:
    http://localhost:8080/springMVC_Demo/firstController 进行访问

标注在 “类” 上
  • @RequestMapping注解 标注在一个类 上时,该类中的所有方法都将映射为相对于类级别请求,表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下

    简而言之 :
    @RequestMapping用在上,就表明前端能通过“url路径 / url请求” 找到被 @RequestMapping标记的“控制器类”上,将 “控制器类” 和 “前端url请求” 进行URL映射绑定。)

    /*** 控制器类*/
    @Controller //比较该类为“控制器类”
    @RequestMapping(value = "hello") //前端的“url请求”能找到该“控制器类”
    public class FirstController3  {@RequestMapping(value = "/FirstController3")public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {...return mav;}
    }
    

    由于在 控制器类”上 添加了 @RequestMapping 注解,并且其value 属性值为“/hello,所以上述
    码中handleRequest( )方法请求路径将变为:http://localhost:8080/springMVC_Demo/hello/firstController。如果该类中还包含其他方法,那么在其他方法的请求路径中也需要加入“/hello”。

3.2 @RequestMapping 注解的 “属性”

  • @RequestMapping注解中 “属性-详解

    属性类型描述
    nameString可选属性用于为映射地址 指定别名
    value
    (默认属性)
    String[]可选属性,同时也是 默认属性用于映射一个请求一种方法,可以标注在一个方法一个类上
    ps
    value其唯一属性时,可以省略属性名当注解中只有value一个属性时,可省略不写value ( 省略属性名 )
    methodRequestMethod[]可选属性,用于 指定该方法用于处理哪种类型请求方式,其请求方式包括 GETPOSTHEADOPTIONSPUTPATCHDELETETRACE
    例如 method=RequestMethod.GET 表示只支持 GET 请求,如果需要支持多个请求方式则需要通过 { }写成数组的形式,并且多个请求方式之间是有英文逗号分隔
    paramsString[]可选属性,用于指定Request 中必须包含某些参数的值,才可以通过其标注的方法处理
    headersString[]可选属性用于指定Request必须包含某些指定的header的值,才可以通过其标注的方法处理。
    consumesString[]可选属性用于指定处理请求提交内容类型( Content-type ),比如 application/jsontext/html 等。
    producesString[]可选属性用于指定返回内容类型返回的内容类型必须是request请求头( Accept )中所包含的类型

    在上表中,所有属性都是可选的,但其 默认属性value。当 value其唯一属性时,可以省略属性名,例如下面两种标注的含义相同 (因为只有value这个一个属性 ) :

    /*** 因为只有value这一个属性,所以value这个属性名可以省略不写。* (这两个注解含义相同)*/
    @RequestMapping(value = "hello") 
    @RequestMapping("hello") 
    

4.组合注解

  • Spring框架的4.3版本中引入组合注解,来帮助简化常用的HTTP 方法映射,并更好地表达被注解方法语义。其组合注解如下所示 :

    @GetMapping : 匹配 GET 方式请求
    @PostMapping : 匹配 POST 方式请求
    @PutMapping : 匹配 PUT 方式请求
    @DeleteMapping : 匹配 DELETE 方式请求
    @PatchMapping : 匹配 PATCH方式请求

  • @GetMapping 为例,该 组合注解@RequestMapping(method = RequestMethod.GET)
    缩写,它会将 HTTP GET映射到特定的处理方法上。

    例子如下

    传统的@RequestMapping注解使用方式 如下 :

     //"传统"的@RequestMapping注解使用方式@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)public String selectUserById(String id) {....}
    

    新注解 : @GetMapping使用方式 如下 :

        //"新注解 :@GetMapping注解的使用//新注解比“传统的注解方式” 使用起来更简单@GetMapping(value = "/user{id}")public String selectUserById(String id) {....}
    

    新注解 ( 组合注解 )比“传统的注解方式” 使用起来更简单,可以省略method属性

4.1 请求处理方法的 “参数类型” 和 “返回值类型”

请求处理方法中的 “参数类型”
  • 控制器类中,每一个请求处理方法都可以有多个不同类型参数,以及一个多种类型返回结果。例如在入门案例中,handleRequest()方法参数 就是对应请求的 HttpServletRequestHttpServletResponse 两种参数类型。除此之外,还可以使用其他的参数类型,例如在请求处理方法中需要访问HttpSession对象,则可以添加 HttpSession 作为 参数,Spring会将对象正确地传递给方法,其使用示例如下 :

        @GetMapping(value = "/user{id}")public String selectUserById(HttpSession session) { //该“请求处理方法”的参数为 : HttpSession....}
    
  • 请求处理方法 中, 可以出现参数类型 如下:(注意: 下面的“请求方法”中的“参数内容

    .javax.servlet.ServletRequest / javax.servlet.http.HttpServletRequest
    javax.servlet.ServletResponse / javax.servlet.http.HttpServletResponse
    javax.servlet.http.HttpSession
    org.springframework.web.context.request.WebRequest
    org.springframework.web.context.request.NativeWebRequest
    java.util.Locale
    java.util.TimeZone (Java 6+) / java.time.Zoneld (on Java 8)
    java.io.InputStream / java.io.Reader
    java.io.OutputStream / java.io.Writer
    org.springframework.http.HttpMethod
    java.security.Principal
    @PathVariable@MatrixVariable@RequestParam@RequestHeader@RequestBody
    @RequestPart@SessionAttribute@RequestAttribute 注解
    HttpEntity<?>
    java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap
    .org.springframework.web.servlet.mvc.support.RedirectAttributes
    org.springframework.validation.Errors /org.springframework.validation.BindingResult
    org.springframework.web.bind.support.SessionStatus
    ·org.springframework.web.util.UriComponentsBuilder

    ps :
    需要注意的是,org.springframework.ui.Model类型不是一个Servlet API类型,而是一个包含了 Map 对象Spring MVC 类型。如果方法中添加Model 参数,则每次调用该请求处理方法时,Spring MVC 都会创建Model对象,并将其作为参数传递给方法

请求处理方法的 “返回值类型”
  • 在上面代码案例中,请求处理方法返回的是一个ModelAndView类型数据 ( 请求处理方法返回值类型为 :ModelAndView类型 )。除了此种类型外请求处理方法还可以返回其他类型的数据

  • Spring MVC 所支持常见方法返回类型 ( 返回值类型 )如下 :

    返回值类型描述
    ModelAndView (常用)ModelAndView类型中可以 添加Model 数据,并 指定视图
    Model (常用)———
    Map———
    View
    String (常用)
    ps :
    实际开发中通用String类型跳转“”视图“” + Model参数传递“属性值”。
    String类型返回值可以跳转视图不能携带数据
    ps :
    String类型除了可以跳转“视图”外,还能 重定向” 和 “请求转发
    void (常用)void类型主要在 异步请求时使用只返回数据,而不会跳转视图
    HttpEntity<?>ResponseEntity<?>———
    Callable<?>———
    DeferredResult<?>———

    注意点 :
    由于==ModelAndView类型未能实现数据与视图之间解耦,所以在企业开发时,方法返回类型通常都会使用String。既然 String 类型返回值不能携带数据,那么在方法中是如何将数据带入视图页面的呢 ?这就用到==了上面所讲解的 Model 参数类型 ( Mode类型 : 属于处理方法中的 参数类型 ),通过该参数类型,即可添加需要在视图中显示属性

    实际开发中,常用的是 :
    通过String类型跳转“”视图“ 通过Model参数类型传递“属性值”

    @Controller //比较该类为“控制器类”
    @RequestMapping(value = "/firstController") //前端的“url请求”能找到该“控制器类”
    public class FirstController3  {@GetMapping(value = "/firstController")//返回值类型为 : String : 可跳转“视图”。//处理方法中的“参数类型” : Model(模型对象) : 可传递“属性”(给"视图")--通过Model向视图中添加传递数据public String selectUserById(HttpServletRequest request,HttpServletResponse response ,Model model)  {//向Model(模型对象)中添加数据 --进行数据的传递model.addAttribute("msg", "这是我的第一个Spring MVC程序。");//通过String类型返回“视图“return "WEB-INF/jsp/first.jsp";}
    }
    

    在上述方法代码中,“处理方法”中参数的类型有 : Model (模型对象),通过该参数实例addAttribute( )方法即可添加所需数据。“处理方法”的返回值类型为 : String类型String类型除了可以返回上述代码中视图页面外,还可以进行 重定向请求转发

通过返回值“String类型”进行 “重定向”
 //通过String类型进行“重定向”@RequestMapping(value = "/update")//返回值类型为 : String ,此处通过String来进行“重定向”public String selectUserById(HttpServletRequest request,HttpServletResponse response ,Model model)  {.....return "redirect:queryUser";}
通过返回值“String类型”进行 “请求forward转发”
//通过String类型进行“forward请求转发”@RequestMapping(value = "/toEdit")public String selectUserById(HttpServletRequest request,HttpServletResponse response ,Model model)  {.....return "forward:editUser";}

5.ViewResolver(视图解析器)

  • Spring MVC 中的 视图解析器 负责解析视图,可以通过在配置文件中定义一个ViewResolver配置视图解析器其配置示例如下 :

        <!--   配置“视图解析器” : 在“处理方法”中可直接写要返回的“视图文件名”,不用写“该视图”对应的前后缀 --><!--  在视图解析器中配置要返回的视图的对应的“前后缀”  --><!--  配置视图解析器 : 可简化在“处理方法”中要填的“视图的路径”  --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--    设置返回的“视图”对应的“前缀”    --><property name="prefix" value="/WEB-INF/jsp"/><!--    设置返回的“视图”对应的“后缀”    --><property name="suffix" value=".jsp"/></bean>
    

    上述代码中,定义了一个idviewResolver视图解析器,并设置了 视图的前缀后缀属性。这样设置后,方法中所定义view 路径可以简化。例如,上面例子中的逻辑视图名只需设置为“first”,而不再需要设置为“WEB-INF/jsp/first.jsp” (配置了前后置,现在只return “first” 就能返回一个视图),在访问时视图解析器自动地增加前缀后缀

相关文章:

Spring MVC | Spring MVC 的“核心类” 和 “注解”

目录: Spring MVC 的“核心类” 和 “注解” &#xff1a;1.DispatcherServlet (前端控制器)2.Controller 注解3.RequestMapping 注解3.1 RequestMapping 注解的 “使用”标注在 “方法” 上标注在 “类” 上 3.2 RequestMapping 注解的 “属性” 4.组合注解4.1 请求处理方法的…...

Python 创建PPT

本篇为如何使用Python来创建ppt文件。 创建PPT 安装必要的库 命令如下&#xff1a; pip install python-pptx 安装过程&#xff1a; 创建ppt文件 在当前目录下创建一个test的ppt文件。其中包含两页&#xff0c;分别使用了不同的布局。 第一页设置了标题和内容。第二页只设…...

【工具】Git的24种常用命令

相关链接 传送门&#xff1a;>>>【工具】Git的介绍与安装<< 1.Git配置邮箱和用户 第一次使用Git软件&#xff0c;需要告诉Git软件你的名称和邮箱&#xff0c;否则无法将文件纳入到版本库中进行版本管理。 原因&#xff1a;多人协作时&#xff0c;不同的用户可…...

rabbitmq 基本总结

rabbitmq 的基本概念 vhost、broker、producer、 consumer、 exchange、 queue、 routing key rabbitmq 常用的队列类型&#xff0c;工作队列&#xff08;简单队列&#xff09;,pub/sub, routing key&#xff0c; topic 模式 <dependency><groupId>com.rabbitmq&l…...

7、Copmose自定义颜色和主题切换

Copmose自定义颜色和主题切换 一起颜色的设置的都是在res/values/colors里面去做颜色&#xff0c; 但是当使用compose的时候&#xff0c;抛弃了使用了ui.theme底下的Color.kt和Theme.kt 但是默认使用的是MaterialTheme主题&#xff0c;里面的颜色字段不能定义&#xff0c;因此…...

js-判断变量是否定义

if (typeof myVar undefined) {// myVar (未定义) 或 (已定义但未初始化) } else {// myVar (已定义和已初始化) } 参考 https://www.cnblogs.com/redFeather/p/17662966.html...

视频远程监控平台EasyCVR集成后播放只有一帧画面的原因排查与解决

智慧安防视频监控平台EasyCVR能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;平台可支持的接入协议包括&#xff1a;国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议…...

Pulsar 社区周报 | No.2024.03.08 Pulsar-Spark Connector 助力实时计算

关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目&#xff0c;是下一代云原生分布式消息流平台&#xff0c;集消息、存储、轻量化函数式计算为一体&#xff0c;采用计算与存储分离架构设计&#xff0c;支持多租户、持久化存储、多机房跨区域数据复制&#xff0c…...

Redis--线程模型详解

Redis线程模型 Redis内部使用的文件事件处理器&#xff08;基于Reactor模式开发的&#xff09;file event handler是单线程的&#xff0c;所以Redis线程模型才叫单线程模型&#xff0c;它采用IO多路复用机制同时监听多个socket&#xff0c;当被监听的socket准备好执行accep、r…...

[备赛笔记]——5G大唐杯(5G考试等级考考试基础试题)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…...

【解读】OWASP 大语言模型(LLM)安全测评基准V1.0

大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;是指参数量巨大、能够处理海量数据的模型, 此类模型通常具有大规模的参数&#xff0c;使得它们能够处理更复杂的问题&#xff0c;并学习更广泛的知识。自2022 年以来&#xff0c;LLM技术在得到了广泛的应…...

java数据结构与算法刷题-----LeetCode77. 组合

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 递归实现 解题思路 这种题只能暴力求解&#xff0c;枚举所有可…...

网络安全运营的工作内容(附资料下载)

【推荐】最新网络安全运营方案和实践合集&#xff08;共80多份&#xff09;.zip 网络安全运营的工作内容是一个多层次、多维度的体系&#xff0c;涵盖了多个关键领域以确保网络环境的稳定和安全。以下是一些主要的工作内容&#xff1a; 安全策略制定与实施&#xff1a; 制定网…...

华为OD面试分享13(2024年)

华为OD面经 二战失败选手,双非一本部门目标院校,数学与应用数学专业,无相关工作经验也没有什么拿得出手的项目。3月中旬开始重新学java(大学里有学过一个学期的java,很水)。期间经常通宵肝,学习框架、刷leedcode,可能是因为数学专业出身,数据结构和算法这一块学起来并…...

Android14之解决报错:No module named sepolgen(一百九十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

数电学习笔记——逻辑函数的代数法化简

目录 逻辑函数的化简原则 与或逻辑的化简 1、吸收律(1) ( ABABA) 2、吸收律(2)(3)( AABA&#xff1b;AABAB) 3、多余项定律( ABACBCABAC) 4、拆项法 5、添项法 逻辑函数的化简原则 (1)逻辑函数所用的门最少 (2)各个门的输入端要少 (3)逻辑电路所用的级数要少 (4)逻辑…...

react实战——react旅游网

慕课网react实战 搭建项目问题1.按照官网在index.tsx中引入antd出错&#xff1f;2.typescript中如何使用react-router3.react-router3.1 V63.2 V53.3V6实现私有路由 4.函数式组件接收props参数时定义数据接口&#xff1f;5.使用TypeScript开发react项目&#xff1a;6.要使一个组…...

ChatGPT 串接到 Discord - 团队协作好助理

ChatGPT 串接到 Discord - 团队协作好助理 ChatGPT 是由 OpenAI 开发的一个强大的语言模型&#xff0c;本篇文章教你如何串接 Discord Bot &#xff0c;协助团队在工作上更加高效并促进沟通与协作。使 ChatGPT 发挥出最大的功效&#xff0c;进一步提升工作效率和团队协作能力。…...

js随机整数

在JavaScript中&#xff0c;您可以使用 Math.random() 函数生成一个0到1之间的随机数&#xff08;包括0&#xff0c;但不包括1&#xff09;&#xff0c;然后通过适当的缩放和取整&#xff0c;可以得到一个随机整数。以下是一个简单的函数&#xff0c;用于生成指定范围内的随机整…...

.Net预处理器指令

1.最常用的预处理器指令#region #endregion&#xff0c;来定义可在大纲中折叠的代码区域. #region MyClass def public class MyClass { static void Main() { } } #endregion 2.定义符号预处理器指令&#xff1a;来定义或取消定义条件编译的符号&#xff1a; #…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...