当前位置: 首页 > 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; #…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...